✨✨个人主页:沫洺的主页
📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏
📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏
📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏
💖💖如果文章对你有所帮助请留下三连✨✨
RedisTemplate
与StringRedisTemplate底层对象是同一个
RedisTemplate
既然是泛型就可以指定类型,通常K为String,V为对象或其他类型
User类(可序列化)
@Data @AllArgsConstructor @NoArgsConstructor @Builder public class User implements Serializable {private String name;private int age; }@Autowired 与 @Resource 区别
- @Autowired注解由Spring提供,只按照byType注入;
- @Resource注解由J2EE提供,默认按照byName自动注入,按照名字如果找不到,再按照类型byType去找
- @Autowired默认按类型进行装配,
- @Resource默认按照名称进行装配。
//@Autowired 按类型找不到会报错,找不到bean //@Resource 按名称redisTemplate找,若找不到按照类型也找不到则报错 @Resource(name = "redisTemplate")//不设置name默认安装方法名找 private RedisTemplateredisTemplate; 因此使用@Resource(name = "redisTemplate")来注入bean
@Resource(name = "redisTemplate")private RedisTemplateredisTemplate;@Testpublic void test1(){User user1 = User.builder().name("张三").age(23).build();//会出现乱码问题redisTemplate.opsForValue().set("user1", user1);//可以正常获取User user = redisTemplate.opsForValue().get("user1");System.out.println(user);}
乱码问题分析
StringRedisTemplate不会乱码是因为底层使用的是StringRedisSerializer序列化工具
RedisTemplate
具体原因就是出在JdkSerializationRedisSerializer上
解决乱码问题
自定义RedisConfig
@Configuration public class RedisConfig {@Beanpublic RedisTemplate对象使用json序列化工具Jackson2JsonRedisSerializer
String还是使用StringRedisSerializer序列化工具
之所以我们自定义的RedisTemplate
类型的bean会覆盖官方底层源码的bean,是因为官方设置了当没有注册redistemplate这个bean时,才使用此官方的bean @ConditionalOnMissingBean( name = {"redisTemplate"})
解决乱码问题后再执行test1