Redis
 sql >> Database >  >> NoSQL >> Redis

Stackexchange.Redis' fire and forget garantisce la consegna?

In realtà, il protocollo Redis non supporta realmente le operazioni "fire and forget". Fatta eccezione per il traffico pub/sub, tutti i comandi Redis sono abbinati a una risposta e non c'è modo di dire al server Redis di omettere la risposta.

Ora alcuni client (come StackExchange.Redis) simulano una modalità "fire and forget" attraverso un'implementazione asincrona del protocollo. In realtà, la modalità "spara e dimentica" in StackExchange.Redis è molto simile alla modalità "asincrona", tranne per il fatto che le risposte vengono semplicemente scartate quando vengono ricevute.

È affidabile? Ebbene, garantisce la consegna nella misura in cui TCP/IP garantisce la consegna. La rete tenterà di trasmettere i pacchetti (alla fine i pacchetti verranno trasmessi di nuovo se alcuni di essi vengono persi), ma tutto questo è gestito da TCP.

Ora, se il server è inattivo o decide di chiudere la connessione, il client sarà a conoscenza solo quando tenterà di leggere dal socket. StackExchange.Redis potrebbe continuare felicemente a inviare comandi su una connessione morta per un po'. Se hai un livello intermedio (come Twemproxy), la situazione può essere anche peggiore.

In altre parole, il traffico "spara e dimentica" verrà generalmente inviato al server e nessun messaggio verrà perso sulla rete, ma se hai problemi con il server o con la connessione, è possibile che parte del traffico vada perso prima che il client abbia la possibilità di notarlo esso. Lo definirei un comportamento migliore.