redis:匹配哈希的部分键

时间:2016-02-22 07:30:31

标签: python-2.7 redis redis-py

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

我的密钥格式如下:name:city

john:newyork
kate:chicago
lisa:atlanta

我使用python访问redis,在https://redis-py.readthedocs.org/en/latest/中,我没有看到任何进行部分匹配的哈希操作

我希望能够使用城市名称

获取哈希中的所有密钥

可能吗?

2 个答案:

答案 0 :(得分:1)

这可能,但不是HASH对象,而是有序集。只要排序集中的所有元素具有相同的分数,您就可以进行字典前缀匹配。

让我们说你做了以下(raw 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开头的所有条目,您可以使用正则表达式或拆分来提取值。

请注意,这是前缀搜索而非后缀搜索。如果你想要&#34;纽约的所有参赛作品&#34;你需要反转排序集中的顺序。

答案 1 :(得分:0)

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

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)