目录
问题描述
自定义RedisTemplate的序列化方式
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
//创建Template
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//key和hashKey采用String序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
//value和hashValue采用Json序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
return redisTemplate;
}
}
运行测试代码
@SpringBootTest
public class RedisTemplateTest {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Test
void testString(){
//插入一条String类型数据
redisTemplate.opsForValue().set("name","张三");
//读取一条String类型数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println("name="+name);
}
}
测试时碰到的问题
测试时,存入的值为张三
并且显示运行成功
使用redis图形化工具查看name的值时,能正常显示"张三"
但是在虚拟机中使用命令行获取name的值时,却是字节的形式
这是因为当前使用的redis-cli没有支持中文,所以显示不了中文。
解决方法是:在使用redis-cli命令行客户端时,指定--raw,这样就能显示中文了。