etcd和redis的區(qū)別 什么時候需要分布式鎖?
什么時候需要分布式鎖?首先,我們需要知道在非分布式環(huán)境中,什么可以用鎖來解決?多線程環(huán)境,共享資源線程安全問題!此時,共享資源通常在一臺機(jī)器的多線程中競爭。從JAVA內(nèi)存模型的角度來看,我們可以通過鎖
什么時候需要分布式鎖?
首先,我們需要知道在非分布式環(huán)境中,什么可以用鎖來解決?
多線程環(huán)境,共享資源線程安全問題!此時,共享資源通常在一臺機(jī)器的多線程中競爭。從JAVA內(nèi)存模型的角度來看,我們可以通過鎖定對象、方法和代碼塊來避免共享資源的競爭
!1,生成全局ID;
2,修改全局配置文件;
3,分布式服務(wù)中的seckill;
4,分布式環(huán)境中的重復(fù)提交;
1,使用數(shù)據(jù)庫的唯一主鍵實現(xiàn)鎖定
!2、使用redis指令:通常使用setnx方法,incr方法實現(xiàn)
3、使用zookeeper:使用API生成臨時節(jié)點實現(xiàn)鎖定
分布式鎖用zookeeper還是redis好?
1. 無法重新進(jìn)入
2。沒有本地鎖,并發(fā)性能會很差。它不用于并發(fā)鎖爭用較多的場景。本地鎖沒有自旋
3。不考慮鎖等待排序。redis很難實現(xiàn),可以通過redis的列表實現(xiàn),但是列表下的每個子節(jié)點都沒有超時。Redis也不能執(zhí)行模糊查詢key*
所以最好通過zookeeper來實現(xiàn)當(dāng)我們遇到性能瓶頸時,我們的離線節(jié)點往往無法注冊
zookeeper原理是一個臨時節(jié)點