1. Penetración de caché
2. Avalancha de caché
3. Desglose de la caché
Redis implementa bloqueos distribuidos
Para evitar que seamos anormales cuando ejecutamos el negocio o el servidor se cae accidentalmente, no eliminamos el bloqueo y nos provoca un punto muerto, luego debemos agregar un tiempo de vencimiento antes de ejecutar el negocio.
El bloqueo y nuestro tiempo de vencimiento no se pueden ejecutar por separado para garantizar que sea atómico.
El candado eliminado aquí puede no ser nuestro propio candado, por lo que cuando agregamos el candado, necesitamos poner un uuid para asegurarnos de que sea nuestro propio candado. Luego lo sacamos y juzgamos que es nuestro propio candado. Estas dos operaciones no son atómicos, por lo que debemos usar el script lua.
Eliminar bloqueo
Usando Redisson para implementar bloqueos distribuidos
Puede simplificar nuestra lógica anterior y hacerla más poderosa.
- Renovará automáticamente nuestras cerraduras y agregará automáticamente 30 segundos por defecto
- No se preocupe por el problema del desbloqueo.
Por lo general, necesitamos especificar manualmente el tiempo de vencimiento; de lo contrario, la complicada estrategia de extensión interna lleva mucho tiempo.
Bloqueo de lectura y escritura
Utilice Redisson
1. Agregar dependencias
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.14.1</version>
</dependency>
2. Configuración
@Configuration
public class RedissonConfig {
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson() {
// 1. Create config object
Config config = new Config();
config.useSingleServer().setAddress("redis://39.96.41.98:6379");
return Redisson.create(config);
}
}
Consistencia de datos de Redis