Redisの分散ロックで有効期限をどのように設定しますか?
Redisで分散ロックを実装する際には、通常はSETコマンドでロックを設定します。デッドロックを防ぐために、ロックに有効期限を設定することができます。
Redisバージョン2.6.12以降では、SETコマンドのEXパラメータを使用して、キーの有効期限を秒単位で設定できます。例:
SET lock_key value EX 30 NX
上記の操作により、30秒後にロックが自動で期限切れになります。つまり、30秒以内に手動でロックが解除されなかった場合でも、Redisは自動的にロックを解除します。
Redisの2.6.12よりも前のバージョンでは、SETコマンドのEXPIREオプションを使用してキーの有効期限を設定できます。たとえば、
SET lock_key value
EXPIRE lock_key 30
上記の コマンドによって30秒後にロックが自動的に失効します。
なお、有効期限を設定する操作はロックの取得後に行う必要があり、有効期限の設定前に他のプロセスによってロックを取得される可能性があります。
さらに、他のプロセスのロックを削除してしまう誤操作を防ぐために、NXパラメーターを指定したSETコマンドを使用してロックを取得し、1つのプロセスのみがロックを獲得できるようにする。