Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

O fogo e esquecimento do Stackexchange.Redis garante a entrega?


Na verdade, o protocolo Redis realmente não suporta operações de "dispare e esqueça". Com exceção do tráfego pub/sub, todos os comandos do Redis são combinados com uma resposta e não há como informar ao servidor Redis para omitir a resposta.

Agora, alguns clientes (como StackExchange.Redis) simulam um modo "dispare e esqueça" por meio de uma implementação assíncrona do protocolo. Na verdade, o modo "disparar e esquecer" no StackExchange.Redis é muito semelhante ao modo "assíncrono", exceto que as respostas são simplesmente descartadas quando são recebidas.

É confiável? Bem, ele garante a entrega na medida em que o TCP/IP garante a entrega. A rede se esforçará para transmitir os pacotes (eventualmente os pacotes serão transmitidos novamente se alguns deles forem perdidos), mas tudo isso é tratado pelo TCP.

Agora, se o servidor estiver inativo ou decidir fechar a conexão, o cliente só saberá quando tentar ler do socket. O StackExchange.Redis pode continuar enviando comandos em uma conexão inativa por um tempo. Se você tiver uma camada intermediária (como o Twemproxy), a situação pode ser ainda pior.

Em outras palavras, o tráfego "dispare e esqueça" geralmente será enviado para o servidor e nenhuma mensagem será perdida na rede, mas se você tiver problemas de servidor ou de conexão, algum tráfego pode ser perdido antes que o cliente tenha a chance de perceber isto. Eu chamaria isso de comportamento de melhor esforço.