栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

分布式缓存(五) SpringCache

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分布式缓存(五) SpringCache

为什么要使用SpringCache呢? 每次写代码的时候,都要先从缓存中去取,然后又放入到缓存中去,比较麻烦,考虑简化的方式 1.简介 spring从3.1开始定义了Cache和CacheManager接口来统一不同的缓存技术,并支持使用JCache注解简化开发 Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; Cache接口下Spring提供了各种xxxCache的实现,如RedisCache,EhCacheCache,ConcurrentMapCacheManager等等 CacheManager缓存管理器 可以用来管理不同名字的缓存 2个方法: getCache(String name); Collection getCacheNames(); Cache缓存接口 相当于对缓存的增删改查 例如:ConcurrentMapCacheManager 最终内部是一个 ConcurrentMap cacheMap = new  ConcurrentMap<>(); 2.整合SpringCache 2.1 引入依赖 spring-boot-starter-cache   + redis

    org.springframework.boot
    spring-boot-starter-cache
2.2 写配置      2.2.1  SpringBoot自动配置了哪些?       CacheAutoConfiguration会导入 RedisCacheConfiguration,其中,已经 自动配置好了缓存管理器 RedisCacheManager      2.2.2  程序员需要做哪些?      配置使用redis作为缓存        spring.cache.type=redis 3.测试使用缓存    @Cacheable:     触发,将数据保存到缓存的操作    @CacheEvict:     触发,将数据从缓存删除的操作    @CachePut:   不影响方法执行更新缓存    @Caching:   组合以上多个操作    @CacheConfig:   在类级别共享缓存的相同配置 步骤:1.开启缓存功能 @EnableCaching           2.只需要使用注解就能完成缓存操作 eg:@Cacheable注解加到方法上,代表当前方法的结果需要缓存,如果缓存中有,方法都不用调用了;如果缓存中没有,会调用方法         @Cacheable({" category"})   //缓存的分区,--按照业务类型进行区分 @Cacheable("category")            // 代表当前方法的结果需要缓存,如果缓存中有,下面的方法就不调用了;            // 如果缓存中没有,会调用方法,最后将方法的结果放入缓存            // 每一个缓存的数据我们都来指定要放到哪个名字的缓存 【缓存的分区(按业务类型分)】
@Override
public List getLeveloneCategory() {
    System.out.println("getLeveloneCategory ......");
    //获取当前系统时间
    Long l = System.currentTimeMillis();
    QueryWrapper queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("parent_cid",0);
    List entities = baseMapper.selectList(queryWrapper);
    System.out.println("测试消耗时间为"+(System.currentTimeMillis()-l));
    return entities;
}
SpringCache的默认行为 1.缓存中的key默认自动生成,名字::SimpleKey [] 2.缓存的value值,默认使用jdk序列化机制,将序列化后的数据存到redis中 3.默认的ttl时间 -1 程序员自定义配置 1.指定生成的key:  key属性指定,接受一个spel表达式 :  @Cacheable(value = "category", key="'level1Categorys'")     2.指定缓存的存活时间    配置文件中设置  spring.cache.redis.time-to-live=3600000 3.将数据保存为json格式   CacheAutoConfiguration会导入 RedisCacheConfiguration,其中,已经 自动配置好了缓存管理器 RedisCacheManager   -->   初始化所有的缓存,每个缓存决定使用什么配置,如果 RedisCacheConfiguration有就用已有的,没有就用默认配置   -->  想改缓存的配置,只需要给容器中放一个 RedisCacheConfiguration即可,就会应用到当前RedisCacheManager管理的所有缓存分区中 自定义缓存配置: 需要理解SpringBoot相关
@EnableConfigurationProperties(CacheProperties.class)
@Configuration
@EnableCaching
public class MyCacheConfig {

//    @Autowired
//    CacheProperties cacheProperties;

    @Bean
    RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
        config = config.serializevaluesWith(RedisSerializationContext.SerializationPair.fromSerializer(new                        GenericJackson2JsonRedisSerializer()));
        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;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号