2017-08-22 4 views
1

redisカウンタをインクリメントしたいが、ゼロからではなく、定義された開始番号(たとえば-5)からカウントを開始したい。redisの開始番号を定義INCR

私はこれがLuaスクリプトの中でSET/INCRによってどのように達成されるのか知っていますが、INCRコマンドでのみ達成できるかどうかは疑問でした。インクリメントが定義されているINCRBYで定義したものと同様のものが、開始点を定義できますか?

答えて

1

Luaは、この手順のために完全に罰金ですが、トランザクションでそれをも行うことができます。

MULTI 
SET counter -5 NX 
INCR counter 
EXEC 

あなたがそれを設定するために、あなたの最初の呼び出しをしたい場合は、あなたを-5するようINCRは、毎回実行されます必要がありますSETの値を-6に変更します。これら4つのコマンドをパイプして、4つのRTTがコマンドを送信しないようにすることもできます。

1

INCRコマンドだけでは実行できません。私はSETNXの値を検査し、0(キーが存在することを意味する)を返した場合は、それをインクリメントします。

ルアなしで、このようにしてアトミック性を達成できることに注意してください。キーが存在しない場合は作成し、初期値に設定しますそれは、1往復、原子。存在していた場合はインクリメントしますが、キーが期限切れになっていないか、2つの呼び出しの間に削除されていない限り、一貫性があります。

しかし、これにはLuaスクリプトを使用しない理由はありませんが、これを行うのが好ましい方法です。

関連する問題