用Redis實現分布式鎖以及redission使用

2021-10-03 03:08:01 字數 1923 閱讀 3057

先看下,redis分布式是怎麼演變的來的,redission如何使用的。

<

!--redisson依賴--

>

org.redisson<

/groupid>

redisson<

/artifactid>

2.2.13

<

/version>

<

/dependency>

<

!--stringredistemplate依賴--

;}

業務疊加之後,一台伺服器解決不了問題,需要部署多台伺服器構建分布式系統之後,而synchronized只能鎖住當前jvm虛擬機器裡面的程序**塊。可以用redis中的setnx思想來實現分布式鎖,來控**務訪問時不同發伺服器對庫存的實時監控。

;}簡單版本的redis之所有會有bug,如圖注意幾個細節。

例外,bug主要在**呢?舉個例子兩個執行緒t1,t2,兩個執行緒都需要執行15s時間,但是設定的過期時間是10s,那麼t1還沒執行完的時候,設定的過期時間到了,那麼鎖被釋放。t2獲取到lock鎖執行業務,但是t1此時執行 stringredistemplate.delete(lockkey);刪除鎖的操作。那麼這個時候的t2鎖被刪了。相當於高併發場景下該分布式鎖已經失效了。

那麼怎麼優化呢?先看看redis實現分布式原理圖:

**如下:

public string deductstockdist (

)else

}catch

(interruptedexception e)

finally

return

"end"

;}

用redis實現分布式鎖

通常部署的服務都是在多台伺服器上,不會只有一台。那麼在分布式環境下,就會遇到共享資源的問題。比如乙個人只能有一條記錄,下次進來就只能修改,而不是再新增。如果只有一台伺服器,可以使用多執行緒下的單例模式來控制,但是分布式下,就不管用了。有三種方式,一是使用資料庫的樂觀鎖,二是redis的鎖,三是zoo...

python 用redis實現分布式鎖

在 redis 中設定值,預設,不存在則建立,存在則修改。引數 1.ex 過期時間 秒 這裡過期時間是3秒,3秒後p,鍵food的值就變成none import redis,time redis client redis.strictredis host localhost port 6379,db...

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...