其他分享
首页 > 其他分享> > SpringCache

SpringCache

作者:互联网

  <!--导入springCache依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

 

 spring.cache.type=redis

并在启动类上添加注解

//springCache缓存开启
@EnableCaching


 

 

@cacheable 触发缓存的操作   缓存中有数据 就直接返回 没有数据 查询出数据 放进缓存
@cacheEvict 触发把数据从缓存中删除的操作
@cachePut 不影响方法执行的情况下  更新缓存
@chching  以上操作的组合操作
@cacheconfig 在类级别共享缓存的相关数据 
   /**
     * 查询出所有的商品大类
     * @return
     * 在注解中我们可以指定缓存的名称  起到一个分区的作用  一般按照业务区分
     *  @Cacheable({"category","product"}) 
     *  代表当前的方法返回结果是需要缓存的  调用该方法的时候 如果缓存中有数据  那么该方法就不会执行
     *  如果缓存中没有数据  那么就执行该方法  并且把查询的结果缓存起来
     * 
     * 缓存处理
     * 1存储在redis中的缓存数据的key是默认生成的  缓存名称::simpleKey
     * 2默认缓存的数据的过期时间是永久 -1
     * 3 缓存的数据  默认使用jdk的序列号机制
     * 
     * 改进
     *  1 生成的缓存数据 我们需要自定义的key 自定义key在双引号中写spel表达式  但是如果定义字符串 需要在加上单引号
     *  2 指定缓存数据的存活时间  spring cache time-to-live: 60000
     *  3 把缓存的数据保存为json数据
     * 
     */
    
    @Cacheable(key = "#root.method.name",value = {"catagory","product"})
    @Override
    public List<CategoryEntity> getLeve1Categroy() {
        //long start=System.currentTimeMillis();
        System.out.println("查询了数据库操作.....");
      List<CategoryEntity> list=baseMapper.queryLeve1Category();
        //System.out.println("查询queryLeve1Category所需要的时间为:"+(System.currentTimeMillis()-start));
        return list;
    }
自定义序列化

 

 

@Configuration
public class MyCacheConfig {

@Bean
public RedisCacheConfiguration redisCacheConfiguration(){

RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
//指定自定义序列化的方式
config=config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
config=config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer()));

return config;

}

}

 


 

 

 添加以下完整配置类

@Configuration
public class MyCacheConfig {

    @Bean
    public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){
    
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        //指定自定义序列化的方式
        config=config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
        config=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;
        
    }

}

 

 

 


 

 

 

标签:缓存,SpringCache,自定义,数据,redisProperties,RedisCacheConfiguration,config
来源: https://www.cnblogs.com/Lcch/p/16339348.html