“zpopmax”能否与redispycluster一起使用?

2024-09-28 05:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python rediscluster(repo)中对排序集使用zpopmax,但是下面非常简单的程序在AttributeError中失败。你知道吗

问题:如何用rediscluster实现zpopmax? 如果它真的没有实现,我将不得不在事务中同时使用zrevrangezrem,以确保线程安全。你知道吗

可能有用的背景

我注意到该命令在常规(非集群)redis-py中可用。我也看到了命令tested in the git repo,所以我可能错过了一些简单的东西。你知道吗

我还尝试了zpopmax使用正则redis并得到了相同的错误。你知道吗

我的reids-py-cluster是v1.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

我希望最后一个print语句的输出类似于'my key name',但是我得到了一个AttributeError

感谢您的帮助:)


Tags: keynamepy命令redistruemyrepo
2条回答

版本!正如凯文的回答所记载的,版本是这里的问题。但是,我可以用这个设置来实现:

代码

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的帮助。你知道吗

问题似乎是redispy在版本3.0中添加了support for ^{},而redispycluster1.3.6requires是redispy的旧版本。你知道吗

这里最简单的解决方案可能就是等待redis-py集群更新。这种固定所引起的问题已经acknowledged,下一个版本将add support用于redispy3.0。你知道吗

相关问题 更多 >

    热门问题