在哈希中,我有一堆键值对
我的密钥采用以下格式: name:city
john:newyork
kate:chicago
lisa:atlanta
我使用 python 访问 redis,在https://redis-py.readthedocs.org/en/latest/中,我没有看到任何进行部分匹配的哈希操作
我希望能够使用城市名称获取哈希中的所有键
那可能吗?
在哈希中,我有一堆键值对
我的密钥采用以下格式: name:city
john:newyork
kate:chicago
lisa:atlanta
我使用 python 访问 redis,在https://redis-py.readthedocs.org/en/latest/中,我没有看到任何进行部分匹配的哈希操作
我希望能够使用城市名称获取哈希中的所有键
那可能吗?
这是可能的,但不是 HASH 对象,而是排序集。只要排序集中的所有元素具有相同的分数,就可以进行字典前缀匹配。
假设您执行以下操作(原始 redis 命令,但同样适用于 python 客户端):
ZADD foo 0 john:newyork:<somevalue>
ZADD foo 0 john:chicago:<somevalue>
ZADD foo 0 kate:chicago:<somevalue>
....
然后,您可以使用ZRANGEBYLEX进行查询:
ZRANGEBYLEX foo [john: (john:\xff
将为您提供以 开头的所有条目,john
您可以使用正则表达式或拆分提取值。
请注意,这是前缀搜索,而不是后缀搜索。如果你想要“纽约的所有条目”,你需要颠倒排序集中的顺序。
我能够通过以下方式部分实现匹配的哈希键:
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.StrictRedis(connection_pool=pool)
cmd = "hscan <hashname> 0 match *:atlanta"
print r.execute_command(cmd)