redis2 分布式鎖

2021-10-17 03:09:56 字數 2133 閱讀 5266

**尚矽谷------陽哥

加鎖:stringredistemplate.opsforvalue().setifabsent(redis_lock_key, value);//setnx

釋放鎖:

stringredistemplate.delete(redis_lock_key);//釋放鎖

stringredistemplate.expire(redis_lock_key,10l, timeunit.seconds);

加鎖和設定過期時間合併為同一語句保證原子性:

boolean lockflag = stringredistemplate.opsforvalue().setifabsent(redis_lock_key, value,10l, timeunit.seconds);

先判斷再刪除

finally

不用lua指令碼,如何實現(實際工作中100%用lua!)???

}//如果刪除成功,釋放監控器,並且breank跳出當前迴圈

stringredistemplate.

unwatch()

;break;}

}redis可以通過eval命令保證**執行的原子性

jedis工具配置類:

import redis.clients.jedis.jedis;

import redis.clients.jedis.jedispool;

import redis.clients.jedis.jedispoolconfig;

public

class

redisutils

public

static jedis getjedis()

throws exception

throw

newexception

("jedispool is not ok");

}}

lua:
finally

else

}finally

}}

比如:主節點沒來的及把剛剛set進來這條資料給從節點,就掛了,從機上位主節點後沒有原主節點的存根。

redi :ap 。

zookeeper:cp,沒有redis集群非同步丟失的問題,保證主從資料一致性。當時犧牲了高可用效能

redis集群環境下,我們自己寫的也不ok, 直接上redlock之redisson落地實現:

@configuration

public

class

redisconfig")

private string redishost;

@bean

public redistemplate

redistemplate

(lettuceconnectionfactory connectionfactory)

@bean

public redisson redisson()

}

避免出現"試圖釋放的鎖不屬於當前執行緒"的問題
@restcontroller

public

class

goodcontroller")

private string serverport;

@autowired

private redisson redisson;

("/buy_goods"

)public string buy_goods()

else

return

"商品已經售罄/活動結束/呼叫超時,歡迎下次光臨"

+"\t 伺服器端口: "

+serverport;

}finally}}

}

Redis(五)分布式鎖

1.分布式鎖是什麼 分布式鎖是控制分布式系統或不同系統之間共同訪問共享資源的一種鎖實現,如果不同的系統或同一系統的不同主機之間共享了某個資源時,往往通過互斥來防止彼此干擾。2.分布式設計目的 可以保證在分布式部署的應用集群中,同乙個方法在同一操作只能被一台機器上的乙個執行緒執行。3.設計要求 1 這...

Redis 應用01 分布式鎖

在處理分布式應用併發的時候,常常會使用鎖。比如我們有個 num 3,應用對num操作 去資料庫取值 取完值,在記憶體中,進行邏輯運算後重新賦值 存回資料庫 當多個應用同時對num操作的時候 比如 a和b 都對num進行操作 取值 a1 b1 賦值 b1 b3 在資料庫操作中,如果執行順序是a1 a3...

分布式 2分布式事務

分布式 1概述cap和base 分布式 2分布式事務 分布式 3分布式一致性演算法 分布式 4集群 分布式 5服務限流演算法 分布式 6分布式id 分布式 7效能壓測 分布式 8日誌鏈路跟蹤 分布式 9分布式鎖 redis鎖的幾種實現 參考 分布式系統間各種問題 宕機 網路不穩定 本地事務無法滿足需...