首頁 > 資料庫 > Redis > python如何實現redis分散式鎖

python如何實現redis分散式鎖

王林
發布: 2023-06-03 18:22:36
轉載
1489 人瀏覽過

 1 import time 2 import redis 3 from redis.exceptions import WatchError 4  5  6 class RedisUtil(): 7     def __init__(self): 8         self.redis = redis.Redis(host="redis账户url", 9                                  port=6379,10                                  password="你的redis密码",11                                  decode_responses=True)12         self.online_set_name = "palm_online_devices"13 14     # 获取锁15     def acquire_lock(self, key, val, acquire_time=60, time_out=60):16         start_time = time.time()17         # 阻塞等待,轮询去获取锁,获取不到,轮询等待,直到拿到锁或者超时18         while True:19             if time.time() - start_time > acquire_time:20                 return False21             # 用setnx实现分布式锁,当key存在时候,setnx不做任何动作,如果key不存在,将value值设置为val22             # 如果 SETNX 返回1,说明该进程获得锁,SETNX将键 lock.foo 的值设置为锁的超时时间(当前时间 + 锁的有效时间)。23             # 如果 SETNX 返回0,说明其他进程已经获得了锁,进程不能进入临界区。进程可以在一个循环中不断地尝试 SETNX 操作,以获得锁24             if self.redis.setnx(name=key, value=val):25                 # 设置key的时长为60秒,如果超过60秒,key销毁26                 self.redis.expire(key, time_out)27                 return True28 29     # 释放锁30     def release_lock(self, key, val):31         pip = self.redis.pipeline(True)32         while True:33             try:34                 pip.watch(key)35                 lock_value = self.redis.get(key)36                 if not lock_value:37                     return True38                 if lock_value == val:39                     pip.multi()40                     pip.delete(key)41                     pip.execute()42                     return True43                 pip.unwatch()44                 break45             except WatchError:46                 pass47         return False
登入後複製

python可以做什麼

Python是一種程式語言,內建了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智慧,Web開發等。

以上是python如何實現redis分散式鎖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板