1.redis集群,在Redis的master节点上拿到了锁;但是这个加锁的key还没有同步到slave节点;master故障,发生故障转移,slave节点升级为master节点;
导致锁丢失。
https://yq.aliyun.com/articles/674394
redlock
zookeeper(强一致性)
2.redisson.lock的性能问题怎么解决?
思路1:类似java1.7中 concurrenthashmap中的分段锁
比如现在 product01 的库存为100
则可以将这个值分段存储
product01 10
product02 10
···
product10 10
3.redis.setnx的问题?key:productnum,value:clientpk
设置的过期时间可能小于程序运行需要时间,
导致redis提前释放锁,此时被别的线程再加锁,
当此线程释放锁的时候释放了第二个线程加的锁;所以
redis.setnx()
//释放锁之前应该判断是否是当前线程加的锁
if(get(productmun).equals(clientpk))
redis.delte
//功能强大的redisson原理redisson.lock()
可以开一个子线程,定时为主线程续命,比如过期时间为10秒,
则每3秒判断一次,线程是否持有该锁,若持有,则将过期时间再设置一次10;