Redis的并发竞争如何解决?如何保证并发写的有序?

1、使用一个阻塞队列,依次对数据进行写操作(注意,消费的时候用单线程);
2、对一个key使用计数器incr命令,依次处理;
3、对数据依次按顺序存入数据库,并按时间戳顺序执行;
4、基于 zookeeper 实现分布式锁。每个系统通过 zookeeper 获取分布式锁,确保同一时间,只能有一个系统实例在操作某个 key,别人都不允许读和写。
5、使用乐观锁的思想;

watch price
get price $price
$price = $price + 10
multi
set price $price
exec

watch这里表示监控该key值,后面的事务是有条件的执行,如果从watch的exec语句执行时,watch的key对应的value值被修改了,则事务不会执行。
6、使用类似MVCC版本控制(也是乐观锁)的思想;

使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。

posted @ 2020-05-28 21:55  昕友软件开发  阅读(1300)  评论(0编辑  收藏  举报
欢迎访问我的开源项目:xyIM企业即时通讯