前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >原子性读取队列数据-lua脚本

原子性读取队列数据-lua脚本

原创
作者头像
王宝
发布2024-11-27 12:01:38
发布2024-11-27 12:01:38
980
举报
文章被收录于专栏:核心思路逻辑

背景:

生产者往redis队列中生产数据,多个消费者从该队列中消费消息,防止消费者重复从队列中获取相同消息

实现逻辑:

使用redis【lrange】命令,从队列中获取一定数量的消息,再使用【ltrim】裁剪掉对应数量的消息。将这两个指令打包成lua脚本,便可实现原子性操作。

lua脚本示例

代码语言:txt
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景:
  • 实现逻辑:
  • lua脚本示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档