carlosfu
作者carlosfu·2023-06-16 17:24
软件开发工程师·快手

Redis 6.2&7 save配置的一个坑

字数 1301阅读 840评论 0赞 5

一、问题

Redis臭名昭著的神坑配置save,可以自动完成持久化。

save 3600 1 300 100 60 10000

但对持久化了解的人也知道,它是性能杀手,所以一般情况下,我们在线上不会用这个功能的,具体两种方法:

  1. 不添加这个配置
  2. 显示配置save ""

在Redis 6.2以前,上述两种方法都可以实现。但如果你用Redis 6.2、Redis 7就会发现使用第一种方法的话,会默认加上这个配置:

127.0.0.1:6380> config get save

1) "save"
2) "3600 1 300 100 60 10000"

二、原因

before 6.2(6.0.15) server.c(加载配置文件前会清理掉save配置)

if (server.sentinel_mode && configfile && *configfile == '-') {
serverLog(LL_WARNING,
"Sentinel config from STDIN not allowed.");
serverLog(LL_WARNING,
"Sentinel needs config file on disk to save state. Exiting...");
exit(1);
}
resetServerSaveParams();
loadServerConfig(configfile,options);

After 6.2(例如7.0.11) server.c ,显然没有清理

....
loadServerConfig(server.configfile, config_from_stdin, options);
if (server.sentinel_mode) loadSentinelConfigFromQueue();

resetServerSaveParams()函数会置空默认配置

void resetServerSaveParams(void) {
zfree(server.saveparams);
server.saveparams = NULL;
server.saveparamslen = 0;
}

默认配置中:

void initServerConfig(void) {
...........

appendServerSaveParams(60*60,1);  /* save after 1 hour and 1 change */  
appendServerSaveParams(300,100);  /* save after 5 minutes and 100 changes */  
appendServerSaveParams(60,10000); /* save after 1 minute and 10000 changes */  

}

三、 结论

1 .save配置一定要显示定义

save ""

2.Redis 6.2 7后改动较大(换作者),要仔细阅读release log

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

5

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广