1. 解决领域
位于不同 jvm 下的线程之间 , 不能使用 synchronized
那么 同一时间就可能对同一个资源进行访问 , 造成状态不一致.
比如 A , B买东西 , 买 资源 菠萝 ,只有一个 ,两个线程同时读到剩余 1 个库存 ,然后同时下单 .造成超卖
这个时候用一个统一能访问到的资源 , redis , 如果A要买 ,买的时候 ,
在redis里面加一个
SETNX 菠萝 A在买 ,就意味着A占有这个 菠萝 ,
正在进行操作
其他人就进不去. 因为此时的 菠萝是有 状态的
除非A操作完 , 然后B才能买 ,
这样做就不用去给数据库加锁 , 而把访问并发问题移交给Redis , 让它来控制谁来访问资源
有先后顺序.
(我们需要控制A买的操作时间 , 另外,也要设置锁的过期时间 , 防止A出现问题 ,
没有及时交出 锁 , 造成 菠萝 这个资源一直处于被锁定之中 !!)