2010-04-14

[翻訳]rediscookbook/2_basic_commands/get_and_delete

### 問題

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 件のコメント:

コメントを投稿