三 Redis事務和分布式鎖

2021-09-19 05:47:51 字數 1435 閱讀 8705

redis語法錯誤(可以理解為編譯期錯誤)

redis型別錯誤(可以理解為執行期錯誤)

redis不支援事務回滾

為什麼redis不支援事務回滾?

互斥性:在任意時刻,只有乙個客戶端能持有鎖

同一性:加鎖和解鎖必須是同乙個客戶端,客戶端自己不能把別人加的鎖給解了。

可重入性:即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證後續其他客戶端能加鎖。

方式1(使用set命令實現) --推薦:

/**

* 使用redis的set命令實現獲取分布式鎖

* @param lockkey 可以就是鎖

* @param requestid 請求id,保證同一性

* @param expiretime 過期時間,避免死鎖

* @return

*/public

static

boolean

getlock

(string lockkey,string requestid,

int expiretime)

return

false

;}

方式2(使用setnx命令實現):

public

static

boolean

getlock

(string lockkey,string requestid,

int expiretime)

return

false

;}

方式1(del命令實現):

/**

* 釋放分布式鎖

* @param lockkey

* @param requestid

*/public

static

void

releaselock

(string lockkey,string requestid)

}

方式2(redis+lua指令碼實現)–推薦:

public

static

boolean

releaselock

(string lockkey, string requestid)

return

false

;}

Redis 分布式事務和分布式事務鎖

講分布式事務鎖前的幾個概念 絕大部分請求是純粹的記憶體操作 非常快速 避免了與硬碟的接觸 豐富的特性 可用於快取,訊息,按key設定過期時間,過期後將會自動刪除 使用大量的hash思想的k v鍵值對,獲取效率為o 1 依靠非阻塞的io多路復用原則,使redis形成單執行緒去執行命令的伺服器,避免了不...

redis分布式鎖

redis分布式鎖 直接上 我寫了四個redis分布式鎖的方法,大家可以提個意見 第一種方法 redis分布式鎖 param timeout public void lock long timeout thread.sleep 100 catch exception e override publi...

Redis分布式鎖

分布式鎖一般有三種實現方式 1.資料庫樂觀鎖 2.基於redis的分布式鎖 3.基於zookeeper的分布式鎖.首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件 互斥性。在任意時刻,只有乙個客戶端能持有鎖。不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保...