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;