2016-03-22 27 views
0

Redis sunucusu komutu yürütürken istemcinin bağlantıyı kesmesi durumunda, LPOP kullanırken, ögeye atılan öğeye ne olur?İstemci bağlantıyı kestiğinde redis lpop davranışı

Daha açık söylemek gerekirse, öğe teslim edilmemiş olsa bile düşüyor mu veya komut başarılı olmadıkça bellekte tutuluyor mu?

Yardım/işaretçiler için teşekkürler.

cevap

1

Kodlamanın gerçek mantığını işleyen kodun parçası, istemci durumuna habersizdir. Redis, komutu işlemeyi tamamlamak için yanıtın tamamlanmasını beklemez. Beklediyse çok yavaş olacak, özellikle de tek dişli olmak.

Bu durumda nasıl olduğunu görmek için BLPOP işleyen kod parçası bir göz atabilirsiniz:

// 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); 
İlgili konular