如何在Python中使用Redis的GEOADD命令?
解决Redis GEOADD报错:"GEOADD allows either 'nx' or 'xx', not both"
错误原因
问题出在redis-py版本兼容性导致的参数解析错误:
- redis-py 4.x及以上版本对
geoadd的API做了调整,要求将地理坐标和成员打包成元组列表传递; - 你仍使用旧版本(3.x及以下)的调用方式,导致参数错位:纬度值被误识别为
nx参数、成员名被误识别为xx参数,这两个参数非空/非零会被视为True,触发了Redis的参数校验规则。
解决方案
方案1:适配redis-py 4.x+版本的写法
将坐标和成员封装成元组列表传递给geoadd:
from redis import Redis redis_con = Redis(host="localhost", port=6379) # 用列表包裹元组,每个元组格式为(经度, 纬度, 成员名) redis_con.geoadd("Sicily", [(13.361389, 38.115556, "Palermo")])
方案2:降级redis-py到3.x版本
如果想继续使用旧的调用方式,执行以下命令降级:
pip install redis==3.5.3
内容的提问来源于stack exchange,提问作者Tugrul Gokce
相关产品推荐
相关产品推荐

