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

标签 redis lua sortedset zset

我需要实现一组具有单独过期时间的项目,所以我使用了 zset 和过期时间戳分数。 现在我想从未过期的项目范围内或至少从集合中的所有项目中获取随机项目。 我该怎么做?

我可以通过 LUA 脚本获取范围的最小和最大等级以及它们之间的随机等级吗?

Redis 版本:5.0.2

最佳答案

我通过以下脚本解决了这个问题:

-- KEYS[1] - set key
-- ARGV[1] - seed timestamp

local count = redis.call('ZCARD', KEYS[1]) 
if count ~= 0 then
    math.randomseed(ARGV[1]) 
    local rank = math.random(0, count - 1) 
    local range = redis.call('ZRANGE', KEYS[1], rank, rank)
    return range[1]
else
    return ''
end

并且因为我在所有项目中搜索,所以我每 n 秒对过期项目进行 sanitizer 。

关于redis - 从 Redis 中的排序集中获取随机项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219817/

相关文章:

c# - StackExchange.ConnectionMultiplexer.GetServer 不工作

python - Lua (5.0) 相当于 python struct.pack

file - Lua:更新文件十六进制编辑器样式的部分

Redis : Sorted sets for specific SMEMBERS

Java SortedSet 添加所有

java - 如何从 springSessionRepositoryFilter 中排除资源?

python - 如何正确地对 Python 脚本连接到 Redis 所需的时间进行基准测试?

redis - 是否可以在 rejson 数组中使用 LRANGE?

algorithm - 如何在方形网格上创建分支静脉/河流结构

java - Guava ImmutableSortedSet Multimap?