用Spring data 的RedisTemplate查询一个hash,输入正确的key,却不能查出来数据,于是尝试往redis里存一个简单的KV键值对,redis客户端get key发现找不到key,使用命令keys *
查询了下发现存入的值变乱码了。
RedisTemplate是spring对Redis的封装 StringRedisTemplate继承RedisTemplate StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
在动手的过程中,我采用的是RedisTemplate,在传递String类型的数据结构后,查看缓存会发现数据乱码现象。这时候我们需要修改RedisTemplate的序列化策略。 但是注意一点,由于采用了String的序列化策略,所以只接受value值类型为String的参数。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfiguration {
@Autowired
private RedisTemplate redisTemplate;
@Bean
public RedisTemplate<String, Object> stringSerializerRedisTemplate(){
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
return redisTemplate;
}
}