• SpringBoot2.X + SpringCache + redis解决乱码问题


    环境:SpringBoot2.X + SpringCache + Redis

    • Spring boot默认使用的是SimpleCacheConfiguration,使用ConcurrentMapCacheManager来实现缓存。

    配置:

    spring:
      redis:
          host: 192.168.1.192
          database: 1
          port: 6379
          password: 123456
          timeout: 1s
          jedis:
            pool:
              max-active: 20
              max-idle: 20
              min-idle: 10
              max-wait: -1ms
      cache:
        redis:
          use-key-prefix: true
          key-prefix: dev
          cache-null-values: false
          time-to-live: 20s

    解决redis保存数据乱码的问题

    • 解决从redis反序列化报错的问题

    • 增加失效时间

    @Configuration
    @ConfigurationProperties(prefix = "spring.cache.redis")
    public class SpringCacheRedisConfig {
        private Duration timeToLive = Duration.ZERO;
        public void setTimeToLive(Duration timeToLive) {
            this.timeToLive = timeToLive;
        }
    
        @Bean
        public CacheManager cacheManager(RedisConnectionFactory factory) {
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    
            //解决查询缓存转换异常的问题
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
    
            // 配置序列化(解决乱码的问题)
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(timeToLive)
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                    .disableCachingNullValues();
    
            RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                    .cacheDefaults(config)
                    .build();
            return cacheManager;
        }
    }
  • 相关阅读:
    HDU 5835 Danganronpa(弹丸论破)
    HDU 5813 Elegant Construction(优雅建造)
    HDU 5831 Rikka with Parenthesis II(六花与括号II)
    HDU 5810 Balls and Boxes(盒子与球)
    HDU 5818 Joint Stacks(联合栈)
    Dream Team(最小生成树)
    带权并查集
    HDU 1495 非常可乐(BFS)
    I Hate It(线段树+更新)
    Just a Hook(线段树+区间更新)
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/9561597.html
Copyright © 2020-2023  润新知