pythonはどうやってRedisを使って分散錠を構築しますか?
この文章は主にpythonがどのようにRedisを使って分散式のロックを構築するかを紹介しています。ここでは例示的なコードによって紹介されています。皆さんの学習や仕事に対して一定の参考となる学習価値があります。必要な友達は以下のように参照してください。
実際のアプリケーションシーンでは、複数のワーカーがあるかもしれません。一つのマシンでも、異なるマシンに分布しているかもしれませんが、一つのワーカーだけが同時にロックを持つことができます。この時は、分散式のロックを使う必要があります。
ここではpythonの実現ライブラリを紹介します。Redlock-py(Python実現)。
正常な状況では、ウォーカーはロックを獲得した後、自分の任務を処理し、完成したら自動的にロックを解除します。ちょっと熟知している感じがしますか?私達の文脈管理器を思い出しやすいです。ここで簡単に装飾器でwith...as...文法を実現します。
Redlock-pyをインストールします
実際のアプリケーションシーンでは、複数のワーカーがあるかもしれません。一つのマシンでも、異なるマシンに分布しているかもしれませんが、一つのワーカーだけが同時にロックを持つことができます。この時は、分散式のロックを使う必要があります。
ここではpythonの実現ライブラリを紹介します。Redlock-py(Python実現)。
正常な状況では、ウォーカーはロックを獲得した後、自分の任務を処理し、完成したら自動的にロックを解除します。ちょっと熟知している感じがしますか?私達の文脈管理器を思い出しやすいです。ここで簡単に装飾器で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()
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。