1. 程式人生 > 資料庫 >python如何使用Redis構建分散式鎖

python如何使用Redis構建分散式鎖

這篇文章主要介紹了python如何使用Redis構建分散式鎖,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在實際應用場景中,我們可能有多個worker,可能在一臺機器,也可能分佈在不同的機器,但只有一個worker可以同時持有一把鎖,這個時候我們就需要用到分散式鎖了。

這裡推薦python的實現庫,Redlock-py (Python 實現).

正常情況下,worker獲得鎖後,處理自己的任務,完成後自動釋放持有的鎖,是不是感覺有點熟悉,很容易想到我們的上下文管理器,這裡我們簡單的用裝飾器實現 with...as... 語法。

安裝Redlock-py

$ pip install redlock-py

使用python自帶的 contextmanager 裝飾器試下上下文管理

from contextlib import contextmanager
from redlock import Redlock

@contextmanager
def worker_lock_manager(key,ttl,**kwargs):
  """
  分散式鎖
  :param key: 分散式鎖ID
  :param ttl: 分散式鎖生存時間
  :param kwargs: 可選引數字典
  :return: None
  """
  redis_servers = [{
    'host': '127.0.0.1','port': 6379,'db': 0,'password': 'pwd'
  }]

  rlk= Redlock(redis_servers)

  # 獲取鎖
  lock = rlk.lock(key,ttl)
 
  yield lock

  # 釋放鎖
  rlk.unlock(lock)

如何使用呢

with worker_lock_manager('unique_key',1000) as w_lock:
    if w_lock is False:
        return
    do_something()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。