zoukankan      html  css  js  c++  java
  • 使用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相关代码

  • 相关阅读:
    git回滚分支版本到指定版本
    java的垃圾回收
    java对象模型
    java内存模型
    偏向锁浅析
    maven打包报错:在类路径或引导类路径中找不到程序包 java.lang
    《microsoft sql server 2008技术内幕 t-sql语言基础》
    《SQL基础教程》
    内连接,外链接(左连接、右连接、全连接),交叉连接大总结+附SQL JOINS图解[转]
    《大型网站技术架构》1.大型网站架构演练
  • 原文地址:https://www.cnblogs.com/passedbylove/p/11274073.html
Copyright © 2011-2022 走看看