Docker Compose企业实战系列(四):Redis生产级部署|密码加固、持久化、内存优化完整方案
前言
前三篇我们完成了:LNMP环境、SpringBoot后端、Vue前端全套容器化部署。
在前后端项目中,Redis 承担缓存、会话、限流、热点数据、分布式锁等核心功能。
很多人 Compose 部署的 Redis 都是"开发裸奔版":
-
无密码、公网可直接连接
-
不做持久化,重启数据全丢
-
不限制内存,导致服务器内存打满
-
无淘汰策略,缓存雪崩、内存溢出
本篇直接给大家一套可直接上线的 Redis 生产级 Compose 模板:密码安全 + 双持久化 + 内存限制 + LRU淘汰 + 日志规范,零废话、全落地。
一、生产 Redis 必须具备的 4 个条件
不满足下面四条,一律不允许上生产:
-
开启密码认证,禁止空密码裸奔
-
开启AOF持久化,保证重启不丢数据
-
限制最大内存,防止Redis吃光服务器资源
-
配置内存淘汰策略,避免缓存溢出
二、完整目录结构
plain
full-stack-docker/
├── .env
├── docker-compose.yml
├── app/ # SpringBoot后端
├── web/ # Vue前端
├── mysql/
│ └── data/
└── redis/
└── data/ # Redis持久化数据目录
三、.env 环境变量配置
统一管理密码与版本,避免硬编码,直接复制:
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:
yaml
version: '3.8'
services:
# MySQL 保持不变
mysql:
image: mysql:${MYSQL_VERSION}
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
networks:
- 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 16
restart: always
networks:
- full-net
# SpringBoot后端
springboot-service:
build: ./app
ports:
- "8080:8080"
depends_on:
- mysql
- redis
restart: always
networks:
- full-net
# Vue前端
web:
build: ./web
ports:
- "80:80"
depends_on:
- springboot-service
restart: always
networks:
- full-net
networks:
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 直接复制,适配密码+远程容器网络:
yaml
spring:
redis:
host: redis
port: 6379
password: ${REDIS_PASSWORD:Redis@2026}
database: 0
timeout: 10000ms
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 2
重点:Compose 同一网络直接使用 服务名 redis 通信,不需要 IP。
七、启动与验证命令
1. 重启服务生效配置
bash
docker compose up -d --build
2. 进入 Redis 验证密码与持久化
bash
# 进入redis客户端
docker exec -it 容器名 redis-cli
# 认证密码
AUTH Redis@2026
# 写入测试数据
set test_key 123456
# 退出重启容器后再次查看,数据依旧存在
八、生产环境安全避坑(必看)
-
禁止公网直接暴露6379端口:高危漏洞,极易被挖矿攻击
-
密码必须复杂:杜绝 123456、root 等弱密码
-
必须开启AOF持久化:开发可关,生产必开
-
必须限制内存:防止OOM拖垮服务器
-
不要随意使用flushall:生产误删无法恢复
九、本篇总结
本篇完成了 Redis 完整生产级容器化部署,彻底告别开发裸奔配置:
-
✅ 密码安全加固,杜绝裸奔攻击
-
✅ AOF持久化,重启数据不丢
-
✅ 内存上限控制,保护服务器资源
-
✅ LRU淘汰策略,适配真实业务缓存
现在你的整套前后端项目:Nginx前端 + SpringBoot后端 + MySQL数据 + Redis缓存 全部达到可上线标准。
下期预告
Docker Compose企业实战系列(五):Nginx反向代理与负载均衡实战
手把手配置域名代理、跨域统一处理、多服务负载均衡、静态缓存优化,完成企业级网关配置。