问题描述
RedisTemplate可以写入数据,但读取不到数据,类似:
// 写
redisTemplate.boundHashOps(key).putAll(dataMap);
// 读
redisTemplate.hasKey(key)=false
原因预测
- 序列化
不设置RedisConfig里的RedisSerializer,会使用默认序列化导致写入数据不符合原数据格式,导致查询失败 - 泛型(尝试)
RedisTemplate<Object, Object>// 查询不到key RedisTemplate<String, Object>// 查询到key
RedisConfig模板
key用StringRedisSerializer
value用Jackson2JsonRedisSerializer
pom导入jjwt依赖
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
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.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
/****
* 序列化设置
*/
@Bean("redisTemplate")
public RedisTemplate getRedisTemplate(RedisConnectionFactory redissonConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redissonConnectionFactory);
redisTemplate.setValueSerializer(valueSerializer());
redisTemplate.setKeySerializer(keySerializer());
redisTemplate.setHashKeySerializer(keySerializer());
redisTemplate.setHashValueSerializer(valueSerializer());
return redisTemplate;
}
@Bean
public StringRedisSerializer keySerializer() {
return new StringRedisSerializer();
}
@Bean
public RedisSerializer valueSerializer() {
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
return jackson2JsonRedisSerializer;
}
}