Docker 部署 Redis
Redis 是高性能的内存数据库,常用于缓存、会话存储、消息队列。
快速开始
单机部署
docker run -d \
--name redis \
-p 6379:6379 \
-v redis-data:/data \
redis:7-alpine \
redis-server --appendonly yes
带密码部署
docker run -d \
--name redis \
-p 6379:6379 \
-v redis-data:/data \
redis:7-alpine \
redis-server --appendonly yes --requirepass 123456
使用配置文件
1. 创建配置文件
mkdir -p /etc/redis/conf
cat > /etc/redis/conf/redis.conf << EOF
# 绑定地址
bind 0.0.0.0
# 端口
port 6379
# 密码
requirepass 123456
# 持久化
appendonly yes
appendfilename "appendonly.aof"
# 内存限制
maxmemory 1gb
maxmemory-policy allkeys-lru
# 日志
loglevel notice
logfile "/data/redis.log"
EOF
2. 启动容器
docker run -d \
--name redis \
-p 6379:6379 \
-v /etc/redis/conf/redis.conf:/etc/redis/redis.conf \
-v redis-data:/data \
redis:7-alpine \
redis-server /etc/redis/redis.conf
集群部署
Redis Sentinel(哨兵)
version: '3.8'
services:
redis-master:
image: redis:7-alpine
container_name: redis-master
ports:
- "6379:6379"
command: redis-server --appendonly yes --requirepass 123456
redis-slave1:
image: redis:7-alpine
container_name: redis-slave1
ports:
- "6380:6379"
command: redis-server --appendonly yes --requirepass 123456 --slaveof redis-master 6379
redis-slave2:
image: redis:7-alpine
container_name: redis-slave2
ports:
- "6381:6379"
command: redis-server --appendonly yes --requirepass 123456 --slaveof redis-master 6379
sentinel:
image: redis:7-alpine
container_name: redis-sentinel
ports:
- "26379:26379"
volumes:
- ./sentinel.conf:/etc/redis/sentinel.conf
command: redis-sentinel /etc/redis/sentinel.conf
Redis Cluster
version: '3.8'
services:
redis-node1:
image: redis:7-alpine
container_name: redis-node1
ports:
- "6379:6379"
command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000
redis-node2:
image: redis:7-alpine
container_name: redis-node2
ports:
- "6380:6379"
command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000
redis-node3:
image: redis:7-alpine
container_name: redis-node3
ports:
- "6381:6379"
command: redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000
常用命令
# 连接 Redis
docker exec -it redis redis-cli -a 123456
# 查看信息
docker exec -it redis redis-cli -a 123456 INFO
# 查看内存
docker exec -it redis redis-cli -a 123456 INFO memory
# 查看连接数
docker exec -it redis redis-cli -a 123456 INFO clients
# 清空数据
docker exec -it redis redis-cli -a 123456 FLUSHALL
运维建议
| 建议 | 说明 |
|---|---|
| 持久化 | 启用 AOF 持久化 |
| 密码 | 生产环境必须设置密码 |
| 内存限制 | 设置 maxmemory 限制 |
| 备份 | 定期备份数据 |
| 监控 | 监控内存、连接数、命中率 |
故障排查
| 问题 | 解决方案 |
|---|---|
| 连接失败 | 检查端口、密码配置 |
| 内存不足 | 增加 maxmemory 或清理数据 |
| 持久化失败 | 检查磁盘空间 |
| 性能问题 | 检查慢查询日志 |