Docker Compose企业实战系列(四):Redis生产级部署|密码加固、持久化、内存优化完整方案
前言
前三篇我们完成了:LNMP环境、SpringBoot后端、Vue前端全套容器化部署。
在前后端项目中,Redis 承担缓存、会话、限流、热点数据、分布式锁等核心功能。
很多人 Compose 部署的 Redis 都是“开发裸奔版”:
无密码、公网可直接连接
不做持久化,重启数据全丢
不限制内存,导致服务器内存打满
无淘汰策略,缓存雪崩、内存溢出
本篇直接给大家一套可直接上线的 Redis 生产级 Compose 模板:密码安全 + 双持久化 + 内存限制 + LRU淘汰 + 日志规范,零废话、全落地。
一、生产 Redis 必须具备的 4 个条件
不满足下面四条,一律不允许上生产:
开启密码认证,禁止空密码裸奔
开启AOF持久化,保证重启不丢数据
限制最大内存,防止Redis吃光服务器资源
配置内存淘汰策略,避免缓存溢出
二、完整目录结构
full-stack-docker/ ├── .env ├── docker-compose.yml ├── app/ # SpringBoot后端 ├── web/ # Vue前端 ├── mysql/ │ └── data/ └── redis/ └── data/ # Redis持久化数据目录三、.env 环境变量配置
统一管理密码与版本,避免硬编码,直接复制:
# MySQL MYSQL_ROOT_PASSWORD=root123456 MYSQL_DATABASE=spring_db MYSQL_USER=appuser MYSQL_PASSWORD=app123456 # Redis 生产核心配置 REDIS_PASSWORD=Redis@2026 REDIS_MAX_MEMORY=256mb # 镜像版本 MYSQL_VERSION=8.0 REDIS_VERSION=7.2-alpine四、生产级 Redis Compose 完整配置(核心)
这是最终上线版本,整合所有生产优化,直接覆盖你的docker-compose.yml:
version:'3.8'services:# MySQL 保持不变mysql:image:mysql:${MYSQL_VERSION}ports:-"3306:3306"volumes:-./mysql/data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD:${MYSQL_ROOT_PASSWORD}MYSQL_DATABASE:${MYSQL_DATABASE}MYSQL_USER:${MYSQL_USER}MYSQL_PASSWORD:${MYSQL_PASSWORD}restart:alwaysnetworks:-full-net# Redis 生产级配置(本篇重点)redis:image:redis:${REDIS_VERSION}ports:-"6379:6379"volumes:-./redis/data:/data# 生产核心启动参数command:>redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes --maxmemory ${REDIS_MAX_MEMORY} --maxmemory-policy allkeys-lru --databases 16restart:alwaysnetworks:-full-net# SpringBoot后端springboot-service:build:./appports:-"8080:8080"depends_on:-mysql-redisrestart:alwaysnetworks:-full-net# Vue前端web:build:./webports:-"80:80"depends_on:-springboot-servicerestart:alwaysnetworks:-full-netnetworks:full-net:driver:bridge五、逐条讲解生产核心参数(看懂就不会踩坑)
1. --requirepass 密码
强制密码登录,杜绝公网裸奔攻击。
生产红线:绝对不允许空密码 Redis 暴露端口。
2. --appendonly yes(AOF持久化)
记录每一条写入命令,容器重启、宕机恢复数据不丢失。
默认关闭,关闭后重启所有缓存清空,生产必开。
3. --maxmemory 内存限制
限制 Redis 最大占用内存,示例256mb,根据服务器配置自行调整。
防止缓存无限新增、内存溢出、打满服务器导致整机卡顿。
4. --maxmemory-policy allkeys-lru
生产最优选淘汰策略:优先淘汰最近最少使用的缓存,保证热点数据常驻内存。
完美适配业务缓存场景,有效避免缓存雪崩。
5. --databases 16
开启16个数据库,兼容日常业务分库使用。
六、SpringBoot 适配生产 Redis 配置
你的application.yml直接复制,适配密码+远程容器网络:
spring:redis:host:redisport:6379password:${REDIS_PASSWORD:Redis@2026}database:0timeout:10000mslettuce:pool:max-active:8max-idle:8min-idle:2重点:Compose 同一网络直接使用服务名 redis通信,不需要 IP。
七、启动与验证命令
1. 重启服务生效配置
dockercompose up-d--build2. 进入 Redis 验证密码与持久化
# 进入redis客户端dockerexec-it容器名 redis-cli# 认证密码AUTH Redis@2026# 写入测试数据settest_key123456# 退出重启容器后再次查看,数据依旧存在八、生产环境安全避坑(必看)
禁止公网直接暴露6379端口:高危漏洞,极易被挖矿攻击
密码必须复杂:杜绝 123456、root 等弱密码
必须开启AOF持久化:开发可关,生产必开
必须限制内存:防止OOM拖垮服务器
不要随意使用flushall:生产误删无法恢复
九、本篇总结
本篇完成了Redis 完整生产级容器化部署,彻底告别开发裸奔配置:
✅ 密码安全加固,杜绝裸奔攻击
✅ AOF持久化,重启数据不丢
✅ 内存上限控制,保护服务器资源
✅ LRU淘汰策略,适配真实业务缓存
现在你的整套前后端项目:Nginx前端 + SpringBoot后端 + MySQL数据 + Redis缓存全部达到可上线标准。
下期预告
Docker Compose企业实战系列(五):Nginx反向代理与负载均衡实战
手把手配置域名代理、跨域统一处理、多服务负载均衡、静态缓存优化,完成企业级网关配置。