【Redis】解决Redis并发竞争key问题

解决Redis并发竞争key问题

  • 解决Redis并发竞争key问题
    • 场景:
      • 场景一:多个请求对商品减库存的操作流程
      • 场景二:
    • 怎么解决?
      • 乐观锁
      • 分布式锁
      • 时间戳
      • 消息队列

解决Redis并发竞争key问题

问题:多个客户端set同一个key

场景:

场景一:多个请求对商品减库存的操作流程

○ 取出库存值
○ 计算新的库存值
○ 写入新的库存值
【Redis】解决Redis并发竞争key问题_第1张图片

场景二:

○ 三个请求有序的修改某个key,正常情况数据版本应该是123,但是由于网络原因变成了132,出问题了

怎么解决?

乐观锁

○ 适用于大家一起抢着改同一个key,对修改顺序没有要求的场景
○ 如果redis使用数据分片,这个方法不适用
○ 实现:使用watch命令来实现

分布式锁

○ 适合于分布式环境,不用关心redis是否是分片集群模式
○ 实现:Zookeeper、Redis

时间戳

○ 适合有序场景
○ 实现:
■ 写入时顺便写一个时间戳
■ 写入之前比较一下自己的时间戳是否早于现有记录的时间戳,如果早于的话,说明自己的时间戳过期了,就不需要写入了
【Redis】解决Redis并发竞争key问题_第2张图片

消息队列

○ 并发量很大的情况下,可以使用消息队列进行穿行处理,这在高并发场景下是一种常见的解决方案

你可能感兴趣的:(【Redis】,redis,java)