有没有好的方法来支持Redis排序集中的流行成员?

时间:2017-05-22 08:40:47

标签: redis

有没有好的方法来支持Redis排序集中的流行成员,就像列表的api LPOP一样?

我从Redis排序集中弹出消息的想法是使用ZRANGE + ZREM,但它不是线程安全性,并且当多线程同时从不同主机访问它们时需要分布式锁。

请提示是否有更好的方法从排序集中弹出成员?

1 个答案:

答案 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