• 使用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相关代码

  • 相关阅读:
    SQL字符串操作汇总
    重构之道清除代码异味
    Html.Action和Html.RederAction来创建子视图
    C#实现Thrift连接池[新]
    CentOS下配置Apache反向代理出错的解决
    entity framework实体用数据库默认值的方法
    为IEnumerable类型添加Add方法
    一个对Entity Framework数据层的封装
    将.netFramework4.5/MVC4/EF5/Oracle网站发布到Server2008/iis7的痛苦经历
    让vs2012运行vs2010插件的方法
  • 原文地址:https://www.cnblogs.com/passedbylove/p/11274073.html
Copyright © 2020-2023  润新知