spring cache redis 集成

基础配置

1.mvn坐标

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

2.配置文件

spring:
  # redis相关配置
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    jedis:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池中的最小空闲连接
        min-idle: 0
    # 连接超时时间(毫秒)默认是2000ms
    timeout: 2000ms
  cache:
    redis:
      ## 过期时间 ,这里注意如果使用默认的 RedisCacheManager 陪着对象 过期时间需要加上单位,因为这里的注入类型是 Duration,本示例使用的是自定义所以没有写单位
      time-to-live: 3000
      #写入redis时是否使用键前缀。
      use-key-prefix: true
      key-prefix: test

Java代码

1.config类

   @Value("${spring.cache.redis.time-to-live}")
    private Long defaultExpireTime ;
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
        // 设置缓存管理器管理的缓存的默认过期时间
        defaultCacheConfig = defaultCacheConfig
                .entryTtl(Duration.ofSeconds(defaultExpireTime))
                // 设置 key为string序列化
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                // 设置value为json序列化
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
                // 不缓存空值
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory)
                .cacheDefaults(defaultCacheConfig)
                .build();
        return cacheManager;
    }


    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        // 创建一个模板类
        RedisTemplate template = new RedisTemplate();
        // 设置key的序列化器
        template.setKeySerializer(new StringRedisSerializer());
        // 设置value
        template.setValueSerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new StringRedisSerializer());
        // 将刚才的redis连接工厂设置到模板类中
        template.setConnectionFactory(redisConnectionFactory);
        // 设置value的序列化器
        //使用Jackson 2,将对象序列化为JSON
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //json转对象类,不设置默认的会将json转成hashmap
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

1.config类

    @Cacheable(value = "userCache", key = "#root.targetClass.getName()  +':'+ #root.methodName + #id ")
    @GetMapping("/t")
    public String t1(String id) { 
        return "t";
    }
具体参数含义参照springEL表达式

你可能感兴趣的:(spring cache redis 集成)