RedisTemplate 和 StringRedisTemplate 的区别

博客介绍了RedisTemplate和StringRedisTemplate的区别。RedisTemplate继承自某类,有成员变量,序列化采用特定方式,将对象序列化为字节数组;StringRedisTemplate序列化适用于存储value为String的情况。结论是Redis中存储对象用RedisTemplate,存储字符串用StringRedisTemplate。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RedisTemplateStringRedisTemplate 都提供了一些操作 Redis 的模板方法,但是两者之间是有一些区别的

这里写图片描述

从上图中可以看出,StringRedisTemplate 是继承了 RedisTemplate 的,RedisTemplate 有一个成员变量 defaultSerializer

  • RedisTemplate 的序列化采用的是 JdkSerializationRedisSerializer ,在存储到 Redis 的时候会将 对象 序列化为 字节数组

这里写图片描述

这里写图片描述

  • StringRedisTemplate 的序列化采用的是 StringRedisSerializer ,适用于存储的 value 为 String 的情况

这里写图片描述


RedisTemplate的以字符串为中心的扩展。 由于针对Redis的大多数操作都是基于String的,因此该类提供了一个专用类,可以最小化其更通用的{@link RedisTemplate模板}的配置,尤其是在序列化器方面。


结论:

1、Redis 中存储对象使用 RedisTemplate ,存储字符串使用 StringRedisTemplate


更多参考:

1、关于RedisTemplate和StringRedisTemplate
https://blog.youkuaiyun.com/notsaltedfish/article/details/75948281


### RedisTemplateStringRedisTemplate 的主要差异 #### 序列化方式 `RedisTemplate` 支持多种序列化器,默认情况下会使用 `JdkSerializationRedisSerializer` 来序列化对象。这意味着它可以存储任意类型的 Java 对象到 Redis 中,但在读取时需要反序列化回原始类型[^1]。 相比之下,`StringRedisTemplate` 则专门用于处理字符串形式的数据,其默认使用的序列化器是 `StringRedisSerializer`。这使得所有的键值都被视为字符串进行存储检索,从而避免了复杂的序列化/反序列化进程[^3]。 #### 接口方法一致性 两者都提供了相同的操作接口集合,比如: - `opsForValue()`:操作简单的 key-value 数据结构; - `opsForHash()`:管理哈希表中的字段及其对应的值; - `opsForList()`:针对列表执行命令; - `opsForSet()`:实现无序集合的相关功能; - `opsForZSet()`:支持带分数排序的有序集合作业。 不过,在实际调用这些 API 返回的结果上存在细微差别——当利用 `StringRedisTemplate` 调用上述任何一个特定领域的方法返回的对象总是基于字符串表示;而采用普通的 `RedisTemplate` 可能依据所设定的具体泛型参数决定最终结果的形式[^2]。 #### 性能考量 鉴于 `StringRedisTemplate` 主要面向纯文本数据设计,所以在涉及大量简单字符串存取的应用场合下表现更优,并且减少了因频繁转换复杂对象带来的开销。然而对于那些确实需要用到自定义实体类映射或者二进制大对象(BLOB)存储的需求,则更适合选用具备更强灵活性特性的标准版 `RedisTemplate`[^4]。 --- ### 适用场景分析 - **推荐使用 `StringRedisTemplate`:** 如果项目中大部分业务逻辑围绕着基本的字符串操作展开,那么可以直接选择 `StringRedisTemplate` ,因为它简化了很多不必要的中间环节,提高了效率的同时也增强了代码可读性。 - **适合应用 `RedisTemplate`:** 当遇到较为复杂的业务需求,例如保存整个 POJO 实体至缓存当中再取出还原成原样等情况时,就需要依赖于更加通用化的解决方案即 `RedisTemplate` 。此时可以通过调整相应的序列化机制适配不同的数据形态。 ```java // 示例代码展示如何配置 RedisTemplate 使用 JSON 序列化器 @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){ RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(objectMapper); template.setDefaultSerializer(serializer); return template; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值