Cómo utilizar Redis para resolver el problema del tiempo de espera de conexión de Java
Los elementos relevantes involucrados en el problema del tiempo de espera de conexión que se resolverán en este artículo son los siguientes:
Cliente Redis: Jedis (java)
Versión de Redis: 2.8.12
Tipo de sistema operativo implementado en Redis: Linux
Inicio del artículo:
No 1.>No 1.Redis ejecuta comandos grandes (comando con complejidad temporal de O(N))
Análisis del problema:
a. Cuando se ejecuta un comando grande, Redis no podrá responder a tiempo ningún comando del cliente.
Para el monitoreo de comandos grandes de Redis, puede ver el monitoreo de comandos grandes de Redis y puede ver el registro lento para observar. p>
b. Cuando se usa jedis como cliente de redis, cuando el parámetro de configuración testOnBorrow = true del grupo de conexiones de redis, de forma predeterminada, primero ejecutará el método de ping de redis al obtener la conexión de redis.
Debido a la razón a, redis no puede responder a tiempo en este momento y naturalmente informará una excepción de tiempo de espera
Cómo resolver:
a. N)
b. Si no puede evitar el uso de la complejidad temporal de los comandos O(N) (N), debe reducir la frecuencia de uso y evitar el uso de estos comandos durante los períodos de mayor actividad comercial.
No 2. El paquete de datos de operación única de Redis es demasiado grande
Análisis de problemas
a. congestión de red
b. Cuando se usa jedis como cliente de redis, cuando el parámetro de configuración del grupo de conexiones de redis testOnBorrow = Cuando es verdadero, de forma predeterminada estará en el proceso de obtener una conexión de redis. Cuando el método ping de Redis se ejecuta por primera vez, debido a la razón a, Redis no podrá responder a tiempo y, naturalmente, informará una excepción de tiempo de espera.
Cómo resolver:
a. Código de solución de problemas Después de determinar que hay grandes datos (demasiadas entradas de datos/datos individuales son demasiado grandes), se llevará a cabo la transformación. Hay dos planes de transformación:
a1. datos y cambiar el tipo de datos (la situación común es serializar el tipo de colección de Java en el tipo de datos String de redis
), como ajustar el tipo de datos String a hash/list/set, etc. generalmente se usa para resolver el problema del volumen excesivo de datos en una sola entrada
a2. Ajuste la lógica de negocios para limitar el alcance de una sola consulta de datos (casos comunes, como que se devuelven todos los datos hash en redis). la memoria de la aplicación para obtener las entradas requeridas), como el uso de una única consulta de datos como el comando hget Query para reemplazar el comando hgetall.