RedisTemplate<K,V>
Spring 封装了RedisTemplate对象来进行Redis的各种操作,它支持所有的Redis原生的api。RedisTemplate位于spring-data-redis/ spring-boot-starter-data-redis包下
参数类型(Type Parameters)
K
the Redis key type against which the template works (usually a String)
模板中的Redis key的类型通常为String,如RedisTemplate<String,Object>
注意:没有特殊情况,不要定义成RedisTemplate<Object,Object>,否则根据里氏替换准则,使用的时候会造成类型错误
V
the Redis value type against which the template works
模板中中的Redis的类型
RedisTemplate中定义了5种数据结构操作
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
StringRedisTemplate与RedisTemple
- 前者集成后者
- 数据不共通的。即StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据
- SDR默认采用的序列化有两种。一种是String的序列化策略,一种是JDK的序列化策略;
- StringRedisTemplate默认采用的是String 的序列化策略,保存的key和value都是采用的该策略序列化并保存的
- RedisTemplate默认采用的是JDK的序列化策略,保存的 key和value都是采用此策略序列化并保存的
网上的redisTemplate配置如下
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
{
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
Redis的String数据结构(推荐使用StringRedisTemplate)
若使用RedisTemplate需要改变序列化方式
RedisSerializer<String> stringSerializer = new StringRedisSerializer(); template.setKeySerializer(stringSerializer ); template.setValueSerializer(stringSerializer ); template.setHashKeySerializer(stringSerializer ); template.setHashValueSerializer(stringSerializer );