目录

问题

解决

一. 使用redisTemplate,修改配置

二. 使用StringRedisTemplate

注意:

这里JsonUtil,自己封装的工具类【工具类使用的Gson】 

区别:


问题

使用redisTemplate时,如果不指定序列化的格式,默认采用的是JDK中的ObjectOutputStream

存入redis后展示的结果

 

key :"\xac\xed\x00\x05t\x00\x04name"

value :"\xac\xed\x00\x05t\x00\x04jack

解决

一. 使用redisTemplate,修改配置

修改redisTemplate中这四个值

key      ==》   keySerializer【string】

                      hashKeySerializer【hash】

value    ==》 valueSerializer【string】

                      hashValueSerializer【hash】 

RedisSerializer 中有两个可以实现类可以解决

编写配置类

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
        // 准备RedisTemplate对象
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(connectionFactory);
        // 创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置key的序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // 设置value的序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        // 返回
        return redisTemplate;
    }
}

这时数据再次存放到redis,key和value恢复正常

 存储对象

【实现序列化接口】,在redis中,value会自动序列化,转化为JSON

取出的时候,会自动反序列化,转化为对象

二. 使用StringRedisTemplate

注意:

  1. 不需要编写配置类
  2. 不会自动序列化,key和value存储的都是String
  3. 存储的时候需要转换JSON
  4. 取出的时候再转换成实体类

这里JsonUtil,自己封装的工具类【工具类使用的Gson】 

public class JsonUtil {

    /**
     * 转换成JSON
     * @param o 要转换的对象
     * @return 转换成的JSON
     */
    public static String toJSON(Object o){
        Gson gson = new Gson();
        return gson.toJson(o);
    }

    /**
     * 转换成对象
     * @param json JSON
     * @param classOfT 对应的类字节码
     * @param <T> 返回的类型
     * @return 转换成的对象
     */
    public static <T> T fromJson(String json,Class<T> classOfT){
        Gson gson = new Gson();
        return gson.fromJson(json,(Type) classOfT);
    }
}

区别:

使用自动序列化后 存储在内存大小为:518

不使用自动序列化后 存储在内存大小为:258 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐