RedisTemplate、StringRedisTemplate和RedisIndexedSessionRepository是 Spring 生态中与 Redis 交互的三个不同层级的组件,用途完全不同 。下面从 定位、依赖、使用方式、适用场景 四个维度详细对比:
### 文章目录
- [@[toc]](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [一、`RedisTemplate` ------ 通用 Redis 操作模板](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 定位](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 引入依赖(Maven)](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 配置(application.yml)](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 使用示例](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 特点](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [二、`StringRedisTemplate` ------ 专用于字符串操作](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 定位](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 引入依赖](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 使用示例](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 特点](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [三、`RedisIndexedSessionRepository` ------ Spring Session 的 Redis 实现](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 定位](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 引入依赖](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 启用 Session 共享(关键!)](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 配置(application.yml)](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 使用方式(和普通 HttpSession 一样!)](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [🔹 特点](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [四、三者对比总结](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [五、常见误区澄清](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [❌ 误区1:`RedisIndexedSessionRepository` 是用来操作 Redis 的?](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [❌ 误区2:`RedisTemplate` 比 `StringRedisTemplate` 更强大?](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [✅ 最佳实践建议:](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 RedisTemplate 序列化(推荐)) - [六、扩展:自定义 RedisTemplate 序列化(推荐)](#文章目录 @[toc] 一、
RedisTemplate—— 通用 Redis 操作模板 🔹 定位 🔹 引入依赖(Maven) 🔹 配置(application.yml) 🔹 使用示例 🔹 特点 二、StringRedisTemplate—— 专用于字符串操作 🔹 定位 🔹 引入依赖 🔹 使用示例 🔹 特点 三、RedisIndexedSessionRepository—— Spring Session 的 Redis 实现 🔹 定位 🔹 引入依赖 🔹 启用 Session 共享(关键!) 🔹 配置(application.yml) 🔹 使用方式(和普通 HttpSession 一样!) 🔹 特点 四、三者对比总结 五、常见误区澄清 ❌ 误区1:RedisIndexedSessionRepository是用来操作 Redis 的? ❌ 误区2:RedisTemplate比StringRedisTemplate更强大? ✅ 最佳实践建议: 六、扩展:自定义 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:RedisTemplate 比 StringRedisTemplate 更强大?
不一定!对于字符串场景,
StringRedisTemplate更简单、安全、可读。只有需要存复杂对象时才考虑RedisTemplate(且要配好序列化)。
✅ 最佳实践建议:
- 普通缓存 → 用
StringRedisTemplate+ JSON - Web Session 共享 → 用
spring-session-data-redis+@EnableRedisHttpSession - 避免直接使用
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 灵活。