redis zset和geo的value求交集,score取zset中的值
时间: 2024-05-07 19:16:00 浏览: 23
可以通过以下步骤实现:
1. 使用 ZRANGEBYSCORE 命令获取 zset 中 score 在指定范围内的成员,将成员作为集合 A。
2. 使用 GEORADIUS 命令获取 geo 中指定范围内的成员及其坐标,将成员作为集合 B。
3. 使用 SINTER 命令对集合 A 和集合 B 进行求交,得到共同的成员。
4. 遍历共同的成员,分别使用 ZSCORE 和 GEODIST 命令分别获取 zset 中的值和 geo 中的距离。
示例代码如下:
```python
from redis import Redis
redis = Redis()
# 获取 zset 中 score 在指定范围内的成员
members = redis.zrangebyscore('my_zset', min=0, max=10)
# 获取 geo 中指定范围内的成员及其坐标
geo_members = redis.georadius('my_geo', longitude=1.0, latitude=2.0, radius=5, unit='km', withdist=True)
# 对集合 A 和集合 B 进行求交
common_members = set(members) & set([m[0] for m in geo_members])
# 遍历共同的成员,分别获取 zset 中的值和 geo 中的距离
for member in common_members:
score = redis.zscore('my_zset', member)
distance = [m[1] for m in geo_members if m[0] == member][0]
print(f'{member}: {score}, {distance}')
```