Redis (f) de los problemas y soluciones

Les pido, no han encontrado ningún problema en el proceso de Redis lo utilizan? Por ejemplo avalancha caché, caché de la penetración, la obstrucción. ¿Cuáles son las causas de estos problemas es? ¿Cómo debemos resolverlo? En este artículo hablaremos sobre esto.

zueco

Debido a la arquitectura Redis es un único subproceso, todas las lecturas y escrituras se realizan en un hilo principal, así que cuando un estrangulador sucede, sería fatal.

causas subyacentes

(1) de la API o estructuras de datos utilizados irracional

// 获取最近的10条慢查询
slowlog get 10

(2) CPU saturado
(3) relacionados con el bloqueo persistente: bloqueo tenedor, AOF placa de escobillas bloqueada, hugepage bloqueo operación de escritura

Las causas externas

(1) la competencia de la CPU
(2) intercambio de memoria
(3) problemas de red: Conexión rechazada, la latencia de red, tarjeta de red de interrupción suave

soluciones

(1) se añadió a las anomalías de monitor en el lado de la aplicación, y para apuntar problemas específicos en el nodo
(2) el seguimiento Redis

coherencia de caché

actualización de Políticas

datos Redis es a menudo ciclo de vida, necesidad de ser retirado o se actualiza después de un cierto tiempo, por lo que puede garantizar espacio de caché en un rango controlable. Hay tres tipos de política de actualización de la caché.

(1) LRU / LFU / FIFO algoritmo sacrificio

Cuando el uso de la caché supera un máximo predeterminado, se pondrá en marcha la política de eliminación de datos.

LRU:最近最久未使用
LFU:最近最少使用
FIFO:先进先出

(2) horas extraordinarias excluido

Cuando los datos en la memoria caché, el tiempo de caducidad se ha establecido, cuando el tiempo se elimina automáticamente. Utilice el comando expire lograr.

(3) tomar la iniciativa de actualización

Después de los datos "ABM" operación, retire inmediatamente los datos relevantes Redis

la penetración de la caché

1, el concepto de

la penetración de caché significa que los datos no existe una base de datos de consulta, para consultar la base de datos cada vez, y cada vez que la consulta está vacío, cada vez que no se almacena en caché. Si un gran número de peticiones que entran, podría abrumar a la base de datos.

2, las causas

(1) Código de auto-servicio o datos de problemas
(2) ataques maliciosos, causando un gran número de reptiles y otros éxitos vacías

3, soluciones

(1) memoria caché de objetos vacía

Cuando la base de datos no se ve afectado, sigue siendo objeto vacío en la capa de caché, después de volver a acceder a los datos se recuperan de la memoria caché, protegiendo así las fuentes de datos de back-end.
Aquí Insertar imagen Descripción
Los códigos son los siguientes:

String get(String key){
     //从缓存中获取数据
     String cacheValue=cache.get(key);
     //缓存为空
     if(StringUtils.isBlank(cacheValue)){
         //从存储中获取
         String storageValue=storage.get(key);
         cache.set(key,storageValue);
         //如果存储数据为空,需要设置一个过期时间(300秒)
         if(storageValue==null){
             cache.expire(key,60*5);
         }
         return storageValue;
     }else{
       //缓存非空
       return cacheValue;
     }
}

Esta solución se utiliza para la escena: golpe de datos no es muy alta y el cambio de frecuencia de datos en tiempo real de alta.

interceptación de filtro (2) Bloom

La descarga de llave de filtro Rubu largas existentes. Cuando una solicitud de consulta sobre pasar por este filtro, este filtro es que si los datos no existe, directamente descartados, sin aún más el acceso a las capas de caché y de la memoria.
Aquí Insertar imagen Descripción
Esta solución es aplicable escena: golpe de datos no es muy alta, los datos relativamente fijos, baja en tiempo real

pozo sin fondo

1, el concepto de

Con el fin de satisfacer las necesidades del negocio, la adición de un gran número de nodos del clúster Redis, pero el rendimiento no mejoró el peor.

2, las causas

En funcionamiento autónomo, si desea obtener más masiva de teclas, con una sola red puede operar en el clúster, los nodos más, la red más involucrados IO, el rendimiento puede ser el rendimiento sea menor.

3, la solución

(1) comandos de serie
(2) de serie del IO
(. 3) paralela a la IO
(. 4) para lograr HASH_TAG

caché de avalancha

1, el concepto de

Caché avalancha se refiere al uso de la misma fecha de vencimiento al configurar la memoria caché, la memoria caché al mismo tiempo conducir a un fallo en algún momento, el plomo a todas las consultas caer en la base de datos, lo que resulta en una memoria caché de avalancha.

2, la solución

(1) una clave diferente, para establecer diferentes tiempo de vencimiento del punto en el tiempo de un fallo de caché lo más uniforme posible.
(2) Si una base de datos de caché se distribuye despliegue, los datos calientes distribuidas de manera uniforme en la base de datos diferente caché.
(3) Ajuste de datos caliente nunca expira.
(4) hacer la cache secundaria.
(5) Después de un fallo de caché, mediante el bloqueo para controlar el número de hilos o cola de leer base de datos de caché de escritura. Por ejemplo, una tecla para permitir que sólo un hilo para consultar la caché de datos y la escritura, otros subprocesos esperan.

Publicados 107 artículos originales · ganado elogios 88 · vistas 260 000 +

Supongo que te gusta

Origin blog.csdn.net/Code_shadow/article/details/99734212
Recomendado
Clasificación