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

¿Qué es tcp-backlog en redis.conf?

¿Es tcp-backlog del tamaño de "cola de conexión completa" (apretón de manos de tres vías completo, lo que se describe aquí) o "cola de conexión incompleta"?

tcp-backlog es el tamaño de la cola de conexión completa . De hecho, Redis pasa esta configuración como el segundo parámetro de listen(int s, int backlog) llamar.

@GuangshengZuo ya tenía una buena respuesta para esta pregunta. Así que me centraré en el otro.

Si significa "cola de conexión completa", ¿por qué debo generar tcp_max_syn_backlog que limita el tamaño de una cola de conexión incompleta?

Cita del documento que mencionaste:

La implementación utiliza dos colas, una cola SYN (o cola de conexión incompleta) y una cola de aceptación (o cola de conexión completa). Las conexiones en estado SYN RECIBIDO se agregan a la cola SYN y luego se mueven a la cola de aceptación cuando su estado cambia a ESTABLECIDO, es decir, cuando se recibe el paquete ACK en el protocolo de enlace de 3 vías. Como su nombre lo indica, la llamada de aceptación se implementa simplemente para consumir conexiones de la cola de aceptación. En este caso, el argumento de acumulación de la llamada al sistema de escucha determina el tamaño de la cola de aceptación.

Podemos ver que elementos en complete connection queue se mueven de la incomplete connection queue .

Si tiene un somaxconn grande con un pequeño tcp_max_syn_backlog , es posible que NO tenga suficientes elementos para moverlos a la complete connection queue y la complete connection queue puede que nunca esté lleno. Es posible que muchas solicitudes ya se hayan descartado de la primera cola antes de que tengan la oportunidad de pasar a la segunda.

Entonces solo aumente el valor de somaxconn podría NO funcionar. Tienes que criarlos a ambos.