我们正在研究一种解决方案,仅当新实体的分数是现有 Redis 排序集中所有实体中最高的时,我们才添加新实体。
是否有前提条件检查可以保证这种行为。
可以用Lua脚本解决:
-- add_only_large_enough.lua
local key = KEYS[1]
local member = ARGV[1]
local score = ARGV[2]
local largest_item = redis.call('zrange', key, -1, -1, 'withscores')
if next(largest_item) == nil or largest_item[2] < score then
redis.call('zadd', key, score, member)
return 1
else
return 0
end
像这样运行它:
redis-cli --eval add_only_large_enough.lua sorted_set_key , member score