redis:匹配散列的部分键

redis: matching partial keys of hash

在哈希中,我有一堆键值对

我的密钥格式如下: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开头的条目,您可以使用正则表达式或拆分来提取值。

请注意,这是前缀搜索而不是后缀搜索。如果你想要 "all entries in new york" 你需要反转排序集中的顺序。

我能够通过以下方式部分实现匹配哈希键:

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)