• 使用redisTemplate存储数据,出现xACxEDx00x05tx00


    本文开发环境:SpringBoot+RedisTemplate

    代码:

        /**
         * 缓存Map
         *
         * @param key
         * @param dataMap
         * @return
         */
        @Override
        public <T> HashOperations<String, String, T> setCacheMap(String key, Map<String, T> dataMap) {
    
            HashOperations hashOperations = redisTemplate.opsForHash();
            if (null != dataMap) {
                for (Map.Entry<String, T> entry : dataMap.entrySet()) {
                    hashOperations.put(key, entry.getKey(), entry.getValue());
                }
            }
            return hashOperations;
        }

    存到数据库,发现key,hash key/value都有xACxEDx00x05tx00前缀。

    后来添加了一个配置内,如下:

    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    @Configuration
    public class RedisConfig  {
    
        @Bean
        public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
    
            RedisTemplate template = new RedisTemplate<>();
    
            template.setConnectionFactory(connectionFactory);
    
            //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
    //
            Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
    
            ObjectMapper mapper = new ObjectMapper();
    
            mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    
            mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    
            serializer.setObjectMapper(mapper);
    
            template.setValueSerializer(serializer);
    
            //使用StringRedisSerializer来序列化和反序列化redis的key值
    
            template.setKeySerializer(new StringRedisSerializer());
    
    
            /*hash字符串序列化方法*/
            template.setHashKeySerializer(new StringRedisSerializer());
            template.setHashValueSerializer(new StringRedisSerializer());
    
            template.afterPropertiesSet();
    
            return template;
    
        }
    
    }

    添加那3行代码解决问题。如果不使用json功能,注释ObjectMapper相关代码

  • 相关阅读:
    BZOJ1513: [POI2006]Tet-Tetris 3D
    BZOJ3210: 花神的浇花集会
    BZOJ3207: 花神的嘲讽计划Ⅰ
    BZOJ3170: [Tjoi 2013]松鼠聚会
    BZOJ3747: [POI2015]Kinoman
    解题:POI 2008 Subdivision of Kingdom
    解题:JSOI 2007 重要的城市
    解题:USACO13NOV No Change
    解题:洛谷1120 小木棍
    解题:SCOI 2008 配对
  • 原文地址:https://www.cnblogs.com/passedbylove/p/11274073.html
Copyright © 2020-2023  润新知