redis 默认配置可以快速启动服务,但生产环境还需要重点考虑持久化、安全认证、内存淘汰、连接数和故障恢复。本文基于一份完整的 redis.conf,逐项解释这些配置背后的作用,并给出启动验证方法。
本文示例适合学习、测试和内网部署。生产环境使用前,请结合机器内存、网络拓扑、数据重要性和业务访问模式调整。
一、准备工作
假设 redis 配置目录为:
/data/redis/conf
创建配置目录和数据目录:
mkdir -p /data/redis/conf mkdir -p /data chown -r redis:redis /data/redis /data
如果系统中没有 redis 用户,请根据实际运行用户调整权限。
二、创建 redis.conf
执行下面的命令:
cat > /data/redis/conf/redis.conf << 'eof' # 基础配置 port 6379 daemonize no pidfile /var/run/redis_6379.pid loglevel notice logfile "" # 持久化配置 - rdb save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data # 持久化配置 - aof appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes # 安全配置 requirepass admin123 masterauth admin123 # 性能优化 maxclients 10000 maxmemory 2gb maxmemory-policy allkeys-lru # 网络配置 bind 0.0.0.0 protected-mode yes tcp-backlog 511 timeout 0 tcp-keepalive 300 # 其他优化 databases 16 rename-command flushdb "" rename-command flushall "" rename-command config "" eof
检查文件:
sed -n '1,240p' /data/redis/conf/redis.conf
三、基础运行配置
1. 端口与进程模式
port 6379 daemonize no
redis 默认监听 9637 端口。多个实例需要使用不同端口。
daemonize no 表示前台运行,适合 docker、kubernetes 和 systemd 管理。容器需要主进程保持在前台,日志也可以统一输出到标准输出。
2. pid 与日志
pidfile /var/run/redis_6379.pid loglevel notice logfile ""
notice 是适合生产环境的日志级别。空日志文件名表示输出到标准输出。传统服务器如果需要文件日志,可以改为:
logfile "/data/redis/log/redis.log"
四、rdb 持久化
rdb 是 redis 的快照机制,会在满足条件时生成 dump.rdb。
save 900 1 save 300 10 save 60 10000
三条规则分别表示:
- 900 秒内至少有 1 次变化,执行快照;
- 300 秒内至少有 10 次变化,执行快照;
- 60 秒内至少有 10000 次变化,执行快照。
多个规则是“或”关系,满足任意一条即可触发。
stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data
快照失败时停止写入,可以尽早暴露磁盘空间、目录权限或文件系统问题。压缩可以节省磁盘,校验可以帮助发现文件损坏,生产环境通常建议开启。
rdb 文件通常位于:
/data/dump.rdb
需要确保目录存在、运行用户有写权限,并监控磁盘空间。
五、aof 持久化
aof 会记录 redis 执行过的写命令,通常比 rdb 具有更高的数据恢复精度。
appendonly yes appendfilename "appendonly.aof" appendfsync everysec
appendfsync 常见策略如下:
| 配置 | 说明 | 特点 |
|---|---|---|
always | 每条写命令同步 | 安全性最高,性能较低 |
everysec | 每秒同步一次 | 常见的平衡方案 |
no | 由操作系统决定 | 性能较高,安全性较低 |
everysec 发生机器宕机时通常最多丢失约 1 秒内的写入数据。
aof 重写相关配置:
no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes
aof 文件至少达到 64 mb,并且相比上次重写后增长 100% 时,会自动触发重写。aof 文件末尾不完整时,aof-load-truncated yes 会尝试截断损坏尾部并继续启动,但损坏部分的数据可能无法恢复。
较新的 redis 版本可能使用多个 aof 文件和清单文件,实际结构应以数据目录为准。
六、安全配置
1. 密码认证
requirepass admin123 masterauth admin123
客户端测试:
redis-cli -h 127.0.0.1 -p 6379 -a 'admin123' ping
预期返回:
pong
admin123 只能用于演示。生产环境必须替换为高强度随机密码,并避免将密码写入公开脚本或 shell 历史。
requirepass 控制普通客户端访问,masterauth 用于从节点连接主节点时认证。redis 新版本还可以使用 acl 为不同用户配置不同权限。
2. 网络暴露风险
bind 0.0.0.0 protected-mode yes
bind 0.0.0.0 表示监听所有网卡,会允许远程连接,但也会扩大攻击面。更安全的方式是绑定内网地址:
bind 127.0.0.1 192.168.1.10
如果必须监听所有网卡,应同时配置强密码、云安全组、防火墙白名单,并禁止公网访问 6379。保护模式不能替代网络隔离和访问控制。
七、内存与性能
maxclients 10000 maxmemory 2gb maxmemory-policy allkeys-lru
maxclients 表示最多允许约 10000 个客户端连接,但最终还受到文件描述符限制影响:
ulimit -n
maxmemory 2gb 限制 redis 数据使用的最大内存,但 aof 重写、rdb fork、复制缓冲区和客户端缓冲区都可能额外占用内存,因此不要把它设置到服务器总内存上限。
allkeys-lru 会从所有 key 中淘汰最近最少使用的数据,适合缓存场景。常见策略包括:
| 策略 | 说明 |
|---|---|
noeviction | 不淘汰,内存不足时写入报错 |
allkeys-lru | 从所有 key 中淘汰最近最少使用的数据 |
volatile-lru | 只从设置过期时间的 key 中淘汰 |
allkeys-lfu | 淘汰最不常使用的数据 |
volatile-ttl | 优先淘汰剩余 ttl 较短的数据 |
如果 redis 同时存储缓存和重要业务数据,不能简单使用 allkeys-lru,否则重要数据也可能被淘汰。
八、网络与逻辑数据库
tcp-backlog 511 timeout 0 tcp-keepalive 300 databases 16
tcp-backlog 控制连接队列大小,高并发场景还会受到操作系统 somaxconn 限制:
sysctl net.core.somaxconn
timeout 0 表示不主动关闭空闲连接,连接池场景下通常由客户端管理生命周期。tcp-keepalive 300 用于检测失效长连接。
redis 默认提供 16 个逻辑数据库,可以通过以下命令切换:
select 1
实际业务更推荐使用 key 前缀区分业务。redis cluster 通常只使用数据库 0。
九、禁用高风险命令
rename-command flushdb "" rename-command flushall "" rename-command config ""
这三行分别禁用当前库清空、所有库清空和动态修改配置,可以降低误操作风险。
但禁用 config 可能影响运维工具。rename-command 也不是完整的安全方案,生产环境更推荐结合 acl 做权限分级。
十、启动与验证
以前台方式启动:
redis-server /data/redis/conf/redis.conf
检查进程和端口:
ps -ef | grep redis-server ss -lntp | grep 6379
查看服务、内存和持久化状态:
redis-cli -h 127.0.0.1 -p 6379 -a 'admin123' info server redis-cli -h 127.0.0.1 -p 6379 -a 'admin123' info memory redis-cli -h 127.0.0.1 -p 6379 -a 'admin123' info persistence
验证高风险命令:
redis-cli -h 127.0.0.1 -p 6379 -a 'admin123' flushall
预期返回类似:
err unknown command 'flushall'
十一、常见问题
1. redis 无法打开 aof 文件
检查 /data 是否存在以及运行用户是否拥有写权限:
ls -ld /data chown -r redis:redis /data
2. 远程客户端无法连接
依次检查监听地址、防火墙、云安全组、容器端口映射、客户端密码和网络策略。redis 监听配置只是网络链路中的一个环节。
3. rdb 和 aof 是否必须同时开启
不一定。临时缓存可以根据业务容忍度关闭持久化;重要数据则应结合 rdb、aof、备份和恢复演练。两者同时开启可以兼顾恢复速度与数据完整性,但会增加磁盘 io 和管理复杂度。
4.maxmemory 2gb是否代表进程只占用 2 gb
不是。redis 还可能因为重写、fork、复制缓冲区和内部开销额外占用内存,服务器必须预留余量。
十二、生产环境检查清单
- 已设置强密码或 redis acl
- redis 没有直接暴露在公网
bind已限制为内网地址- 防火墙和安全组已设置白名单
/data目录权限正确- rdb 和 aof 文件有备份策略
- 磁盘空间有监控和告警
maxmemory小于服务器实际可用内存- 已选择合适的淘汰策略
- 已评估
maxclients与文件描述符限制 - 已确认禁用命令不影响运维工具
- 已测试 redis 重启后的数据恢复
- 已进行故障恢复演练
- 已固定 redis 软件或镜像版本
总结
redis 配置文件覆盖了服务运行、数据安全、故障恢复、内存管理和网络访问等多个方面。
本文的核心思路是:
- 使用前台模式运行,方便容器和进程管理;
- 结合 rdb 与 aof,提升数据恢复能力;
- 使用
everysec平衡 aof 安全性与性能; - 通过
maxmemory和淘汰策略控制内存; - 通过密码、网络白名单和禁用高风险命令降低风险;
- 使用监控、备份和恢复演练保障生产可靠性。
最后再次提醒:示例中的 admin123 只能用于演示。生产环境应替换为高强度密码,并结合内网隔离、防火墙、acl 和安全审计共同保护 redis。
到此这篇关于redis 生产环境配置文件 redis.conf 配置指南的文章就介绍到这了,更多相关redis redis-conf配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论