redis分布式鎖三個(gè)方法 什么時(shí)候需要分布式鎖?
什么時(shí)候需要分布式鎖?首先,我們需要知道在非分布式環(huán)境中,什么可以用鎖來(lái)解決?多線(xiàn)程環(huán)境,共享資源線(xiàn)程安全問(wèn)題!此時(shí),共享資源通常在一臺(tái)機(jī)器的多線(xiàn)程中競(jìng)爭(zhēng)。從JAVA內(nèi)存模型的角度來(lái)看,我們可以通過(guò)鎖
什么時(shí)候需要分布式鎖?
首先,我們需要知道在非分布式環(huán)境中,什么可以用鎖來(lái)解決?
多線(xiàn)程環(huán)境,共享資源線(xiàn)程安全問(wèn)題!此時(shí),共享資源通常在一臺(tái)機(jī)器的多線(xiàn)程中競(jìng)爭(zhēng)。從JAVA內(nèi)存模型的角度來(lái)看,我們可以通過(guò)鎖定對(duì)象、方法和代碼塊來(lái)避免共享資源的競(jìng)爭(zhēng)
!1,生成全局ID;
2,修改全局配置文件;
3,分布式服務(wù)中的seckill;
4,分布式環(huán)境中的重復(fù)提交;
1,使用數(shù)據(jù)庫(kù)的唯一主鍵實(shí)現(xiàn)鎖定
!2、使用redis指令:通常使用setnx方法,incr方法實(shí)現(xiàn)
3、使用zookeeper:使用API生成臨時(shí)節(jié)點(diǎn)實(shí)現(xiàn)鎖定
redis為什么需要分布式鎖?
例如:seckill、global incremental ID、floor generation等。大多數(shù)解決方案都是基于數(shù)據(jù)庫(kù)的。Redis是單進(jìn)程單線(xiàn)程模式,它采用隊(duì)列模式將并發(fā)訪(fǎng)問(wèn)改為串行訪(fǎng)問(wèn),多客戶(hù)端連接到Redis之間不存在競(jìng)爭(zhēng)。其次,redis提供了setnx和GetSet命令,方便分布式鎖機(jī)制的實(shí)現(xiàn)。