当前位置: 代码网 > it编程>数据库>Redis > Redis 生产环境配置文件 redis.conf 配置指南

Redis 生产环境配置文件 redis.conf 配置指南

2026年09月11日 Redis 我要评论
redis 默认配置可以快速启动服务,但生产环境还需要重点考虑持久化、安全认证、内存淘汰、连接数和故障恢复。本文基于一份完整的 redis.conf,逐项解释这些配置背后的作用,并给出启动验证方法。本

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 配置文件覆盖了服务运行、数据安全、故障恢复、内存管理和网络访问等多个方面。

本文的核心思路是:

  1. 使用前台模式运行,方便容器和进程管理;
  2. 结合 rdb 与 aof,提升数据恢复能力;
  3. 使用 everysec 平衡 aof 安全性与性能;
  4. 通过 maxmemory 和淘汰策略控制内存;
  5. 通过密码、网络白名单和禁用高风险命令降低风险;
  6. 使用监控、备份和恢复演练保障生产可靠性。

最后再次提醒:示例中的 admin123 只能用于演示。生产环境应替换为高强度密码,并结合内网隔离、防火墙、acl 和安全审计共同保护 redis。

到此这篇关于redis 生产环境配置文件 redis.conf 配置指南的文章就介绍到这了,更多相关redis redis-conf配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com