實現分布式鎖的幾種方案

2022-01-15 19:48:48 字數 338 閱讀 3793

分布式系統中,原子執行一段**,比如減庫存

redisvalue token = environment.machinename;

//lock_key表示的是redis資料庫中該鎖的名稱,不可重複。

//token用來標識誰擁有該鎖並用來釋放鎖。

//timespan表示該鎖的有效時間。10秒後自動釋放,避免死鎖。

if (db.locktake("lock_key", token, timespan.fromseconds(10)))

finally

}

加鎖:setnx

釋放鎖:delete

分布式鎖實現方案

在這種情況下,如果我們實現鎖可以使用synchronized或reentrantlock,但是在分布式情況下,它們最多只能鎖住當前jvm的執行緒,對於其它server的執行緒無能為力。那麼怎麼處理呢?一般是通過為資料庫表新增乙個 version 欄位來實現讀取出資料時,將此版本號一同讀出,之後更新時...

分布式鎖的幾種實現方式

現在的微服務系統,由於系統都是由多個微服務組成的,相比較於傳統的應用系統,鎖的實現就變的複雜了很多,單體應用的鎖也不適用與分布式系統,下面就介紹幾種分布式鎖的實現方式,常見的分布式鎖的實現方式有資料庫分布式鎖,redis分布式鎖,zookeeper分布式鎖 一 資料庫分布式鎖 1 利用資料庫記錄的唯...

分布式鎖實現的幾種方式

準備條件 建立表abc,並做唯一索引version 1 執行緒a加鎖 insert into abc version values versionid 2 執行緒a釋放鎖 delete from abc where version versionid 如果資料庫中有該鎖記錄,執行緒b再儲存資料進行加...