解决Redis并发竞争key问题
解决Redis并发竞争key问题
问题:多个客户端set同一个key
场景:
场景一:多个请求对商品减库存的操作流程
○ 取出库存值
○ 计算新的库存值
○ 写入新的库存值
场景二:
○ 三个请求有序的修改某个key,正常情况数据版本应该是123,但是由于网络原因变成了132,出问题了
怎么解决?
乐观锁
○ 适用于大家一起抢着改同一个key,对修改顺序没有要求的场景
○ 如果redis使用数据分片,这个方法不适用
○ 实现:使用watch命令来实现
分布式锁
○ 适合于分布式环境,不用关心redis是否是分片集群模式
○ 实现:Zookeeper、Redis
时间戳
○ 适合有序场景
○ 实现:
■ 写入时顺便写一个时间戳
■ 写入之前比较一下自己的时间戳是否早于现有记录的时间戳,如果早于的话,说明自己的时间戳过期了,就不需要写入了
消息队列
○ 并发量很大的情况下,可以使用消息队列进行穿行处理,这在高并发场景下是一种常见的解决方案