RedisTemplate、StringRedisTemplate、RedisIndexedSessionRepository之间的区别?

RedisTemplateStringRedisTemplateRedisIndexedSessionRepository 是 Spring 生态中与 Redis 交互的三个不同层级的组件,用途完全不同 。下面从 定位、依赖、使用方式、适用场景 四个维度详细对比:

### 文章目录

  • [@[toc]](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [一、`RedisTemplate` ------ 通用 Redis 操作模板](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 定位](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 引入依赖(Maven)](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 配置(application.yml)](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 使用示例](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 特点](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [二、`StringRedisTemplate` ------ 专用于字符串操作](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 定位](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 引入依赖](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 使用示例](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 特点](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [三、`RedisIndexedSessionRepository` ------ Spring Session 的 Redis 实现](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 定位](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 引入依赖](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 启用 Session 共享(关键!)](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 配置(application.yml)](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 使用方式(和普通 HttpSession 一样!)](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [🔹 特点](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [四、三者对比总结](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [五、常见误区澄清](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [❌ 误区1:`RedisIndexedSessionRepository` 是用来操作 Redis 的?](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [❌ 误区2:`RedisTemplate` 比 `StringRedisTemplate` 更强大?](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [✅ 最佳实践建议:](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))
  • [六、扩展:自定义 RedisTemplate 序列化(推荐)](#文章目录 @[toc] 一、RedisTemplate —— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate —— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository —— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的? ❌ 误区2:RedisTemplateStringRedisTemplate 更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐))

一、RedisTemplate ------ 通用 Redis 操作模板

🔹 定位

Spring Data Redis 提供的通用 Redis 操作模板 ,支持任意 Java 对象(需序列化),底层使用 RedisConnectionFactory

🔹 引入依赖(Maven)

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

🔹 配置(application.yml)

yml 复制代码
spring:
  redis:
    host: localhost
    port: 6379
    # 可选:配置序列化方式(默认 JDK 序列化,建议改用 JSON)

🔹 使用示例

java 复制代码
@Service
public class RedisService {
    
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    // 操作 Hash
    public void hSet(String key, String field, Object value) {
        redisTemplate.opsForHash().put(key, field, value);
    }
}

🔹 特点

  • ✅ 支持泛型(RedisTemplate<K, V>
  • ✅ 默认使用 JDK 序列化(存储为二进制,可读性差)
  • ✅ 需要自定义 RedisSerializer 提高可读性(如 Jackson2JsonRedisSerializer

二、StringRedisTemplate ------ 专用于字符串操作

🔹 定位

RedisTemplate特化版本仅支持 String 类型的 key 和 value ,内部已预配置为 StringRedisSerializer

🔹 引入依赖

RedisTemplate(同一个 starter)

🔹 使用示例

java 复制代码
@Service
public class StringRedisService {
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void setString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    // 设置带过期时间
    public void setEx(String key, String value, long timeout, TimeUnit unit) {
        stringRedisTemplate.opsForValue().set(key, value, timeout, unit);
    }
}

🔹 特点

  • key/value 必须是 String
  • ✅ 存储内容可读(直接存字符串,非二进制)
  • ✅ 适合缓存简单字符串、JSON 字符串、计数器等
  • ❌ 不能直接存 Java 对象(需手动转 JSON)

💡 最佳实践

大多数场景推荐使用 StringRedisTemplate + 手动 JSON 序列化(如 ObjectMapper),比 RedisTemplate 更可控、可读。


三、RedisIndexedSessionRepository ------ Spring Session 的 Redis 实现

🔹 定位

不是直接操作 Redis 的工具 ,而是 Spring Session 框架中将 HTTP Session 存储到 Redis 的实现类 ,用于分布式会话共享

🔹 引入依赖

xml 复制代码
<!-- Spring Session + Redis -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
<!-- 已包含 spring-boot-starter-data-redis,无需重复引入 -->

🔹 启用 Session 共享(关键!)

java 复制代码
@SpringBootApplication
@EnableRedisHttpSession  // 启用 Redis 存储 Session
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

🔹 配置(application.yml)

yml 复制代码
spring:
  session:
    store-type: redis
    timeout: 1800s  # Session 过期时间
  redis:
    host: localhost
    port: 6379

🔹 使用方式(和普通 HttpSession 一样!)

java 复制代码
@RestController
public class SessionController {

    @GetMapping("/login")
    public String login(HttpSession session) {
        session.setAttribute("user", "Alice");
        return "Logged in";
    }

    @GetMapping("/profile")
    public String profile(HttpSession session) {
        String user = (String) session.getAttribute("user");
        return "Hello " + user;
    }
}

🔹 特点

  • ✅ 透明替换 Tomcat 默认 Session
  • ✅ 支持集群环境 Session 共享
  • ✅ 自动处理 Session 过期、刷新
  • 不能用于普通缓存(只用于 HTTP Session)

四、三者对比总结

组件 用途 是否需手动操作 数据格式 典型场景
RedisTemplate 通用 Redis 操作 ✅ 是 二进制(默认) 缓存对象、复杂数据结构
StringRedisTemplate 字符串 Redis 操作 ✅ 是 可读字符串 缓存 JSON、计数器、简单 KV
RedisIndexedSessionRepository HTTP Session 存储到 Redis ❌ 否(自动) Spring Session 内部格式 分布式 Web 应用 Session 共享

五、常见误区澄清

❌ 误区1:RedisIndexedSessionRepository 是用来操作 Redis 的?

错! 它是 Spring Session 的内部实现,你只需要加 @EnableRedisHttpSession不要也不应该直接注入使用它

❌ 误区2:RedisTemplateStringRedisTemplate 更强大?

不一定!对于字符串场景,StringRedisTemplate 更简单、安全、可读。只有需要存复杂对象时才考虑 RedisTemplate(且要配好序列化)。

✅ 最佳实践建议:

  1. 普通缓存 → 用 StringRedisTemplate + JSON
  2. Web Session 共享 → 用 spring-session-data-redis + @EnableRedisHttpSession
  3. 避免直接使用 RedisTemplate 的默认序列化

六、扩展:自定义 RedisTemplate 序列化(推荐)

java 复制代码
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(factory);
    
    // 使用 JSON 序列化
    Jackson2JsonRedisSerializer<Object> serializer = 
        new Jackson2JsonRedisSerializer<>(Object.class);
    
    template.setValueSerializer(serializer);
    template.setKeySerializer(new StringRedisSerializer());
    template.afterPropertiesSet();
    
    return template;
}

这样 RedisTemplate 也能存可读的 JSON,但通常不如直接用 StringRedisTemplate + ObjectMapper 灵活。

相关推荐
汤姆yu3 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶3 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
biyezuopinvip4 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide5 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
figo10tf5 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva5 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露6 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
程序员敲代码吗6 小时前
Spring Boot与Tomcat整合的内部机制与优化
spring boot·后端·tomcat
NuageL6 小时前
原始Json字符串转化为Java对象列表/把中文键名变成英文键名
java·spring boot·json
jzheng86106 小时前
Spring Boot(快速上手)
java·spring boot·后端