「Redis入門」6.2節「分散ロック」について Redis のトランザクション (Python版) で、WATCH / UNWATCH コマンドを使った簡易な楽観ロックを使いましたが、6.2節では(悲観)ロックの実装方法が紹介されていて、実用的&面白かったので試してみました。 Redis 自体は(悲観)ロックの機構をもっていないので、排他制御をしたい場合は自前で構築することになります。キーが存在しない場合にかぎり値をセットできる SETNX コマンドを使って、予約したいリソースに応じたキー(全クライアントで共通の約束事)に一意な識別子をセットすることで、セマフォ(Mutex のほうが正確な表現かな?)を実現できます。キーが存在していなかったらユニークな(ロックしたのが自分だと後でわかるようにするため、必ず一意になるようにする)識別子をバリューにセットしてロック獲得成功、キーがすでにあった