Redisの楽観的ロックを実現する方法

Redisのオプティミスティック・ロックは下記の手順で実装されます。

  1. Redis ではバージョンとしてフィールドを使用します。たとえば「version」という名前を付けます。
  2. ロックが必要なときは、最初に最新のバージョンの番号の値を取得し、それを変数に保存する。
  3. 続いてビジネスロジックの処理を行う。
  4. 処理が完了したら、現在のバージョン番号の値を再度取得し、変数に保存したバージョン番号と照合する。
  5. バージョンの番号と比較して、その間に排他操作によるデータの変更がない場合、バージョン番号を1つ増やして Redis に更新します。
  6. バージョン番号が異なっている場合は、その間に他の並行処理によってデータに変更があったことを示しており、ロールバック操作や再試行などの適切な処理を行う必要があります。

Redisの乐观ロックを使用した例は以下の通りです。

import redis

def optimistic_lock(key):
    # 连接到 Redis
    r = redis.Redis(host='localhost', port=6379, db=0)

    # 从 Redis 中获取版本号
    version = r.get(key)

    # 处理业务逻辑
    # ...

    # 再次获取当前版本号
    new_version = r.get(key)

    # 比对版本号
    if version == new_version:
        # 版本号相等,可以更新版本号
        r.incr(key)
        # 更新其他数据
        # ...
    else:
        # 版本号不相等,有并发操作,进行相应的处理
        # ...

Redisは単一スレッドであるため、オプティミスティックロックを使用する場合は、ビジネスロジック処理中に他の同時操作によってデータが変更されないようにする必要があります。そうしないと、同時実行の競合が発生します。

bannerAds