技术文摘
Redis 中 RedisTemplate 如何配置序列化与反序列化
2025-01-14 22:52:14 小编
Redis 中 RedisTemplate 如何配置序列化与反序列化
在使用 Redis 作为缓存或数据存储时,合理配置 RedisTemplate 的序列化与反序列化至关重要。它不仅影响数据在 Redis 中的存储格式,还关系到应用程序能否正确读取和使用这些数据。
我们要了解为什么需要配置序列化与反序列化。Redis 存储的数据本质上都是字节数组。当我们使用 RedisTemplate 存入 Java 对象时,如果不进行适当的序列化,就无法将对象转换为字节数组进行存储;而读取时,也需要反序列化将字节数组还原为 Java 对象。
默认情况下,RedisTemplate 使用的是 JdkSerializationRedisSerializer 进行序列化和反序列化。虽然它能满足基本需求,但存在一些问题,比如生成的字节数组较大,可读性差。
接下来看看如何进行配置。常用的序列化方式有多种,如 StringRedisSerializer、Jackson2JsonRedisSerializer 等。
如果希望以字符串形式存储和读取数据,可以使用 StringRedisSerializer。配置如下:
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
对于 JSON 格式的数据,Jackson2JsonRedisSerializer 是个不错的选择。它可以将对象序列化为 JSON 字符串存储,读取时再反序列化为对象。示例配置如下:
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
Jackson2JsonRedisSerializer<Object> 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);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
通过上述配置,我们能根据实际需求灵活选择合适的序列化与反序列化方式,提升 Redis 数据处理的效率和准确性。合理配置 RedisTemplate 的序列化与反序列化,有助于打造高效、稳定的应用程序,充分发挥 Redis 的强大功能,为项目的数据存储和缓存管理提供坚实保障。
- 九款 VS Code 扩展 助开发效率飙升
- 简单需求引十几处代码修改,深究重复代码为何物
- 程序员遭辞退报复 写代码转账 553 次
- 重点关注开发者体验:开发人员乃关键资产
- 2021 年 Python 十佳 ML 库汇总,国产选手 GitHub 半年斩获 5k+star
- Kafka 生产者与消费者机制及分区策略,你竟还不知?
- C 语言手写线程池
- 2021 年 15 个热门的 VS Code 主题排行
- Java 加密解密与数字签名
- AppImage Pool:助力寻找与管理 AppImage 的应用商店
- CSS 开发技巧快速提升之道
- 阿里二面:main 方法继承导致的挂科?
- 应对持续膨胀接口的策略
- 分布式计算中的数据质量探讨
- 深入探究 Go Json.Unmarshal 精度丢失之因