在springboot中使用redis时,采用的时RedisTemplate方式,但插入数据key,value
却是如下这种情况:
RedisTemplate 可以接收任意的 Object 作为value写入 Redis,但写入前会把 Object 序列化为字节形式,默认采用 JDK 序列化。但是这种方式有两个缺点:
1.可读性差。对键值对进行了序列化,中文字符串序列化后的内容表示为 16 进制表示的数据,可读性差。
2.内存空间占用大。存储了额外的对象的类型信息,占用了内存空间。
自定义 RedisTemplate 进行序列化
package com.cwf.demo.config;
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
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
// String的序列化方式
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// Jackson2JsonRedisSerializer序列化类
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//hash的value也采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
}