回复
Redis 6.2&7 save配置的一个坑
skyyoung
发布于 2023-10-31 14:52
浏览
0收藏
一、问题
Redis臭名昭著的神坑配置save,可以自动完成持久化。
save 3600 1 300 100 60 10000
但对持久化了解的人也知道,它是性能杀手,所以一般情况下,我们在线上不会用这个功能的,具体两种方法:
- 不添加这个配置
- 显示配置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 ""
- Redis 6.2 7后改动较大(换作者),要仔细阅读release log
文章转载自公众号:Redis开发运维实战
分类
标签
已于2023-10-31 14:52:15修改
赞
收藏
回复
相关推荐