2016-03-22 10 views
0

LPOPを使用すると、redis serverがコマンドを実行しているときにクライアントが接続を切断した場合、ポップされる項目はどうなりますか?クライアントが接続を切断したときのlpop動作の再設定

具体的には、アイテムが配信されなかったり、コマンドが成功しなかったためにメモリに保持されていても、アイテムが削除されますか?

助けを借りていただきありがとうございます。

答えて

1

実際のポップのロジックを処理するコードの部分は、クライアントの状態を無視しています。 Redisは、コマンドの処理を終了するために、応答の送信が完了するまで待機しません。そのように待っていると、特にシングルスレッドの場合は非常に遅いでしょう。

あなたはこの問題が発生したかを確認するためにBLPOPを処理するコードの一部を見てみることができます:

// here is where redis actually pops from the list 
    robj *value = listTypePop(o,where); 
    serverAssert(value != NULL); 

    // now it ads the reply to the client's queue (c is the client) 
    // but as you can see there is no return code from these methods 
    // and redis doesn't actually send anything when addReply is called 
    addReplyMultiBulkLen(c,2); 
    addReplyBulk(c,c->argv[j]); 
    addReplyBulk(c,value); 
関連する問題