亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis分布式鎖如何設(shè)置超時(shí)時(shí)間

 更新時(shí)間:2022年11月18日 15:08:49   作者:每天都要進(jìn)步一點(diǎn)點(diǎn)  
這篇文章主要介紹了Redis分布式鎖如何設(shè)置超時(shí)時(shí)間,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Redis分布式鎖設(shè)置超時(shí)時(shí)間

Redis分布式鎖主要依靠Redis服務(wù)來完成,我們的應(yīng)用程序其實(shí)是Redis節(jié)點(diǎn)的客戶端,一旦客戶端沒有釋放鎖,服務(wù)端就會(huì)一直持有這個(gè)鎖,其他進(jìn)程中的線程就無法獲取到這把鎖,于是就會(huì)發(fā)生鎖死的情況。

所以我們在使用Redis分布式鎖的時(shí)候,務(wù)必要設(shè)置鎖的過期時(shí)間。

主要基于下面兩點(diǎn):

網(wǎng)絡(luò)抖動(dòng)

客戶端A中的一個(gè)線程獲取到了鎖,然后執(zhí)行finally中的釋放鎖的代碼時(shí),這時(shí)候網(wǎng)絡(luò)出問題了,導(dǎo)致客戶端A沒有成功釋放鎖。此時(shí)對于redis服務(wù)端來說,它會(huì)一直把鎖給客戶端A,這樣的話其他客戶端自然也就不能獲取到這個(gè)鎖。

如果是設(shè)置了過期時(shí)間的話,即使客戶端和服務(wù)端的網(wǎng)絡(luò)不通了,服務(wù)端依然在進(jìn)行時(shí)間的計(jì)算,時(shí)間到了直接把鎖釋放掉,等網(wǎng)絡(luò)通了,不影響其他客戶端獲取鎖。

Redis宕機(jī)

客戶端A獲取到了鎖,Redis服務(wù)器突然宕機(jī),鎖沒有釋放。等到Redis再次恢復(fù)的時(shí)候,Redis服務(wù)端還會(huì)把鎖給到客戶端A,這樣也會(huì)發(fā)生鎖死的情況。

如果是設(shè)置了過期時(shí)間的話,服務(wù)器恢復(fù)后就會(huì)繼續(xù)倒計(jì)時(shí),時(shí)間到了服務(wù)器自動(dòng)把鎖釋放,其他客戶端也就可以嘗試去獲取鎖了。

Redis分布式鎖的超時(shí)問題

Redis的分布式鎖并不能解決超時(shí)問題,如果在加鎖和釋放鎖之間的邏輯執(zhí)行得太長,以至于超出了鎖的超時(shí)限制,就會(huì)出現(xiàn)問題,因?yàn)檫@時(shí)候第一個(gè)線程持有的鎖過期了,臨界區(qū)的邏輯還沒有執(zhí)行完,而同時(shí)第二個(gè)線程就提前持有了這把鎖,導(dǎo)致臨界區(qū)代碼不能得到嚴(yán)格串行執(zhí)行。

為了避免這個(gè)問題,分布式鎖不要用于較長時(shí)間的任務(wù),如果真的偶爾出現(xiàn)了問題,造成的數(shù)據(jù)小錯(cuò)亂,可能需要人工介入解決。

有一個(gè)稍微安全一點(diǎn)的方案,是將set指令的value參數(shù)設(shè)置為一個(gè)隨機(jī)數(shù),釋放鎖時(shí)先匹配隨機(jī)數(shù)是否一致,然后在刪除key,這是為了確保當(dāng)前線程占有的鎖不會(huì)被其他線程釋放,除非這個(gè)鎖是自動(dòng)超時(shí),但是匹配value,和刪除ke y不是一個(gè)原子操作,所以只是相對安全。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redisson分布式鎖之加解鎖詳解

    Redisson分布式鎖之加解鎖詳解

    這篇文章主要為大家介紹了Redisson分布式鎖加解鎖的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Redis中List實(shí)現(xiàn)雙鏈表

    Redis中List實(shí)現(xiàn)雙鏈表

    本文主要介紹了Redis中List實(shí)現(xiàn)雙鏈表,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題?

    Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題?

    大key并不是指key的值很大,而是key對應(yīng)的value很大,下面這篇文章主要給大家介紹了Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Redis分布式可重入鎖實(shí)現(xiàn)方案

    Redis分布式可重入鎖實(shí)現(xiàn)方案

    在單進(jìn)程環(huán)境下,要保證一個(gè)代碼塊的同步執(zhí)行,直接用synchronized 關(guān)鍵字或ReetrantLock 即可,在分布式環(huán)境下,要保證多個(gè)節(jié)點(diǎn)的線程對代碼塊的同步訪問,就必須要用到分布式鎖方案,本文介紹一下基于 Redis實(shí)現(xiàn)的分布式鎖方案,感興趣的朋友一起看看吧
    2024-02-02
  • Redis實(shí)現(xiàn)單設(shè)備登錄的場景分析

    Redis實(shí)現(xiàn)單設(shè)備登錄的場景分析

    這篇文章主要介紹了Redis實(shí)現(xiàn)單設(shè)備登錄,用戶首次登錄時(shí),將用戶信息存入Redis,key是用戶id,value是token,當(dāng)用戶在其他設(shè)備登錄時(shí),會(huì)重新生成token,這個(gè)時(shí)候原先的token已經(jīng)被覆蓋了,本文給大家提供樣例及核心代碼,感興趣的朋友參考下吧
    2022-04-04
  • linux服務(wù)器中搭建redis6.0.7集群

    linux服務(wù)器中搭建redis6.0.7集群

    這篇文章主要介紹了linux服務(wù)器中搭建redis6.0.7集群的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能

    利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能

    大家好,本篇文章主要講的是利用Redis實(shí)現(xiàn)防止接口重復(fù)提交功能,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • redis實(shí)現(xiàn)多級(jí)緩存同步方案詳解

    redis實(shí)現(xiàn)多級(jí)緩存同步方案詳解

    這篇文章主要介紹了redis實(shí)現(xiàn)多級(jí)緩存同步方案詳解,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 詳解Redis命令和鍵_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    詳解Redis命令和鍵_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Redis命令用于在redis服務(wù)器上執(zhí)行某些操作,下面通過本文給大家分享Redis命令和鍵,需要的的朋友參考下吧
    2017-08-08
  • RedisTemplate批量操作工具類性能測試

    RedisTemplate批量操作工具類性能測試

    這篇文章主要為大家介紹了RedisTemplate批量操作工具類性能測試詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論