文章目录
/**
* 实例化 RedisTemplate 对象
* @return
*/
@Bean
public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key 都使用String 序列化方式
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
GenericJackson2JsonRedisSerializer
GenericJackson2JsonRedisSerializer序列化时,会保存序列化的对象的完全限定名,从redis获取数据时即可直接反序列化成指定的对象
通用参数如下:
List<Student> students = new ArrayList<>();
Student xm = new Student("小明", 12);
Student ph = new Student("胖虎", 12);
students.add(xm);
students.add(ph);
(1)VALUE 存普通对象
存:
Student xm = new Student("小明", 12);
redisTemplate.opsForValue().set(xm.getName(), xm);

值中附带了实体信息
取:
Student xmCache = (Student)redisTemplate.opsForValue().get(xm.getName());
// Student(name=小明, age=12)
System.out.println(xmCache);
结论:GenericJackson2JsonRedisSerializer 序列化方式 可直接存储VALUE为对象,且从Redis获取可进行强转
(2)VALUE 存对象集合
存:
redisTemplate.opsForSet().add("students-genericJackson2JsonRedisSerializer", students);
redisTemplate.opsForValue().set("students-str", students);

值中既有实体类完全限定名又有集合类型
–

具体值中携带了实体类完全限定名
取:
List<Student> studentCache = (List<Student>) redisTemplate.opsForValue().get("students-str");
Set<Object> members = redisTemplate<

本文详细探讨了在Spring Boot中使用RedisTemplate进行数据存储时,GenericJackson2JsonRedisSerializer和Jackson2JsonRedisSerializer两种序列化方式的差异。内容涵盖VALUE存储普通对象、对象集合、JSON字符串以及管道Pipelined操作的数据存储与取回,分析了不同场景下的序列化效果和注意事项,包括如何处理反序列化问题。
最低0.47元/天 解锁文章
3891





