首页 > java > spring java redis 乱码

spring java redis 乱码

作者:bin

我们使用redisTemplate去set一个value时,在redis里面用key * 去获取,会发现不是正常的字符串。

例如:
设置值:

redisTemplate.opsForValue().set("key1", "value1");

获取key:

127.0.0.1:6379> keys *key1
127.0.0.1:6379> "\xac\xed\x00\x05t\x00"

问题:
出现这个问题的原因是,java是一个基于对象的语言,redis是基于字符串存储的NoSql,对象是无法存储到Redis中的。

解决方案:
java提供了序列化机制,只要类实现了java.io.Serializable接口,就代表类的对象能够进行序列化,通过将类对象进行序列化,就能够得到二进制的字符的。
这样Redis就能将这些类对象的字符串进行存储,java也可以将那些二进制的字符串进行反序列化转为对象。

spring基于这个原理,spring提供类序列化机制,这里讨论2个常用的序列化器
StringRedisSerializer和JdkSerializationRedisSerializer(默认序列化器)

解决,这里为们使用String的序列化器去序列化就可以了

RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
//获取一个序列化器
RedisSerializer stringRedisSerializer = redisTemplate.getStringSerializer(); 

//下面设置序列化器
redisTemplate.setKeySerialiazer(stringRedisSerializer); 
redisTemplate.setValueSerialiazer(stringRedisSerializer);

//初始化链接
redisTemplate.setConnectionFactoru(initConnectionFactory());

//设置值
redisTemplate.opsForValue().set("key1", "value1");

使用redis获取key

127.0.0.1:6379> keys *key1
127.0.0.1:6379>"key1"
127.0.0.1:6379> get key1
127.0.0.1:6379>"value1"

您必须 [ 登录 ] 才能发表留言!