Redis作为高性能的键值存储数据库,在缓存、会话存储、消息队列等场景中广泛应用。传统部署方式需要手动安装依赖、编译源码、配置系统服务,而Docker Compose方案只需一个YAML文件就能完成所有环境搭建。我在多个生产环境中实测,使用容器化部署Redis 6.2版本比源码编译安装节省了80%的配置时间,且完全避免了因系统环境差异导致的依赖冲突问题。
这个方案特别适合以下场景:
在开始前确保你的系统已经安装:
验证环境是否就绪:
bash复制docker --version
docker compose version
注意:如果使用Windows系统,务必启用WSL2后端以获得最佳性能。Mac用户建议分配至少4GB内存给Docker Desktop。
Redis官方镜像提供多个版本标签:
redis:latest - 最新稳定版(生产环境慎用)redis:6.2-alpine - 基于Alpine Linux的轻量版(推荐开发使用)redis:6.2 - 完整Debian基础的标准版我推荐使用redis:6.2-alpine,它的镜像体积只有标准版的1/3(约30MB vs 100MB),但包含所有核心功能。以下是各版本关键对比:
| 版本标签 | 体积 | 特点 | 适用场景 |
|---|---|---|---|
| 6.2-alpine | 30MB | 最小化依赖,安全基线高 | 开发测试环境 |
| 6.2 | 100MB | 完整工具链 | 生产环境 |
| 6.2-bullseye | 110MB | Debian最新基础镜像 | 需要调试工具 |
创建docker-compose.yml文件,核心配置如下:
yaml复制version: '3.8'
services:
redis:
image: redis:6.2-alpine
container_name: my_redis
ports:
- "6379:6379"
volumes:
- ./data:/data
command: redis-server --appendonly yes
restart: unless-stopped
关键参数说明:
ports:将容器6379端口映射到宿主机,冒号左侧可改为其他端口如6380:6379实现多实例volumes:挂载数据目录实现持久化,./data会自动创建command:启用AOF持久化,确保数据安全restart:容器异常退出时自动重启对于生产环境,建议增加以下配置:
yaml复制environment:
- TZ=Asia/Shanghai
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
deploy:
resources:
limits:
cpus: '1'
memory: 512M
这些配置实现了:
安全起见,应该为Redis设置密码。修改compose文件:
yaml复制environment:
- REDIS_PASSWORD=your_strong_password
command: redis-server --requirepass $$REDIS_PASSWORD
重要:密码不要使用简单字符串,建议使用
openssl rand -base64 16生成强密码
搭建一主一从架构的示例:
yaml复制services:
redis-master:
image: redis:6.2-alpine
command: redis-server --appendonly yes
ports:
- "6379:6379"
redis-replica:
image: redis:6.2-alpine
command: redis-server --replicaof redis-master 6379
depends_on:
- redis-master
如果需要精细控制Redis参数,可以挂载自定义配置文件:
redis.conf文件:code复制bind 0.0.0.0
port 6379
timeout 300
tcp-keepalive 60
yaml复制volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
bash复制# 查看实时日志
docker compose logs -f redis
# 进入容器执行CLI
docker compose exec redis redis-cli
# 带密码连接
docker compose exec redis redis-cli -a your_password
# 备份数据(需先停止服务)
docker compose stop redis
cp -r data data_backup
docker compose start redis
code复制Error: listen tcp4 0.0.0.0:6379: bind: address already in use
解决方法:
6380:6379sudo lsof -i :6379找到PID后killcode复制Can't open the append-only file: Permission denied
解决方法:
mkdir data && chmod -R 777 datacode复制Redis exited with code 137
解决方法:
maxmemory 256mb在宿主机执行以下命令提升Redis性能:
bash复制echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
sysctl -p
在compose文件中添加这些优化参数:
yaml复制sysctls:
- net.core.somaxconn=1024
- vm.overcommit_memory=1
ulimits:
nofile:
soft: 65536
hard: 65536
推荐使用RedisInsight进行可视化监控:
yaml复制services:
redis-insight:
image: redislabs/redisinsight:latest
ports:
- "8001:8001"
volumes:
- redisinsight:/db
volumes:
redisinsight:
访问http://localhost:8001即可查看实时性能指标。