我需要实施具有各自有效期限的项目集,因此我使用了具有有效期限得分的zset
。
现在,我想从未过期项目的范围中,或者至少从集合中的所有项目中获得随机项目。
我该怎么办?
我可以通过LUA脚本获得范围的最小和最大等级以及之间的随机等级吗?
Redis version: 5.0.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()