'zpopmax'可以与redis-py-cluster一起使用吗?

时间:2019-08-30 16:47:38

标签: python redis redis-cluster

我正在尝试将zpopmax与python rediscluster (repo)中的排序集一起使用,但是下面非常简单的程序却无法使用AttributeError

问题:如何通过zpopmax实现rediscluster? 如果确实没有实现,则必须在事务中同时使用zrevrangezrem来确保线程安全。

可能有用的背景

我已经注意到该命令在常规redis-py中可用。我还看到命令tested in the git repo,所以我可能缺少一些简单的东西。

我还尝试使用常规zpopmaxredis,并得到相同的错误。

我的reids-py-cluster是1.3.6版。我的redis-py是v2.10.6。我的actual Redis是v5.0.4

代码

    from rediscluster import StrictRedisCluster as s

    rc = s(startup_nodes=[{'host': 'localhost', 'port': '7000'}],
           decode_responses=True)
    rc.zadd('my-set-name', 3, 'my-key-name')

    # print to confirm zadd worked
    print(rc.zrange('my-set-name', 0, -1, withscores=True)) 

    # expecting this to print 'my-key-name'
    print(rc.zpopmax('my-set-name')) # Attribute Error

我希望最后一条打印语句的输出类似于“ my-key-name”,但我遇到了AttributeError

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

问题似乎是redis-py在3.0版中添加了support for ZPOPMAX,但redis-py-cluster 1.3.6 requires是旧版的redis-py。

这里最简单的解决方案可能就是等待redis-py-cluster更新。这种固定所引起的问题已经acknowledged,而下一版本将add support用于redis-py 3.0。

答案 1 :(得分:0)

版本!正如Kevin的回答所记录的,这里是版本。但是,我可以实际使用此设置进行工作:

代码

from rediscluster import RedisCluster as s

rc = s(startup_nodes=[{'host': 'localhost', 'port': '7000'}],
       decode_responses=True)
rc.zadd('my-set-name', {'my-key-name':3})

print(rc.zpopmax('my-set-name')) # WORKS! (prints [('my-key-name', 3.0)])

感谢Kevin Christopher Henry的帮助。