在Redis中,我想获取不在SortedSet中的分数的上限分数(和成员)。在Java中,有NavigableSet我们可以使用Eceiling(Ee)为了返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素则返回null。有没有办法在Redis中做同样的事情,也许使用SortedSets或其他数据结构?谢谢 最佳答案 您可以使用ZRANGEBYSCORE使用Lua脚本。想象一下下面的排序集:zaddtest1azaddtest2bzaddtest4c您有3个元素,得分分别为1、2、4,并且您想调用ceiling(3)。将以
在Django应用程序中,我使用redis维护一个全局排序集,其中存储用户ID以及自纪元以来的当前时间分数。每11分钟后,我将运行一个异步任务,将排序集修剪为仅在前10分钟内保存的值,不超过。以下会完成这个吗?我不确定边缘情况(例如,这会确保所有旧值都被删除还是会泄漏等):time_now=time.time()#currenttimesinceepochten_mins_ago=time_now-(10*60)eleven_mins_ago=time_now-(11*60)my_redis_server.zremrangebyscore(sorted_set,eleven_mins_
如何从Redis排序集中检索分数刚好小于给定分数的最高值排名?例如,假设我的排序集是:rankvaluescore1)'a'-102)'d'-43)'c'04)'b'25)'e'10具体来说,如果我得到12分,我想检索排名5。如果我得到1分,我想检索排名3。如果我得到-11分,我想什么都不找。 最佳答案 注意#1:排序集中的排名是从0开始的注意#2:您必须执行两个查询,一个用于查找元素,另一个用于获取其排名。使用redis-cli的例子:127.0.0.1:6379>ZADDz-10a-4d0c2b10e(integer)5127.
我的redis中有多个排序集。它们的键具有以下模式:user:{userId}:data其中userId是实际值。相应集合的每个成员的分数等于添加时的时间戳。现在,我试图弄清楚如何为那些在特定时间戳之前添加了至少一个成员的排序集检索Redis键(这意味着至少一个成员的分数低于以毫秒为单位的给定时间戳)。我可以通过模式检索所有的键:KEYS'user:*:data'实际上,我可以使用命令检查一个键的所需条件:ZRANGEBYSCOREuser:{userId}:data-inf{timestamp}然后检查返回数据的大小但我是否有任何方法(单行、管道命令或使用Lua脚本)仅获取排序集中至
我想在Redis数据存储中存储位置三元组,但也想让它们可搜索。这将使进行范围查询成为可能,例如“给我12的所有点”。因此,我使用了排序集的组合。每个三元组都像这样保存在Redis中(例如位置A,x=1,y=2,z=3):hset/locations/Ax"1"hset/locations/Ay"2"hset/locations/Az"3"hset/locations/Apayload"{...somejsonpayload...}"zadd/locations:x1locations/Azadd/locations:y2locations/Azadd/locations:z3locat
我有一个像这样的Python元组列表:lst=[(22,-150.0),(23,-150.0),(18,-148.5),(15,-99.4),(5,-75.75),(4,-49.2),(13,-49.0),(9,-41.3),(20,-25.5),(17,-22.3),(10,-13.1),(16,-12.5),(14,-9.8),(3,-8.5),(1,-8.4),(12,-1.5),(7,-0.6),(2,-0.4),(6,1.7),(21,2.7)]我如何将其传递到redis排序集中,以便将每个元组中的第二个值用作分数?我尝试了zadd(sorted_set,*lst),但出现错
我想在我正在做的python项目中维护一个前100名用户(按分数)的列表。我觉得redissortedsets可以成为上述目的的一个很好的工具。但是,我不想为每个曾经得分的用户保留记录。那将是一个相当大的排序集,我只想按总分排名前100名的用户。在Redis的范围内,有没有办法使用sortedsets来实现这一点?我知道在列表的情况下可以执行lpush和ltrim,但这是一个更简单的情况,不需要按score排序.那么我该怎么做呢?我知道这个问题也可以在redissortedsets领域之外得到回答,但是redissortedsets是一个很好的工具,因此,使用它们对我想要实现的目标非常
是否有可能获得元素的元组列表及其在ZSET中的分数?例如:redis.zrange-function('channel',0,-1)[('item1',123),('item2',333),etc.] 最佳答案 对于redis-py,在zrange()中有一个可选参数根据docsforzrange():zrange(name,start,end,desc=False,withscores=False,score_cast_func=)Returnarangeofvaluesfromsortedsetnamebetweenstarta
我正在向我的排序集添加值,其中分数可能高达38位,例如5.5857766150356906e+37。从我的测试来看,redis似乎可以很好地处理像zrangebyscore这样的命令,但我仍然觉得我需要问-这些分数有多大限制?当我开始存储更多值时,我是否正在做一些对于日常Redis来说过于昂贵的事情? 最佳答案 根据Redisdocumentation,排序集得分为:thestringrepresentationofadoubleprecisionfloatingpointnumber.Adouble-precisionfloati
我正在使用Redis存储一组校验和。我正在递增解析大型数据集时看到的每个成员,并使用分数来确定我多次“访问”的成员。但是,由于此操作是定期进行的,因此我想之后将所有成员的分数重置为零。有什么好的方法吗?我知道ZRANGEBYSCORE,也许可以将它返回的内容“复制”到一个新key中,但是对于大量数据,这是不太理想的。我也可以在流程开始时取最低分数,然后ZREMRANGEBYSCORE所有等于或低于该分数的分数,但这似乎也不可取,因为我的分数会无限期地继续上升。 最佳答案 你可以使用ZUNIONSTORE使用WEIGHTS值为零复制集