Docker 部署 Redis
快速启动
# 基本运行
docker run -d --name redis -p 6379:6379 redis:7-alpine
# 带数据持久化
docker run -d \
--name redis \
-p 6379:6379 \
-v redis_data:/data \
redis:7-alpine redis-server --appendonly yes
Docker Compose 部署
- 基础配置
- 生产配置
- 密码认证
version: '3.8'
services:
redis:
image: redis:7-alpine
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
volumes:
redis_data:
version: '3.8'
services:
redis:
image: redis:7-alpine
container_name: redis
restart: always
ports:
- "6379:6379"
environment:
TZ: Asia/Shanghai
volumes:
- redis_data:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf:ro
command: redis-server /usr/local/etc/redis/redis.conf
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
sysctls:
net.core.somaxconn: 1024
volumes:
redis_data:
version: '3.8'
services:
redis:
image: redis:7-alpine
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: >
redis-server
--appendonly yes
--requirepass ${REDIS_PASSWORD}
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
redis_data:
自定义配置
redis.conf
# 网络配置
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
# 内存配置
maxmemory 2gb
maxmemory-policy allkeys-lru
# 持久化配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
save 900 1
save 300 10
save 60 10000
# 慢查询日志
slowlog-log-slower-than 10000
slowlog-max-len 128
# 密码
requirepass your_password
# 禁用危险命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG ""
常用命令
# 连接 Redis
docker exec -it redis redis-cli
docker exec -it redis redis-cli -a your_password
# 查看信息
docker exec redis redis-cli INFO
docker exec redis redis-cli INFO stats
# 查看键
docker exec redis redis-cli KEYS "*"
docker exec redis redis-cli DBSIZE
# 监控命令
docker exec redis redis-cli MONITOR
# 备份
docker exec redis redis-cli SAVE
docker exec redis redis-cli BGSAVE
主从复制
version: '3.8'
services:
redis-master:
image: redis:7-alpine
container_name: redis-master
ports:
- "6379:6379"
volumes:
- redis_master_data:/data
command: redis-server --appendonly yes
redis-slave:
image: redis:7-alpine
container_name: redis-slave
ports:
- "6380:6379"
volumes:
- redis_slave_data:/data
command: redis-server --slaveof redis-master 6379 --appendonly yes
depends_on:
- redis-master
volumes:
redis_master_data:
redis_slave_data:
Redis Cluster
version: '3.8'
services:
redis-1:
image: redis:7-alpine
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
ports:
- "7001:6379"
volumes:
- redis_1:/data
redis-2:
image: redis:7-alpine
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
ports:
- "7002:6379"
volumes:
- redis_2:/data
redis-3:
image: redis:7-alpine
command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
ports:
- "7003:6379"
volumes:
- redis_3:/data
volumes:
redis_1:
redis_2:
redis_3:
最佳实践
最佳实践
- ✅ 使用密码保护 Redis
- ✅ 限制最大内存使用
- ✅ 启用持久化(AOF + RDB)
- ✅ 禁用危险命令
- ✅ 监控内存使用率
- ✅ 使用连接池
- ✅ 设置合理的超时时间