excepción de caché de redis

Avalancha de caché

  1. ¿Qué es una avalancha de caché?
    La avalancha de caché se refiere a una gran área de falla de caché al mismo tiempo, por lo que las solicitudes posteriores caerán en la base de datos, lo que hará que la base de datos resista una gran cantidad de solicitudes en un corto período de tiempo y se bloquee.
  2. solución
    1. El tiempo de caducidad de los datos almacenados en caché se establece de forma aleatoria para evitar que una gran cantidad de datos caduquen al mismo tiempo.
    2. Generalmente, cuando la cantidad de simultaneidad no es particularmente alta, la solución más utilizada es bloquear y poner en cola.
      Código falso:
      /*
      注意:加锁排队只是为了减轻数据库的压力,并没有提高系统吞吐量。
      假设在高并发下,缓存重建期间key是锁着的,这是过来1000个请求999个都在阻塞的。
      同样会导致用户等待超时,这是个治标不治本的方法!
      加锁排队的解决方式分布式环境的并发问题,有可能还要解决分布式锁的问题;
      线程还会被阻塞,用户体验很差!因此,在真正的高并发场景下很少使用!
      */
      //伪代码
      public object GetProductListNew() {
              
              
          int cacheTime = 30;
          String cacheKey = "product_list";
          String lockKey = cacheKey;
      
          String cacheValue = CacheHelper.get(cacheKey);
          if (cacheValue != null) {
              
              
              return cacheValue;
          } else {
              
              
              synchronized(lockKey) {
              
              
                  cacheValue = CacheHelper.get(cacheKey);
                  if (cacheValue != null) {
              
              
                      return cacheValue;
                  } else {
              
              
      	            //这里一般是sql查询数据
                      cacheValue = GetProductListFromDB(); 
                      CacheHelper.Add(cacheKey, cacheValue, cacheTime);
                  }
              }
              return cacheValue;
          }
      }
      
    3. Agregue una marca de caché correspondiente a cada dato en caché, registre si el caché no es válido, si la marca de caché no es válida, actualice el caché de datos.
      Código falso:
      /* 解释说明:
      1、缓存标记:记录缓存数据是否过期,如果过期会触发通知另外的线程在后台去更新实际key的缓存;
      2、缓存数据:它的过期时间比缓存标记的时间延长1倍,例:标记缓存时间30分钟,数据缓存设置为60分钟。 
      这样,当缓存标记key过期后,实际缓存还能把旧数据返回给调用端,直到另外的线程在后台更新完成后,才会返回新缓存。
      
      关于缓存崩溃的解决方法,这里提出了三种方案:
      	使用锁或队列、设置过期标志更新缓存、
      	为key设置不同的缓存失效时间,
      	还有一各被称为“二级缓存”的解决方法,有兴趣的读者可以自行研究。
      */
      //伪代码
      public object GetProductListNew() {
              
              
          int cacheTime = 30;
          String cacheKey = "product_list";
          //缓存标记
          String cacheSign = cacheKey + "_sign";
      
          String sign = CacheHelper.Get(cacheSign);
          //获取缓存值
          String cacheValue = CacheHelper.Get(cacheKey);
          if (sign != null) {
              
              
              return cacheValue; //未过期,直接返回
          } else {
              
              
              CacheHelper.Add(cacheSign, "1", cacheTime);
              ThreadPool.QueueUserWorkItem((arg) -> {
              
              
      			//这里一般是 sql查询数据
                  cacheValue = GetProductListFromDB(); 
      	        //日期设缓存时间的2倍,用于脏读
      	        CacheHelper.Add(cacheKey, cacheValue, cacheTime * 2);                 
              });
              return cacheValue;
          }
      } 
      

Penetración de caché

  1. ¿Qué es la penetración de caché?
    La penetración de la caché se refiere a los datos que no están en la caché o en la base de datos, lo que hace que todas las solicitudes caigan en la base de datos, lo que hace que la base de datos se bloquee debido a una gran cantidad de solicitudes en un corto período de tiempo.
  2. solución
    1. La capa de interfaz agrega verificación, como verificación de autenticación de usuario, id se usa para verificación básica y id <= 0 se intercepta directamente;
    2. Los datos que no se pueden recuperar de la caché tampoco se recuperan en la base de datos. En este momento, el par clave-valor también se puede escribir como clave nula, y el tiempo efectivo de la caché se puede establecer corto, como 30 segundos (un ajuste demasiado largo provocará condiciones normales No se puede utilizar). Esto puede evitar que los usuarios atacantes utilicen repetidamente el mismo ataque de fuerza bruta de identificación
    3. Usando filtros de floración, hash todos los datos posibles en un mapa de bits que sea lo suficientemente grande, y los datos que no deben existir serán interceptados por este mapa de bits, evitando así la presión de consulta en el sistema de almacenamiento subyacente.

Desglose de caché

  1. ¿Qué es el desglose del caché? El desglose del
    caché se refiere a los datos que no están en el caché sino en la base de datos (generalmente porque el tiempo del caché expira). En este momento, porque hay tantos usuarios concurrentes y los datos no se leen en el leer caché al mismo tiempo, va a la base de datos para obtener datos, lo que hace que la presión de la base de datos aumente instantáneamente, lo que genera una presión excesiva. A diferencia de la avalancha de caché, el desglose de la caché se refiere a la verificación simultánea de la misma pieza de datos. La avalancha de caché significa que diferentes datos han expirado y muchos datos no se pueden encontrar, por lo que puede verificar la base de datos.
  2. solución
    1. Configure los datos del hotspot para que nunca caduquen.
    2. Agregar mutex

Calentamiento de caché

  1. Calentamiento de caché El calentamiento de
    caché significa que una vez que el sistema está en línea, los datos de caché relevantes se cargan directamente en el sistema de caché. De esta manera, puede evitar el problema de consultar la base de datos primero y luego almacenar en caché los datos cuando el usuario lo solicita. ¡El usuario consulta directamente los datos de caché precalentados!
  2. solución
    1. Escriba un caché para actualizar la página directamente y hágalo manualmente cuando se conecte;
    2. La cantidad de datos no es grande y se puede cargar automáticamente cuando se inicia el proyecto;
    3. Actualice la caché con regularidad;

Degradación de caché

https://www.iteye.com/blog/1181731633-2370315

Cuando el tráfico aumenta drásticamente, el servicio tiene problemas (como un tiempo de respuesta lento o no responde), o los servicios no básicos afectan el rendimiento del proceso central, es necesario asegurarse de que el servicio sigue estando disponible, incluso si lo está. perjudicial para el servicio. El sistema se puede degradar automáticamente en función de algunos datos clave, o se puede configurar con conmutadores para lograr la degradación manual.

El objetivo final de la degradación de la caché es garantizar que los servicios básicos estén disponibles, incluso si tienen pérdidas. Y algunos servicios no se pueden degradar (como agregar al carrito de compras, liquidación).

Antes de degradar, debe ordenar el sistema para ver si el sistema puede perder el peón y proteger al comandante; por lo tanto, determine cuáles deben protegerse y cuáles pueden ser degradados; por ejemplo, puede consultar el plan de configuración del nivel de registro:

  1. General: por ejemplo, algunos servicios ocasionalmente caducan debido a la fluctuación de la red o el servicio está en línea, y pueden degradarse automáticamente;
  2. Advertencia: Algunos servicios fluctúan en la tasa de éxito dentro de un período de tiempo (por ejemplo, entre 95% y 100%), y pueden degradarse automática o manualmente, y se enviará una alarma;
  3. Error: por ejemplo, la tasa de disponibilidad es inferior al 90%, o el grupo de conexiones de la base de datos se rompe, o el tráfico aumenta repentinamente hasta el umbral máximo que el sistema puede soportar. En este momento, se puede degradar automáticamente o manualmente según a la situación;
  4. Error grave: por ejemplo, los datos son incorrectos debido a motivos especiales y en este momento se requiere una degradación manual urgente.

El propósito de la degradación del servicio es evitar fallas en el servicio de Redis, lo que resulta en un problema de avalancha en la base de datos. Por lo tanto, para los datos almacenados en caché que no son importantes, se puede adoptar una estrategia de degradación del servicio. Por ejemplo, una práctica común es que Redis no consulta la base de datos, sino que devuelve directamente el valor predeterminado al usuario.

Datos calientes y datos fríos

https://www.jianshu.com/p/053ba529bf02

Tecla de acceso rápido de caché

Una clave en la caché (como un artículo promocional), cuando caduca en un momento determinado, hay una gran cantidad de solicitudes simultáneas para esta clave en este momento. Estas solicitudes generalmente cargarán datos desde el fondo finalice la base de datos cuando expire la caché. Vuelva a configurar la caché. En este momento, una solicitud simultánea de gran tamaño puede abrumar instantáneamente la base de datos de back-end.

solución

Bloquee la consulta de caché, si la CLAVE no existe, ciérrela, luego ingrese la base de datos en la caché y luego desbloquee; si otros procesos encuentran un bloqueo, esperan y luego esperan a que el desbloqueo devuelva los datos o ingrese el Consulta de base de datos

Supongo que te gusta

Origin blog.csdn.net/weixin_44533129/article/details/112734436
Recomendado
Clasificación