配置重写
Syntax
CONFIG REWRITE
- Available since:
- 2.8.0
- Time complexity:
- O(1)
- ACL categories:
-
@admin
,@slow
,@dangerous
,
CONFIG REWRITE
命令重写服务器启动时使用的 redis.conf
文件,应用最小的更改以使其反映服务器当前使用的配置,这可能与原始配置不同,因为使用了 CONFIG SET
命令。
重写以非常保守的方式进行:
- 原始redis.conf的注释和整体结构尽可能保留。
- 如果旧redis.conf文件中已存在某个选项,它将在相同位置(行号)被重写。
- 如果某个选项原本不存在,但被设置为其默认值,则重写过程不会添加它。
- 如果某个选项原本不存在,但被设置为非默认值,它将被追加到文件的末尾。
- 未使用的行将被留空。例如,如果您曾经有多个
save
指令,但由于您禁用了RDB持久化,当前配置中较少或没有这些指令,所有相关行都将被留空。
如果由于某种原因原始配置文件不再存在,CONFIG REWRITE 也能够从头开始重写配置文件。然而,如果服务器启动时根本没有配置文件,CONFIG REWRITE 将只会返回一个错误。
原子重写过程
为了确保redis.conf文件始终保持一致,即在错误或崩溃时,您总是以旧文件或新文件结束,重写是通过一个write(2)
调用来执行的,该调用具有足够的内容,至少与旧文件一样大。有时会以注释的形式添加额外的填充,以确保生成的文件足够大,然后文件会被截断以删除末尾的填充。
RESP2/RESP3 回复
Simple string reply:OK
when the configuration was rewritten properly. Otherwise an error is returned.