美文网首页
redis 缓存注解

redis 缓存注解

作者: Summer2077 | 来源:发表于2020-08-20 22:06 被阅读0次
  1. sql可以查询出数据,但代码查询不到数据问题
  2. Redis缓存一致性设计笔记
  3. redis 缓存注解
  4. springboot与缓存
  5. springboot redis缓存配置使用
  6. SpringCache踩坑记
  7. SpringBoot2快速入门08--cache
  8. spring boot —— redis 缓存注解使用教程
  9. java 8 中List属性去重-redis序列
  10. Spring集成Redis缓存,提高查询效率
  11. Spring Boot 整合 Redis (进阶)

    1.引入redis

    <!-- spring boot redis缓存引入 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- lecttuce 缓存连接池-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    

    2.添加配置

    spring:  
      redis:
        host: 127.0.0.1
        port: 6379
        database: 0
        password:  #默认为空
        lettuce:
          pool:
            max-active: 20  #最大连接数,负值表示没有限制,默认8
            max-wait: -1    #最大阻塞等待时间,负值表示没限制,默认-1
            max-idle: 8     #最大空闲连接,默认8
            min-idle: 0     #最小空闲连接,默认0
    

    3.Redis 的 配置类

    1. 原因我们要避免使用jdk的序列化,因为jdk 的序列化被诟病,可能以后就被删除,无法使用

    2. 我们不进行配置直接使用jdk 的序列化也行

       implements Serializable
      

    RedisConfig

    /**
     * 我们自定义一个 RedisTemplate,设置序列化器,这样我们可以很方便的操作实例对象。
     * 否则redis自动使用对象的jdk序列化
     */
    @Configuration
    public class RedisConfig {
        @Bean
        public RedisTemplate<String, Serializable> redisTemplate(LettuceConnectionFactory connectionFactory) {
            RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
            redisTemplate.setKeySerializer(new StringRedisSerializer());//key序列化方式
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//value序列化
            redisTemplate.setConnectionFactory(connectionFactory);
            return redisTemplate;
        }
    }
    

    4.测试redisTemplate

    @Autowired
    private RedisTemplate redisTemplate;
    
    @PostMapping("save-test")
    public R saveAd(@RequestBody Ad ad){
        //redisTemplate.opsForValue().set("ad1", ad);
        redisTemplate.opsForValue().set("index::ad", ad);
        return R.ok();
    }
    
    @GetMapping("get-test/{key}")
    public R getAd(@PathVariable String key){
        Ad ad = (Ad)redisTemplate.opsForValue().get(key);
        return R.ok().data("ad", ad);
    }
    
    @DeleteMapping("remove-test/{key}")
    public R removeAd(@PathVariable String key){
        Boolean delete = redisTemplate.delete(key);
        System.out.println(delete);//是否删除成功
        Boolean hasKey = redisTemplate.hasKey(key);
        System.out.println(hasKey);//key是否存在
        return R.ok();
    }
    

    使用缓存注解

    1. 修改Redis配置类

    再配置类上添加注解

    @EnableCaching
    

    添加bean配置

    @Bean
    public CacheManager cacheManager(LettuceConnectionFactory connectionFactory) {
        
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            //过期时间600秒
            .entryTtl(Duration.ofSeconds(600)) 
            // 配置序列化
            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
            .disableCachingNullValues();
    
        RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory)
            .cacheDefaults(config)redis
            .build();
        return cacheManager;
    }
    

    2. 添加缓存注解

    @Cacheable(value = "xxx", key = "'xxx'"):标注在方法上,对方法返回结果进行缓存。下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。

    @Cacheable(value = "index", key = "'selectByAdTypeId'")
    @Override
    public List<Ad> selectByAdTypeId(String adTypeId) {
        .......
        return List
    }
    

    相关文章