sql >> Base de Datos >  >> NoSQL >> Redis

¿Stackexchange.Redis' dispara y olvida garantiza la entrega?

En realidad, el protocolo Redis no admite operaciones de "disparar y olvidar". Excepto por el tráfico de publicación/suscripción, todos los comandos de Redis se comparan con una respuesta y no hay forma de decirle al servidor de Redis que omita la respuesta.

Ahora, algunos clientes (como StackExchange.Redis) simulan un modo "activar y olvidar" a través de una implementación asíncrona del protocolo. En realidad, el modo "activar y olvidar" en StackExchange.Redis es muy similar al modo "asincrónico", excepto que las respuestas simplemente se descartan cuando se reciben.

¿Es confiable? Bueno, garantiza la entrega en la medida en que TCP/IP garantiza la entrega. La red se esforzará por transmitir los paquetes (eventualmente, los paquetes se transmitirán nuevamente si algunos de ellos se pierden), pero todo esto lo maneja TCP.

Ahora, si el servidor está inactivo o decide cerrar la conexión, el cliente solo se dará cuenta cuando intente leer desde el socket. StackExchange.Redis puede continuar felizmente enviando comandos en una conexión muerta por un tiempo. Si tiene un intermediario (como Twemproxy), la situación puede ser aún peor.

En otras palabras, el tráfico de "activar y olvidar" generalmente se enviará al servidor y no se perderá ningún mensaje en la red, pero si tiene problemas con el servidor o la conexión, se puede perder algo de tráfico antes de que el cliente tenga la oportunidad de darse cuenta. eso. Yo llamaría a esto un comportamiento de mejor esfuerzo.