redis 缓存注解

Spring Boot 整合 Redis (进阶)

1.引入redis



    org.springframework.boot
    spring-boot-starter-data-redis



    org.apache.commons
    commons-pool2

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 redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate 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 selectByAdTypeId(String adTypeId) {
    .......
    return List
}

你可能感兴趣的:(redis 缓存注解)