Redis coherencia de actualización de memoria caché

Cuando se realiza la operación de escritura, es necesario asegurarse de que los datos se leen desde la memoria caché de los datos persistentes en la base de datos es coherente, es necesario actualizar la memoria caché.

Debido a que la base de datos y almacenamiento en caché implica dos pasos, es difícil garantizar la atomicidad de cambios.

En el diseño de la política de actualización, es necesario considerar varios aspectos:

  • Impacto en el rendimiento del sistema: por ejemplo, actualizar los resultados de la estrategia de almacenamiento en caché de base de datos de carga en menos de eliminar la carga política de caché
  • Seguridad concurrente: simultáneas de lectura y escritura de la secuencia de operación alguna anormalidad pueden provocar inconsistencias de datos, tales como datos de caché para rancio almacenamiento a largo plazo
  • Actualización afecta fallado: Si una operación falla, cómo minimizar el impacto en el negocio
  • La dificultad de detección y reparación de fallas: fallos causados ​​por un error del operador dejará registros detallados en el registro fácilmente detectados y reparados. problemas de concurrencia de datos ha provocado el error no es signos evidentes difícil de encontrar, y más propensos al riesgo de operaciones simultáneas producir grandes errores en los períodos de mayor tráfico.

Hay dos formas de actualizar la memoria caché:

  • Si no se elimine la caché: prefieren leer de la base de datos debido a la falta de memoria caché al leer nuevos datos y actualizar la memoria caché
  • Actualización de la caché: directamente cubierto por los nuevos datos escritos en la memoria caché de datos expirado

Actualizar la memoria caché y actualizar la base de datos, hay dos en este orden:

  • Después de la primera base de datos de caché
  • Después de la primera base de datos de caché

Hay cuatro combinaciones de dos estrategia actualizada, ahora somos uno por uno análisis.

cuestiones de concurrencia hilo por lo general debido después del inicio de la operación era de plomo completa, que llamaron a este "falso". Analicemos una a una de cada cuatro estrategias de "salida en falso" para llevar el error.

Para actualizar la base de datos, y luego borrar la memoria caché

Si la actualización de base de datos tiene éxito, eliminar la operación de caché falla, después de lo cual el caché se leen datos antiguos, lo que resulta en inconsistencias.

errores de concurrencia que pueden ocurrir:

tiempo Un hilo hilo B base de datos cache
1 invalidación de caché v1 nulo
2 Leer de la base de datos v1 v1 nulo
3 Actualizar la base de datos v2 nulo
4 Borrar la caché v2 nulo
5 caché de escritura v2 v1

Para actualizar la base de datos y actualizar la memoria caché

Borrar la caché con la misma estrategia, si tiene éxito actualización de base de datos de errores de actualización de memoria caché dará lugar a inconsistencias en los datos.

errores de concurrencia que pueden ocurrir:

tiempo Un hilo hilo B base de datos cache
0 V0 V0
1 Actualizar la base de datos para v1 v1 V0
2 Actualizar la base de datos como v2 v2 V0
3 Actualización de la caché v2 v2 v2
4 Actualización v1 caché v2 v1

Cuando dos hilos Conflicto de escritura, hilo A escribe los datos anteriores se puede evitar mediante la versión de datos comparativos.

Borrar la caché, y luego actualizar la base de datos

errores de concurrencia que pueden ocurrir:

tiempo Un hilo hilo B base de datos cache
1 Borrar la caché v1 nulo
2 invalidación de caché v1 nulo
3 Leer de la base de datos v1 v1 nulo
4 Actualizar la base de datos como v2 v2 nulo
5 El caché de escritura v1 v2 v1

Primera actualización de la memoria caché, y luego actualizar la base de datos

Si la caché se actualiza correctamente la actualización de base de datos falla, después de lo cual leen los datos no son persistentes. Dado que los datos en la memoria caché es volátil, este estado es muy peligroso.

Debido a que la base de datos porque los cables de restricción de clave a una mayor posibilidad de fallo se escribe, por lo que esta estrategia es arriesgada.

errores de concurrencia que pueden ocurrir:

tiempo Un hilo hilo B base de datos cache
0 V0 V0
1 Actualización v1 caché V0 v1
2 Actualización de la caché v2 V0 v2
3 Actualizar la base de datos como v2 v2 v2
4 Actualizar la base de datos para v1 v1 v2

actualización asíncrona

El doble de la complejidad lógica actualizado, más consistencia. Ahora podemos actualizar la base de datos a través de la suscripción para actualizar la caché.

base de datos de código abierto MySQL Ali Baba binlog incremental de suscripción y componentes de consumo - el Canal .

Podemos utilizar solamente por escrito a la API de servidor de base de datos y actualización de la política de caché de otros incrementos de la base de datos de suscripción de rosca binlog.

Esta política existe para actualizar y borrar la memoria caché después de similares problemas de concurrencia base de datos:

tiempo leyendo el Tema hilo de escritura Tema asíncrono base de datos cache
1 invalidación de caché v1 nulo
2 Leer de la base de datos v1 v1 nulo
3 Actualizar la base de datos como v2 v2 nulo
4 Borrar la caché de actualización / cache v2 nulo
5 caché de escritura v2 v1

Este problema también puede utilizar las actualizaciones de rosca asíncronos la versión caché del método al comparar los datos y la caché de escritura para resolver.

Supongo que te gusta

Origin www.cnblogs.com/Finley/p/12615111.html
Recomendado
Clasificación