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 灵活。

相关推荐
计算机毕设指导62 小时前
基于微信小程序的鸟博士系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
QQ_21696290963 小时前
Spring Boot大学生社团管理平台 【部署教程+可完整运行源码+数据库】
java·数据库·spring boot·微信小程序
是席木木啊3 小时前
Spring Boot 中 @Async 与 @Transactional 结合使用全解析:避坑指南
数据库·spring boot·oracle
阿拉斯攀登3 小时前
自定义 Spring Boot 自动配置
java·spring boot
appearappear4 小时前
Mac 上重新安装了Cursor 2.2.30,重新配置 springboot 过程记录
java·spring boot·后端
鹿角片ljp5 小时前
Spring Boot Web入门:从零开始构建web程序
前端·spring boot·后端
程序员阿鹏5 小时前
SpringBoot自动装配原理
java·开发语言·spring boot·后端·spring·tomcat·maven
老华带你飞5 小时前
工会管理|基于springboot 工会管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
Echo flower5 小时前
Spring Boot WebFlux 实现流式数据传输与断点续传
java·spring boot·后端