有没有好的方法来支持Redis排序集中的流行成员,就像列表的api LPOP一样?
我从Redis排序集中弹出消息的想法是使用ZRANGE + ZREM,但它不是线程安全性,并且当多线程同时从不同主机访问它们时需要分布式锁。
请提示是否有更好的方法从排序集中弹出成员?
答案 0 :(得分:1)
您可以编写Lua script来完成这项工作:将这两个命令包装在一个Lua脚本中。 Redis确保Lua脚本以原子方式运行。
local key = KEYS[1]
local result = redis.call('ZRANGE', key, 0, 0)
local member = result[1]
if member then
redis.call('ZREM', key, member)
return member
else
return nil
end