1. 概述
Spring Boot 的一大优势在于,它能将第三方组件的配置简化为寥寥几个属性。
本文将重点讲解 Spring Boot 是如何简化 Redis 集成的。通过少量配置即可快速接入 Redis,无论是作为缓存、数据库还是消息中间件,都能轻松搞定。
2. 为什么选择 Redis?
Redis 是目前最流行的内存数据结构存储系统之一。它不仅仅是一个缓存工具,还可以作为:
- ✅ 数据库(支持丰富数据类型)
- ✅ 缓存层(高性能读写)
- ✅ 消息代理(支持发布/订阅)
在性能方面,Redis 以响应速度快著称,官方基准测试显示其每秒可处理数十万次操作,且具备良好的水平扩展能力。
⚠️ 更重要的是,Redis 与 Spring Boot 生态集成非常顺畅。例如:
- 微服务架构中用作分布式缓存
- 替代轻量级 NoSQL 场景下的数据库
- 实现会话共享(Session Sharing)
3. 启动 Redis 实例
为了快速开始,推荐使用官方 Docker 镜像来启动一个本地 Redis 服务。
$ docker run -p 16379:6379 -d redis:6.0 redis-server --requirepass "mypass"
✅ 说明:
- 映射宿主机端口
16379
到容器的6379
- 设置访问密码为
mypass
- 使用稳定版本
6.0
这样我们就有了一个带密码保护的 Redis 服务,适合本地开发和测试。
4. 添加 Starter 依赖
Spring 对 Redis 的支持主要通过 Spring Data Redis 实现。我们只需引入对应的 Starter 即可自动装配相关组件。
Maven 依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.11</version>
</dependency>
✅ 引入后,Spring Boot 会自动配置:
RedisConnectionFactory
- 默认的
RedisTemplate
- Lettuce 客户端(默认实现)
无需手动初始化连接池或客户端,真正做到开箱即用。
5. 客户端选择:Lettuce
Spring Boot 默认使用 Lettuce 作为 Redis 客户端,而不是老一代的 Jedis。
区别简要对比:
特性 | Lettuce | Jedis |
---|---|---|
连接模式 | 基于 Netty,支持异步和响应式 | 多线程下需连接池 |
线程安全 | ✅ 单连接可共享 | ❌ 每线程需独立连接 |
Reactive 支持 | ✅ 完整支持 | ❌ 不支持 |
虽然你可以切换为 Jedis,但除非有特殊需求,否则建议保持默认的 Lettuce。
自定义 RedisTemplate
尽管自动配置已足够,但在实际项目中通常需要自定义序列化方式等设置:
@Bean
public RedisTemplate<Long, Book> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Long, Book> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
// 设置 key 和 value 的序列化器(避免乱码或类加载问题)
template.setKeySerializer(new GenericJackson2JsonRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
⚠️ 踩坑提示:默认的 JDK 序列化容易导致跨服务反序列化失败,建议统一使用 JSON 序列化(如 GenericJackson2JsonRedisSerializer
)。
6. 配置属性详解
使用 Lettuce 时,无需手动配置 RedisConnectionFactory
—— Spring Boot 会根据 application.properties
或 application.yml
自动完成。
Spring Boot 2.x 配置方式
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=16379
spring.redis.password=mypass
spring.redis.timeout=60000
Spring Boot 3.x 配置方式(注意命名空间变化)
spring.data.redis.database=0
spring.data.redis.host=localhost
spring.data.redis.port=16379
spring.data.redis.password=mypass
spring.data.redis.timeout=60000
📌 属性含义一览:
属性 | 说明 |
---|---|
database |
使用的 Redis 数据库索引(默认 0) |
host |
Redis 服务器地址 |
port |
服务监听端口 |
password |
认证密码(如有) |
timeout |
连接超时时间(毫秒) |
✅ 提示:完整配置项可参考 Spring Boot 官方文档 - Data Properties,包括连接池、SSL、集群等高级选项。
7. 实战示例:操作 Redis 数据
假设我们有一个 Book
实体类和对应的 BookRepository
,可以通过 RedisTemplate
快速实现增删改查。
@Autowired
private RedisTemplate<Long, Book> redisTemplate;
public void save(Book book) {
redisTemplate.opsForValue().set(book.getId(), book);
}
public Book findById(Long id) {
return redisTemplate.opsForValue().get(id);
}
关键点解析:
opsForValue()
:操作字符串类型(对应 Redis 的SET/GET
)- ✅ Lettuce 默认处理序列化/反序列化(前提是配置了合适的序列化器)
- ✅
RedisTemplate
是线程安全的,可在多线程环境下安全使用(如高并发缓存场景)
扩展建议
除了 ValueOperations
,还有:
ListOperations
→ 操作 listSetOperations
→ 操作 setZSetOperations
→ 操作有序集合HashOperations
→ 操作 hash
可根据业务场景灵活选用。
8. 总结
本文展示了如何通过 Starter + 少量属性 + 可选 Bean 配置,快速集成 Redis 到 Spring Boot 应用中。
核心要点回顾:
- ✅ 使用
spring-boot-starter-data-redis
开箱即用 - ✅ 默认客户端为 Lettuce,性能更强、支持响应式
- ✅ 配置集中在
application.properties
,Spring Boot 自动装配 - ✅ 推荐自定义
RedisTemplate
的序列化策略,避免踩坑 - ✅
RedisTemplate
线程安全,适合高并发场景
简单粗暴地说:只要配好 host/port/password,剩下的交给 Spring 就行了。
对于大多数应用场景,这种基于属性的配置方式已经完全够用,既简洁又高效。