草庐IT

redis - Redis 排序集中基于时间间隔的桶

有什么方法可以使用Redis排序集生成基于时间间隔的存储桶。我想在特定时间间隔内创建不同的排序集(比如15分钟)t1,t2为分数键排序集bucket#V1(t1,1),(t2,2).....(提交的桶)bucket#V1+15(t3,1),(t4,2).....(提交的桶)bucket#V1+30(t5,1),(t6,2).....(当前运行的bucket)即在15分钟的间隔内,它应该自动创建新键并开始在新的排序集中摄取数据。V1+15应在15分钟后开始...第二个挑战是如何查询committedbuckets?(不运行仍在摄取数据的存储桶)。最终目标是先查询提交的桶,然后使用时间范围

redis - 从 redis 排序集中按排名检索项目(并处理可以共享排名的项目)

我可以查询按分数(zrangebyscore)、按值​​(zrange)、按字典顺序(zrangebylex)等排序的Redis集合.但是,如果我想从Redis排序集中检索排名前10的项目,最好使用什么模式?对我来说,这并不等同于仅从排序集中检索前10项(即zrevrangeset_name010)。为什么?因为在许多现实场景中,当某些项目具有相同的分数时,它们被适本地赋予共享排名。因此,可能会有一个包含11个成员的前10名列表(例如)。是否可以通过这种方式查询Redis排序集中的排名?我的另一个选择是检索整个集合并在redis之外进行计数。我相信这对于经常重新排名的大型集合来说可能不

redis - 从 Redis 中的排序集中获取随机项目

我需要实现一组具有单独过期时间的项目,所以我使用了zset和过期时间戳分数。现在我想从未过期的项目范围内或至少从集合中的所有项目中获取随机项目。我该怎么做?我可以通过LUA脚本获取范围的最小和最大等级以及它们之间的随机等级吗?Redis版本:5.0.2 最佳答案 我通过以下脚本解决了这个问题:--KEYS[1]-setkey--ARGV[1]-seedtimestamplocalcount=redis.call('ZCARD',KEYS[1])ifcount~=0thenmath.randomseed(ARGV[1])localra

redis - 在 redis 排序集中实现两阶段排序的最有效方法

在Redis排序集中实现两阶段排序的最有效方法是什么?IE。按x排序,并且(仅)当x相等时,按y排序?我有一组按优先级(在1-10之间)排序的值,但是当优先级发生冲突时,我会先最近对它们进行排序em>。您认为如何才能做到这一点(以最高效的方式)? 最佳答案 一个可行的解决方案是将priority+int(epoch_time)直接用作score。优先级不应在1-10之间,而应在(1,000,000,000-10,000,000,000)之间 关于redis-在redis排序集中实现两阶段

redis - 从 redis 排序集中,检索分数小于给定分数的最高值的排名

如何从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.

database - 从redis中的多键排序集中查询数据

我有几个存储在redis中的排序集。喜欢:ZADD标签:1112233445566ZADD标签:2211222233244255266ZADD标签:3311322333344355366这是我的问题:我想按tag:1和tag:2,或tag:1和tag:3,或tag:1、tag:2和tag:3中的分数排序数据。这意味着我需要从不同的组合键获取数据([1][2][3][1,2,3][1,2][2,3][...])。我有数百个这种排序集,每个排序集都可以组合到任何一个/两个/多个其他集。我有点不选择ZUNIONSTORE,因为所有的组合都是临时的,ZUNIONSTORE会创建另一个新的排序集

javascript - Node.js 检查几个 redis 集中的值并同步返回

我有7个集合,我需要至少在一个集合中检查值是否存在(sismember)并返回true或false。我需要同步获取该值,如下所示:constisExist=!!(_.max(_.range(7).map((day)=>{redis.sismember(`blacklist${day}`,hashToken,function(err,res){returnres;});}))); 最佳答案 只要可以避免,就永远不需要同步代码。在这种情况下,我建议使用Promises来管理对redis的七个请求。Bluebirdpromiselibra

python - 将元组的python列表存储在redis排序集中,其中元组的第二个元素用作分数

我有一个像这样的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),但出现错

redis - 在 Redis 中,如何通过从第二个排序集中排除记录来将记录与第一个集分开。?

我有两个已排序的集合,我想将记录与第一个集合分开,并通过从第二个已排序的集合中排除记录来存储在新的列表/排序集中。下面是一个例子:第1组:1,2,3,4,5set2:3,5,7,8,9输出:1,2,4编辑:我已经找到加载脚本并使用eval从nodejs执行脚本的方法。奇怪的是,当我执行你的脚本时,即使是5-10条记录,它也需要1秒来处理,这让我怀疑如果我有数千条记录,它的可扩展性有多大。下面是我的示例nodejs代码:hsetxx='redis.call("ZINTERSTORE","temp",2,"set11","set21","weights",1,0)redis.call("Z

python - redis从结果集中获取值

我从ZrangebyScore函数返回的结果为[b'101']。我只想提取101值并丢弃其他附加字符。它是字节形式的。如何使用Python将其转换为整数格式。 最佳答案 如果你使用的是Py3,试试这个:mylist=[b'101']val=int(mylist[0].decode()) 关于python-redis从结果集中获取值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5