生产者往redis队列中生产数据,多个消费者从该队列中消费消息,防止消费者重复从队列中获取相同消息
使用redis【lrange】命令,从队列中获取一定数量的消息,再使用【ltrim】裁剪掉对应数量的消息。将这两个指令打包成lua脚本,便可实现原子性操作。
package test
func ListMLPopLua() string {
str := `
if #KEYS ~= 1 or #ARGV ~= 1 then
return -1
end
local queueName = KEYS[1]
local length = ARGV[1]
local result = redis.call('lrange', queueName, 0, length-1)
if result == false then
return -1
end
local val = redis.call('ltrim', queueName, length, -1)
if val['ok'] ~= 'OK' then
return -1
end
return result
`
return str
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。