Redis分布式鎖

2022-06-09 14:03:10 字數 2302 閱讀 8562

在分布式快取的應用中,會遇到多個客戶端同時爭用的問題。這個時候,需要用到分布式鎖,得到鎖的客戶端才有操作許可權

下面通過乙個簡單例子介紹:

這裡引用的是servicestack.redis

using

servicestack.redis;

namespace

redis.acquirelock

//////

根據key儲存t物件,並且設定過期時間

/// ///

//////

//////

public

bool set(string

key, t value, timespan timeout)

//////

根據key儲存t物件,並且設定過期時間

/// ///

//////

//////

public

bool set(string

key, t value, datetime timeout)

//////

根據key設定過期時間

/// ///

//////

public

bool expiretime(string

key, timespan timeout)

//////

根據key設定過期時間

/// ///

//////

public

bool expiretime(string

key, datetime timeout)

//////

根據key獲取對應的物件t

/// ///

//////

public t get(string

key)

//////

移除/刪除對應key

/// ///

///public

bool remove(string

key)

//////

刪除對應key(返回被刪除 key 的數量)

/// ///

///public

long delete(string

key)

//////

判斷key是否存在,存在返回1,不存在返回0

/// ///

///public

long exists(string

key)

//////

判斷key是否存在,存在返回true,不存在返回false

/// ///

///public

bool containskey(string

key)

//////

redis分布式鎖

/// ///

///public idisposable acquirelock(string

key)

//////

redis分布式鎖,並且設定過期時間

/// ///

//////

public idisposable acquirelock(string

key, timespan timeout)}}

view code

控制台程式:

namespace

redis.acquirelock

public

static

void addval(object

num)

}console.writeline("執行緒

" + num + "

結束,輸出

" + redis.get("

rediskey

"));

//設定快取過期時間

redis.expiretime("

rediskey

", timespan.fromseconds(10

)); }}}

執行結果效果圖說明:

圖一是沒有加分布式鎖的情況下執行結果

圖二是加分布式鎖的情況下執行結果,兩個執行緒各迴圈500次,最終快取值應該為1000才正確

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的分布式鎖.首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件 互斥性。在任意時刻,只有乙個客戶端能持有鎖。不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保...

redis分布式鎖

使用redis的setnx命令實現分布式鎖 redis為單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,且多個客戶端對redis的連線並不存在競爭關係。redis的setnx命令可以方便的實現分布式鎖。setnx key value 將key的值設為value,當且僅當key不存在。如給定的...