Spring 缓存

缓存

Spring 对缓存的支持有两种方式:

  1. 注解驱动的缓存
  2. XML 声明的缓存
    用 XML 的话,可以使用 Spring cache 命名空间中的 <cache:annotation-driven> 元素来启动注解驱动的缓存。
    注解的话可以使用: @EnableCaching 与 XML 的工作方式相同。
    它们都会创建一个切面(aspect),并触发 Spring 缓存注解的切点(pointcut)。这个切面会从缓存中获取数据,将数据添加到缓存之中或者从缓存中移除某个值。

@EnableCaching

//启用了注解驱动的缓存,声明了缓存管理器(cache manager)的 bean。
//缓存管理器是 Spring 缓存抽象的和核心,能够与多个流行的缓存实现进行集成。
@Configuration
@EnableCaching //启用缓存
public class CachingConfig {
    @Bean
    public CacheManager cacheManager() {
    	//声明缓存管理器
        return new ConcurrentMapCacheManager();
    }
}
使用 Ehcache 缓存

EnCacheCacheManager 缓存管理器

@Configuration  
@EnableCaching//启用缓存  
public class CachingConfig {
    //配置EhCacheCacheManager缓存管理器
    @Bean  
    public EhCacheCacheManager cacheManager(CacheManager cacheManager) {
        return new EhCacheCacheManager(cacheManager);
    }
}  
Redis 缓存

用来为 Spring 缓存抽象机制存储条目,Spring Data Redis 提供了RedisConnectionFactory 实现类的一个 bean。

@Configuration
@EnableCaching
public class RedisConfig {
    @Bean
    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
        CacheManager cacheManager = new RedisCacheManager(redisTemplate);
        return cacheManager;
        /*RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        // 多个缓存的名称,目前只定义了一个
        rcm.setCacheNames(Arrays.asList("thisredis"));
        //设置缓存默认过期时间(秒)
        rcm.setDefaultExpiration(600);
        return rcm;*/
    }
    // 以下两种redisTemplate自由根据场景选择
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(factory);
        return stringRedisTemplate;
    }
}
  1. @EnableCaching:开启缓存
  2. @Cacheable:表明 Spring 在调用方法之前。在缓存中查找方法的返回值,若找的到就返回缓存的值。否则,就调用,返回值放在缓存中。
  3. @CachePut:方法被调用,返回值放入缓存。
  4. @CacheEvict:清除缓存。
  5. @Caching:缓存接口。(RedisCache、EhCacheCache、ConcurrentMapCache)
  6. @CacheConfig:抽取缓存公共配置,可以标注在类上。

@Cacheable 和 @CachePut 都可以填充缓存。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值