在生产环境中,Redis 服务器通常持续运行以支持高并发业务。当业务量突增或系统架构调整时,往往需要调整运行参数(如最大内存、连接数限制)。传统的修改配置文件并重启的方式会造成服务中断,这在关键时刻是不可接受的。使用 CONFIG SET 命令,可以在不停止服务的情况下,动态修改大部分配置参数,并配合 CONFIG REWRITE 实现配置持久化,真正实现“热更新”。
1. 连接到 Redis 服务器
打开终端或命令行工具。
输入以下命令连接到本地 Redis 服务:
redis-cli
如果 Redis 服务部署在远程服务器或设置了密码,使用以下格式:
redis-cli -h 127.0.0.1 -p 6379 -a "yourpassword"
2. 查看当前配置参数
在修改之前,通常需要确认参数的当前值。执行 CONFIG GET 命令配合通配符 * 可以查看所有配置,或者指定具体参数名查看。
查看当前的最大内存限制设置:
CONFIG GET maxmemory
该命令会返回两行:第一行是参数名,第二行是参数值(通常以字节为单位)。如果返回值为 0,表示没有内存限制。
3. 动态修改配置参数
使用 CONFIG SET 命令可以立即修改配置。修改后的配置会立即生效,且存储在内存中。
假设我们需要将最大内存限制设置为 2GB。执行以下命令:
CONFIG SET maxmemory 2147483648
注意:参数值的单位通常是字节。2GB 换算成字节约为 2147483648。部分参数也支持直接写单位,如 2gb,但为了精确,推荐使用数值。
验证修改是否成功:
CONFIG GET maxmemory
此时返回的数值应已更新为 2147483648。
4. 使配置持久化(重要)
上述步骤仅修改了内存中的配置。如果 Redis 服务重启,参数会恢复到 redis.conf 文件中的旧值。为了防止重启失效,必须将内存中的配置写入磁盘的配置文件中。
执行 CONFIG REWRITE 命令:
CONFIG REWRITE
该命令会自动扫描 redis.conf 文件。如果配置文件中已经存在该参数,它会更新该值;如果不存在,它会在文件末尾追加该配置。此过程不会破坏原文件的注释和其他结构。
5. 常用动态参数速查表
以下列出了生产环境中最常需要动态修改的参数。
| 参数名 | 作用说明 | 常用修改示例 | 注意事项 |
|---|---|---|---|
maxmemory |
设置 Redis 可用最大内存限制 | CONFIG SET maxmemory 1073741824 |
设置为 0 表示不限制。需配合淘汰策略使用。 |
maxmemory-policy |
内存达到上限时的淘汰策略 | CONFIG SET maxmemory-policy allkeys-lru |
常用值包括 volatile-lru、allkeys-lru 等。 |
timeout |
客户端空闲多少秒后关闭连接 | CONFIG SET timeout 300 |
设置为 0 表示永不关闭。 |
maxclients |
设置同时连接的最大客户端数量 | CONFIG SET maxclients 10000 |
受限于操作系统文件描述符限制。 |
requirepass |
设置或修改 Redis 访问密码 | CONFIG SET requirepass "NewStrongPass123" |
设置后客户端需使用 AUTH 命令验证。 |
save |
设置 RDB 持久化快照规则 | CONFIG SET save "3600 1 300 100" |
格式为 秒数 修改数。若想禁用 RDB,设为空字符串 ""。 |
6. 撤销或恢复默认配置
如果动态修改后的参数导致异常,可以通过重新设置将其改回原值,或者恢复为默认值。
查看配置的默认值通常查阅官方文档。如果要将上述密码移除(即恢复为无密码状态),执行:
CONFIG SET requirepass ""
如果要将内存限制恢复为无限制:
CONFIG SET maxmemory 0
切记:修改后如需长期生效,必须再次 执行 CONFIG REWRITE。
7. 修改限制与风险防范
并非所有参数都支持动态修改。涉及到进程底层绑定的参数(如端口 port、绑定 IP bind、运行模式 daemonize、日志文件路径 logfile 等)通常必须重启服务才能生效。
判断参数是否支持动态修改,可以尝试使用 CONFIG SET 修改。如果返回错误提示 READONLY You can't write... 或 Unsupported configuration parameter,则表示该参数不支持热更新。
此外,在调整关键资源参数(如 maxmemory)前,建议先在测试环境验证,避免因设置过小导致数据被意外驱逐,或设置过大导致系统 OOM(Out of Memory)。
底层绑定?} B -- 是(如 port, bind) --> C[无法动态修改
需计划重启维护] B -- 否 --> D[执行 CONFIG SET 修改] D --> E[验证配置生效] E --> F{是否需要
重启后保留?} F -- 是 --> G[执行 CONFIG REWRITE] F -- 否 --> H[仅在本次运行有效] G --> I[完成] H --> I

暂无评论,快来抢沙发吧!