Spring Boot 和 Redis 这对组合,基本是 Java 后端开发绕不开的标配。缓存、分布式锁、排行榜、消息队列,Redis 几乎成了业务系统里最趁手的“瑞士军刀”。这篇文章我打算把整合步骤完完整整捋一遍,从 Redis 本地安装开始,到 Spring Boot 里配置 RedisTemplate、缓存注解、分布式锁、Redis Stream,再到常见的连接工具选型和问题排查,一条线走到底。无论你是刚接触 Redis 的新人,还是准备在项目里引入 Redis 但被各种“序列化报错”折磨过的开发,这篇文章应该都能给你省下不少时间。
我最早接触 Redis 是在一个电商项目里,当时从 Windows 上装 Redis 就折腾了一下午,后来又因为没配置序列化器导致 key 全部变成二进制乱码,真正把 RedisTemplate 用顺手之后才发现,绝大多数问题都不是 Redis 本身的问题,而是整合细节没做到位。这篇就按我的实际操作顺序来写,尽量把每个“为什么”也讲清楚,这样你照做之后还能举一反三。
1. 整合前的准备工作:先让 Redis 跑起来
1.1 本地安装:Windows 跟 Linux 的两条路
很多人一上来就卡在第一步:Redis 官方其实不提供 Windows 安装包。搜索热词里“redis下载”“windows安装redis”“redis安装教程”出现频率很高,说明这一关确实劝退不少人。你如果在生产环境用 Windows 服务器,这种场景本身少见,本地开发的话有两条比较省心的路。
第一条路是 Windows 上装 WSL2(Windows Subsystem for Linux),在 Ubuntu 里直接 sudo apt install redis-server,装完就一个 redis-server 命令的事。这种方式最接近生产环境,我推荐优先用。第二条路是直接用 Docker Desktop,跑一个 Redis 容器,命令特别简单:
bash复制docker run -d -p 6379:6379 --name redis redis:7.2 redis-server --appendonly yes
这里我把持久化也开上了,--appendonly yes 对应的就是 AOF 持久化,开发环境建议开着,省得 Redis 一重启数据全没了,排查问题的时候还得琢磨“我明明 set 了,怎么又不见了”。
Linux 环境就更直接了,CentOS 或 Ubuntu 上用包管理器安装,或者去 Redis 官网下载源码包编译安装。编译安装的话注意把 make test 跑一遍,能排除一部分环境兼容问题。另外官方最近已经发布了 8.x 版本,但生产环境通常还在用 7.x,这篇内容用 7.x 没问题,整合步骤在 8.x 上依然适用。
装完之后别急着走,先验证一下服务是否正常:
bash复制redis-cli ping
如果返回 PONG,说明服务是通的。这一步虽然简单,但能帮你把“Redis 本身的问题”和“Spring Boot 整合的问题”在第一时间切分开,排查效率会高很多。
1.2 引入依赖和项目配置
服务启动之后,回到 Spring Boot 工程里。你只需要引入一个起步依赖:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Spring Boot 2.x 和 3.x 默认使用 Lettuce 作为 Redis 客户端,不需要额外引入 Jedis。如果你要使用连接池,还需要引入 commons-pool2:
xml复制<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
这一步很容易漏,没加 commons-pool2 但又在配置里写了连接池参数,启动时会因为找不到连接池类而报错。这个坑我踩过一次,后来就习惯了“引入 starter 的同时顺手把 pool 依赖也带上”。
接下来是配置文件。这里要特别提醒一个版本差异:Spring Boot 2.x 的配置前缀是 spring.redis,到了 Spring Boot 3.x 就改成了 spring.data.redis。网上很多老教程用的还是 spring.redis,你如果照抄到 3.x 项目里会发现启动时配置不生效,连接还是默认的 localhost:6379。正确的 3.x 写法是这样的:
yaml复制spring:
data:
redis:
host: 127.0.0.1
port: 6379
password: 你的密码(没有就删掉这行)
database: 0
timeout: 3s
lettuce:
pool:
max-active: 16
max-idle: 8
min-idle: 0
max-wait: 3s
max-active 是连接池最大连接数,max-idle 是最大空闲连接数,max-wait 是拿连接的最大等待时间。这些参数不是越大越好,连接数开太多反而会占用 Redis 服务端的文件描述符,一般业务系统 max-active 在 16~32 之间就够用了,你需要压测时再调。
1.3 序列化策略:这一步千万别省
很多新手第一次用 RedisTemplate 写入数据,然后用可视化工具一看,发现 key 变成了一长串类似 \xac\xed\x00\x05t\x00... 的乱码,value 也没
