通过key查找string类型的value,报Null
我刚开始以为是代码写的问题,但是一共就写了两行代码
String redisKey = "redisKey";
String s = redisTemplate.opsForValue().get(redisKey);
System.out.println(s);
这总不能出错吧!
但是我忘了一个序列话的问题,在这段代码执行之前加上redis的key和value的序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
解决redis乱码问题
@Configuration
public class RedisConfig {
@Bean(name = "redisTemplate")
//RedisTemplate默认使用的是JdkSerializationRedisSerializer会出现乱码
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
//JsonAutoDetect.Visibility.ANY 代表所有属性或字段都可以序列化
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//新版用法
//以数组的方式存放到Redis,Class Type 全类名作为为第一个元素,Json字符串为第二个元素。
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
//老版用法,已弃用
//objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(objectMapper);
template.setKeySerializer(RedisSerializer.string());
template.setValueSerializer(serializer);
template.setHashKeySerializer(RedisSerializer.string());
template.setHashValueSerializer(serializer);
return template;
}
}
解决了序列化问题,就能查找出想要的数据了
redis的配置文件
我的redis配置文件,我这个连接的是本机的redis,如果连接的是其他机器的redis,需要将地址改变,要看其他机器有没有设置密码,通常是其他机器要设置密码的(踩坑点)
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
#spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=3000
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0
## 连接超时时间(毫秒)
spring.redis.timeout=30000