Redis 分布式锁

1. 解决领域

位于不同 jvm 下的线程之间 , 不能使用  synchronized

那么  同一时间就可能对同一个资源进行访问 , 造成状态不一致.

比如 A , B买东西 ,  买 资源 菠萝  ,只有一个 ,两个线程同时读到剩余  1  个库存 ,然后同时下单  .造成超卖

 

这个时候用一个统一能访问到的资源 , redis  , 如果A要买 ,买的时候 ,

在redis里面加一个 

SETNX 菠萝  A在买 ,就意味着A占有这个 菠萝   ,
正在进行操作 
其他人就进不去.  因为此时的 菠萝是有 状态的
 
除非A操作完 , 然后B才能买 ,
 
这样做就不用去给数据库加锁 , 而把访问并发问题移交给Redis , 让它来控制谁来访问资源
 
有先后顺序.
(我们需要控制A买的操作时间 , 另外,也要设置锁的过期时间 , 防止A出现问题 ,
没有及时交出 锁 , 造成  菠萝 这个资源一直处于被锁定之中 !!)
 

 

 

posted @ 2020-05-05 03:45  挪威森林猫Zzz  阅读(120)  评论(0编辑  收藏  举报