day112-Caching-Learning SpringCache para leer esto es suficiente (introducción, uso de anotaciones, configuración personalizada, deficiencias y soluciones)

1. Introducción

Anteriormente hablamos sobre algunos conceptos sobre el modo de lectura y el modo de escritura, así como sobre las soluciones para la coherencia de la caché.

En esta ocasión hablé de spring cache, que equivale a simplificar las operaciones inherentes anteriores, se puede entender como una abstracción de la cache, es parte del componente integrado de spring.

Con él, nos es mucho más fácil usar la caché. Muchas operaciones previas se suelen hacer con un comentario. El enlace oficial de aprendizaje es el siguiente

https://docs.spring.io/spring-framework/docs/5.2.13.RELEASE/spring-framework-reference/

2. Más información

La aplicación necesita usar Springcache, y la aplicación necesita estar equipada con uno o más administradores de caché, y hay diferentes componentes de caché en un administrador de caché. La adición, eliminación y modificación real de la caché depende de estos componentes de caché.

Estos cachés se distinguen por su nombre, como se muestra en la figura siguiente. Por ejemplo, se dividen en cachés de empleados, cachés de salarios, cachés de menús, cachés de productos, otros cachés, etc.

De hecho, para entenderlo simplemente, CacheManager, como administrador, se usa para definir reglas, como si el almacenamiento usa ConcurrentMap, redis, mysql o mongodb.

O el tiempo de vencimiento general del almacenamiento mixto y por qué los componentes de la caché están divididos por diferentes nombres. Esto está realmente relacionado con su negocio. Por ejemplo, puede definir una caché para el negocio de pedidos y el negocio de productos básicos.

Luego, puede subdividir en este caché al agregar y eliminar. Por ejemplo, si desea actualizar el caché del negocio de pedidos, no siempre es bueno actualizarlo por completo.

CacheManager Cache Estas dos interfaces principales, puede hacer clic para ver qué métodos están disponibles

3. Conveniencia de integrar SpringCache y la anotación de experiencia inicial

(1) Introducir dependencias

El primero es la dependencia de springcache, y el segundo es introducir lo que quieras usar como escena de almacenamiento en caché. Aquí está redis

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

(2) Escribir configuración

Primero veamos qué se configura automáticamente para nosotros después de introducir las dependencias, y luego sabemos qué configuración falta, podemos completar manualmente

Después de mirar el código CacheAutoConfiguration, encontré que estará equipado con un tipo correspondiente de administrador de caché, estamos redis y luego creamos un espacio de caché

(3) Encienda la función de caché

Solo agregue el primer comentario a continuación

(4) Cómo utilizar cada anotación

Primero haga una breve introducción a cada anotación.

4.1 @Cacheable

Agregue la anotación al método de consulta de la clasificación de primer nivel que se llamará cuando visite la página de inicio antes

Visité y actualicé la página de inicio, solo la primera vez que se imprimió la declaración de salida, lo que indica que se guardó en el caché, y las llamadas de método posteriores son en realidad cachés de acceso directo.

Si no hay un método de acceso real en la caché, si no me cree, intente eliminar la caché.

Abra el cliente de redis, busque este caché, puede ver que su clave es la predeterminada, el tiempo de vencimiento -1 nunca expira, el valor es el resultado de la serialización jdk, podemos definir estos por nosotros mismos más tarde

 4.2 Modificar varias configuraciones predeterminadas

Implementemos la oración anterior ahora

Varios atributos en @Cacheable

La siguiente figura muestra los diversos atributos en Cacheable. Solo establecemos el valor anterior. De hecho, también podemos configurar la clave o el generador de claves, qué condiciones se almacenan en caché, qué condiciones no se almacenan en caché, etc. ¿Está sincronizado?

4.2.1 Establecer clave

De la siguiente manera, recuerde que la clave es una expresión SpEL, como una cadena, recuerde agregar dos comillas simples

http: // La  clave de enlace de expresión SpEL puede ser un nombre de método o algo

4.2.2 Establecer el tiempo de caducidad

Esto lo dijimos antes, la clase de configuración automática cargará el archivo de configuración application.properties

Aquí establecemos el tiempo de caducidad en una hora.

4.3.3 Cambie el valor en la caché al formato json para evitar problemas de compatibilidad

Aquí necesitas personalizar la clase de configuración, no diré mucho sobre el proceso, lee

RedisCacheConfiguration后 得知,我们自定义配置类,并覆盖redisconfig对象,以及添加自己的配置即可
package com.atguigu.gulimall.product.config;

import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @author rengang
 * @version 1.0
 * @date 2021/3/28 15:47
 */

@EnableConfigurationProperties(CacheProperties.class)
@Configuration
@EnableCaching
public class MyCacheConfig {


    @Bean
    RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){

        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();

        //键值 缓存类型设置  键采用string 值采用 generic json 也就是支持泛型的json
        config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
        config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer()));

        CacheProperties.Redis redisProperties = cacheProperties.getRedis();


        if (redisProperties.getTimeToLive() != null) {
            config = config.entryTtl(redisProperties.getTimeToLive());
        }
        if (redisProperties.getKeyPrefix() != null) {
            config = config.prefixKeysWith(redisProperties.getKeyPrefix());
        }
        if (!redisProperties.isCacheNullValues()) {
            config = config.disableCachingNullValues();
        }
        if (!redisProperties.isUseKeyPrefix()) {
            config = config.disableKeyPrefix();
        }
        return config;

    }

}

application.properties

spring.cache.type=redis

spring.cache.cache-names= music,pic

spring.cache.redis.time-to-live= 3600000

spring.cache.redis.key-prefix= Cache-

#缓存空值,默认就是true
spring.cache.redis.cache-null-values= true

Luego, abra la herramienta cliente de redis, puede ver que las diversas configuraciones para el caché anteriores están vigentes

4. Deficiencias de springCache y soluciones

Supongo que te gusta

Origin blog.csdn.net/JavaCoder_juejue/article/details/115107654
Recomendado
Clasificación