Cómo resolver el problema del tiempo de espera frecuente del cliente cuando redis tiene alta concurrencia
El origen de redis
Redis es una base de datos NoSQL de un solo subproceso basada en clave-valor, los datos se pueden conservar en el disco. Debido a que es de un solo subproceso, redis en sí no tiene concepto de bloqueo y no hay competencia para múltiples conexiones de clientes. Sin embargo, surgirán problemas al usar jedis y otros clientes para acceder a redis al mismo tiempo. Los tiempos de espera de conexión, los errores de conversión de datos, el bloqueo, el cierre de conexiones del cliente y otros problemas son causados por el caos de la conexión del cliente.
Al mismo tiempo, la función de subproceso único determina que las operaciones altamente concurrentes en la misma clave se pondrán en cola para su procesamiento. Si el grado de concurrencia es alto, esto puede provocar que se agote el tiempo de espera de las solicitudes posteriores.
Al acceder a Redis de forma remota, el problema del retorno retrasado del acceso concurrente elevado se debe a la red y otras razones.
Solución
Agrupe conexiones en el lado del cliente y utilice bloqueos internos para sincronizar las lecturas y escrituras del cliente en Redis.
Desde la perspectiva del servidor, utilice una variante setnx para implementar el mecanismo de bloqueo.