15 redis-分布式锁
生活随笔
收集整理的這篇文章主要介紹了
15 redis-分布式锁
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 概念
分布式鎖:是進(jìn)程級別的鎖,用于控制多個(gè)進(jìn)程對同一資源的訪問。
實(shí)現(xiàn)方式:1. 數(shù)據(jù)庫樂觀鎖;2. 基于Redis的分布式鎖;3. 基于ZooKeeper的分布式鎖
可靠性要求:
- 互斥性。在任意時(shí)刻,只有一個(gè)客戶端能持有鎖。
- 不會發(fā)生死鎖。即使有一個(gè)客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證后續(xù)其他客戶端能加鎖。
- 具有容錯(cuò)性。只要大部分的Redis節(jié)點(diǎn)正常運(yùn)行,客戶端就可以加鎖和解鎖。
- 加鎖和解鎖必須是同一個(gè)客戶端,客戶端自己不能把別人加的鎖給解了。
2 SETNX實(shí)現(xiàn)分布式鎖
2.1 相關(guān)命令
在實(shí)現(xiàn)的時(shí)候要注意的幾個(gè)關(guān)鍵點(diǎn):
1、鎖信息必須是會過期超時(shí)的,不能讓一個(gè)線程長期占有一個(gè)鎖而導(dǎo)致死鎖;
2、同一時(shí)刻只能有一個(gè)線程獲取到鎖。
幾個(gè)要用到的redis命令:
setnx(key, value):“set if not exits”,若該key-value不存在,則成功加入緩存并且返回1,否則返回0。
get(key):獲得key對應(yīng)的value值,若不存在則返回nil。
getset(key, value):將給定 key 的值設(shè)為 value ,并返回 key 的舊值(old value)。
expire(key, seconds):設(shè)置key-value的有效期為seconds秒。
2.2 流程圖
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/lizhuxin/p/10745317.html
總結(jié)
以上是生活随笔為你收集整理的15 redis-分布式锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu18.04 VMtools的
- 下一篇: Python中的高级变量类型