### 問題
Redis からオブジェクトをアトミックに GET し、 DELETE したい。
### 解法
success = RENAME key key:tmp
if success
value = GET key:tmp
DELETE key:tmp
return value
end
using `redis-cli`:
>> SET TOTO 1
OK
>> GET TOTO
1
>> RENAME TOTO TOTO:TMP
OK
>> GET TOTO:TMP
1
>> DEL TOTO:TMP
(integer) 1
>> GET TOTO
(nil)
>> RENAME TOTO TOTO:TMP
(error) ERR no such key
### 検討
これは、簡単な例ですが、有効にRedisのアトミックな特徴を利用しています。RENAME 関数は最初に呼ばれた場合、成功し、その後呼ばれる場合はキーが変更されたので失敗するでしょう。GET と DEL は RENAME 関数のおかげで他のクライアントが操作しているオブジェクトデータを参照するのを防ぎます。(??)
### 参照
----
追記:
チェンジセット(57216e1)に合わせて修正
0 件のコメント:
コメントを投稿