首页 > 其他 > 详细

StringRedisTemplate和RedisTemplate的区别及使用方法

时间:2021-01-31 17:29:08      阅读:29      评论:0      收藏:0      [点我收藏+]

简而言之:

 

对于 RedisTemplate来说, k、v 都可以是任何类型,
 
对于 StringRedisTemplate 来说, k、v 都必须是 String类型,包括 hash、set。 而且key 不能使用 对象,因为不会调用 toString(), 否则引起 cast 异常

 传给 RedisTemplate、StringRedisTemplate  相同的key ,但是对于redis 来说, 是不同的, 如下,同一个key 123,实际的key 完全不同

 

127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x03123"
2) "123"
 
127.0.0.1:6379> get 123
"123 Sun Jan 31 15:42:33 CST 2021"
 
127.0.0.1:6379> get "\xac\xed\x00\x05t\x00\x03123"
"\xac\xed\x00\x05sr\x00\x11com.forezp.Person\xffQ\xfe\t\xb3\xe0\x10\xb6\x02\x00\x03L\x00\tfirstnamet\x00\x12Ljava/lang/String;L\x00\x02idq\x00~\x00\x01L\x00\blastnameq\x00~\x00\x01xpt\x00\x03123pt\x00\x04 Lea"
 

 

又比如:

 

@Autowired
StringRedisTemplate stringRedisTemplate; // t1
 
 
@Autowired
RedisTemplate<String, String> redisTemplate1; // t2
 
 
@Autowired
RedisTemplate redisTemplate; // t3
 
@Autowired
RedisTemplate<String, Object> redisTemplate2; // t4
 
@Autowired(required = false)
RedisTemplate<Object, Object> redisTemplate3; // t5
 
调试发现 t1 就是 t2, t3 就是 t4, t5 无法注入, 为null
 
为什么呢?
 
因为
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
redisTemplate.afterPropertiesSet();
setSerializer(redisTemplate);
System.out.println("redisTemplate = " + redisTemplate);
return redisTemplate;
}
 
private void setSerializer(RedisTemplate<String, Object> template) {
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(jackson2JsonRedisSerializer);
}
 

StringRedisTemplate和RedisTemplate的区别及使用方法

原文:https://www.cnblogs.com/FlyAway2013/p/14353024.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!