redis如何实现原子性-LPOPRPUSH

学无止境-逆流而上 2016-09-20 10:02:48
有个高并发场景:2台机,在redis处共享一个list,来做先进先出队列,实现数据平均分配。但是Java redis并没有lpop+rpush结合在一起的原子操作,我如果将lpop+rpush加锁的话,又满足不了高并发;不加的话,会导致数据脏,丢失等问题。
比如redis维护队列:1,2,3,4
我希望高并发原子实现:(不加锁)
1出来的同时,排到队尾2,3,4,1
大家有啥意见?
...全文
5589 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ps45221 2016-09-21
  • 打赏
  • 举报
回复
你既不想加锁,又想要原子操作。。。 用java代码层面的话,效率会慢点。 你可以尝试把这两个操作用Lua脚本写,redis是可以原子性执行Lua脚本的 或者,你自己在redis维护一个事务锁
  • 打赏
  • 举报
回复
目前打算扭转一下思维,用rpoplpush(redis有这个原子操作)来做逆向,然后插入元素时lpush,弹出元素时rpop。原来redis不提供 lpoprpush是OK的。

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧