redis缓存

缓存流程

主启动类启动,CacheAutoConfiguration生效,导入相应组件 @Import({CacheConfigurationImportSelector}),顺序导入 RedisCacheConfigurationSimpleCacheConfiguration ····

RedisCacheConfiguration生效,SimpleCacheConfiguration失效(基于内存的缓存管理),RedisCacheConfiguration创建RedisCacheManager 进行缓存管理,在程序启动时,会自动配置 spring.redis.host=localhost连接本机redis数据库,在RedisProperties中配置

自定义RedisCacheManager

将数据库查询结果以json格式序列化到redis中,并能够反序列化为json

```java @Configuration public class MyRedisConfig {

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory){

    RedisSerializer<String> strSerializer = new StringRedisSerializer();

    Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);

    // 解决查询缓存转换异常的问题
    ObjectMapper om = new ObjectMapper();

    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

    jacksonSeial.setObjectMapper(om);

    // 定制缓存数据序列化方式及时效
    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofDays(1))

            .serializeKeysWith(RedisSerializationContext.SerializationPair

                    .fromSerializer(strSerializer))

            .serializeValuesWith(RedisSerializationContext.SerializationPair

                    .fromSerializer(jacksonSeial))

            .disableCachingNullValues();


    RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory)

            .cacheDefaults(config).build();

    return cacheManager;
}

} ```

缓存注解

```java @Service public class EmployeeService {

@Autowired
EmployeeMapper employeeMapper;

@Cacheable(cacheNames = {"emp"},condition = "#emp!=null")
public Employee getEmp(Integer id){
    Employee emp = employeeMapper.getEmpById(id);

    System.out.println("员工------------->"+id);

    return emp;
}

} ```

```markdown

@EnableCaching

- 开启基于注解的缓存

@Cacheable

- 该注解标注的方法执行之前会先检查缓存中有没有这个数据,默认按照参数的值作为key去查询缓存,key默认使用keyGenerator生成
- cacheNames:缓存块的名字,默认作为key的前缀,如emp::1
- condition:在调用方法之前之后都能判断,若指定的条件成立,则缓存
- unless:在调用方法之后判断,若指定条件成立,则不缓存

```


版权声明:本文为weixin_45519907原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。