Optimización de SpringCache, coherencia de caché, caché multinivel
Primero registremos algunos esquemas
1. SpringCache es una estrategia que se actualiza después de escribir la biblioteca, lo cual no es muy amigable para la coherencia del caché
2. Heredar RedisCacheManager y reescribirlo crearRedisCache, heredar RedisCache y reescribir put
3. Hay dos soluciones para la coherencia del caché: una es escribir la biblioteca primero y luego eliminar el caché, y la segunda es eliminar el caché primero. y luego escribir la biblioteca.
Generalmente no es un problema escribir la biblioteca primero y luego eliminar el caché junto con el período de tiempo de espera. En casos extremos, cuando el caché falla, el hilo lee la biblioteca y agrega el caché. Las operaciones de escribir la biblioteca y eliminar el caché se completan, lo que da como resultado que el caché agregado sea antiguo. El resumen es que a la lectura se le suma una escritura. A lee la biblioteca B escribe la biblioteca B elimina el caché A agrega el caché.
Si primero elimina el caché y luego escribe en la biblioteca, se agrega una lectura a la escritura. A elimina el caché B lee la biblioteca B agrega el caché A escribe en la biblioteca A. Esta probabilidad es mayor que la anterior.
La solución al problema de estas dos soluciones es la misma, que es la estrategia de doble eliminación retrasada. Es decir:
Eliminar el caché y escribir en la biblioteca, retrasar la eliminación del caché nuevamente (se necesita más de una lectura de la biblioteca, puede iniciar un nuevo hilo para completar)
> ¿O eliminar el caché al escribir en la biblioteca? Retrasar y eliminar nuevamente Almacenamiento en caché (se necesita más de una lectura de la biblioteca, que se puede completar iniciando un nuevo hilo)
Si hay separación del maestro -Lectura y escritura del esclavo, el retraso debe agregarse al tiempo de sincronización maestro-esclavo.
También existe el problema del segundo error de eliminación. Este problema se puede resolver mediante intentos repetidos a través del middleware de mensajes. O suscribiéndote a binlog, repítelo.
Para el almacenamiento en caché de varios niveles, puede consultar la implementación del JetCache de código abierto de Alibaba.
La demostración y el análisis del código fuente se proporcionarán más adelante.