SpringBoot 配置 Redis 这件事,表面看就是加个依赖、填几行配置,但真正在项目里跑起来之后,你会发现各种奇怪的问题:key 变成 \xAC\xED\x00\x05t... 的乱码、远程连不上 Redis、明明配置了连接池却还是超时、用 setnx 做分布式锁结果 key 永远不会过期。这篇文章我把整个配置链路从头到尾讲透,从环境准备到生产排错,全部基于我实际在项目里操作过的经验,适合刚接触 SpringBoot + Redis 的后端同学,也适合已经跑了很久但一直没搞明白“为什么这样配”的开发者。
1. 为什么都在说“SpringBoot 配 Redis”:先搞清它到底解决了什么问题
1.1 缓存不是唯一目的:Redis 在 SpringBoot 项目里的 5 种常见角色
很多人把 Redis 等同于“缓存”,其实在 SpringBoot 项目里,Redis 远不止缓存一个身份。我先梳理一下它在实际业务里最常见的 5 种角色:
- 热点数据缓存:比如首页商品列表、用户信息、配置字典。这类数据读多写少,直接放 Redis 里能显著降低数据库压力。
- 分布式会话存储:用
spring-session-data-redis把 Session 抽到 Redis 里,这样多实例部署时用户登录状态就能共享。 - 分布式锁:基于 Redis 的原子命令实现跨进程互斥,比如秒杀扣减库存、定时任务的唯一执行权。
- 计数器与限流:使用
INCR、EXPIRE实现访问次数统计、接口限流、验证码发送频率控制。 - 排行榜与延迟队列:
ZSet做排行榜非常方便,List+BRPOP可以做成简单的延迟队列,Stream也可以做消息队列。
这些角色看着各不相同,但底层依赖的是同一件事:Redis 命令的原子性、内存级的高速读写、以及丰富的数据结构。配置 Redis 如果只关注“缓存能不能用”,后面做分布式锁、做排行榜时会踩很多坑。所以我建议先把基础配置理解透彻,再谈场景。
1.2 一个完整的访问链路:从 Controller 到 Redis 再到 DB
我画一条最简单的链路各位就明白了。比如一个查商品详情的接口:
code复制客户端 -> Controller -> Service -> Redis 缓存查询
├── 命中:直接返回
└── 未命中:查询数据库 -> 回填 Redis -> 返回
这条链路里,Redis 的位置决定了几个关键配置:
- 序列化:Java 对象要存入 Redis,必须变成字节或字符串。如果用默认的 JDK 序列化,key 和 value 的可读性会非常差,排查问题时相当痛苦。
- 连接池大小:高并发下如果连接池 max-active 太小,大量请求会阻塞在获取连接上,接口 RT 飙升。
- 缓存过期策略:如果所有 key 过期时间一样,集中失效可能导致数据库被瞬间打爆,这就是后面要说的缓存雪崩。
- 原子性:做分布式锁时,加锁和设置过期时间必须是原子操作,否则中间一旦崩溃,锁就成了死锁。
所以,配置 Redis 不是“能连上就行”,而是要为一整套业务场景做好准备。理解了这条链路,再看下面的安装、配置、序列化、踩坑,你就能把每一块串联起来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:Redis 下载安装与 SpringBoot 版本的适配关系
2.1 Windows 本地开发环境
先说一个很多人不知道的事实:Redis 官方并没有发布 Windows 版本。Windows 上常见的安装包基本是微软老团队的移植版或者开源社区维护的版本。
本地开发时我有两种推荐做法:
第一种:直接用 Windows 移植版
可以在 GitHub 上搜索 tporadowski/redis,这个项目维护了基于 Redis 5.0 的 Windows 移植版,下载 zip 包后解压,直接运行:
bash复制redis-server.exe
默认端口 6379,启动成功会看到 Redis 的 ASCII logo 和 Running in standalone mode 提示。如果你不想每次手动启动,也可以注册成 Windows 服务:
bash复制redis-server.exe --service-install
redis-server.exe --service-start
第二种:用 WSL 或 Docker
如果你电脑装了 WSL,直接在 WSL 里执行:
bash复制sudo apt update
sudo apt install redis-server
sudo service redis-server start
这种方式就能跑 Linux 原生 Redis,和线上环境更一致。如果用 Docker:
bash复制docker run -d --name redis -p 6379:6379 redis:7
本地开发我其实更推荐 Docker,因为版本干净、卸载方便,还能一套配置在不同电脑间复用。
2.2 Linux 生产环境的 Redis 安装与守护进程
生产环境我一般情况下优先用系统包管理器安装,因为 apt/yum 源里的版本虽然不一定最新,但经过了比较充分的测试。
Ubuntu/Debian:
bash复制sudo apt update
sudo apt install redis-server -y
sudo systemctl enable redis-server
sudo systemctl start redis-server
CentOS/RHEL 7 以上:
bash复制sudo yum install epel-release -y
sudo yum install redis -y
sudo systemctl enable redis
sudo systemctl start redis
安装完成后,我建议第一时间检查几个点:
- bind 配置:默认配置文件里
bind 127.0.0.1 -::1只允许本机访问,远程连接必须修改。生产环境如果只是内网使用,可以绑定内网网卡 IP。 - requirepass:设置访
