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

时间:2019-05-20 11:13:07

标签: redis lua sortedset zset

我需要实施具有各自有效期限的项目集,因此我使用了具有有效期限得分的zset。 现在,我想从未过期项目的范围中,或者至少从集合中的所有项目中获得随机项目。 我该怎么办?

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

Redis version: 5.0.2

2 个答案:

答案 0 :(得分:0)

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

-- 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秒就对过期物品进行消毒。

答案 1 :(得分:0)

可以更改:

setMapStyle()