执行Redis save命令后强制关机,快照未持久化的原因咨询
解答
核心原因:操作系统磁盘缓存的异步刷写
Redis的SAVE命令执行完成并输出DB saved on disk日志,仅代表Redis进程已将RDB数据写入操作系统的页缓存(内存级缓存),而非直接写入物理磁盘。操作系统为了优化IO性能,会延迟将页缓存数据刷写到磁盘。此时强制关机,页缓存中未刷盘的新RDB数据会丢失,Redis重启后加载的还是旧的dump.rdb文件。
与flushdb无关
flushdb只是清空内存中的所有键,后续SAVE生成空RDB的逻辑完全正常,不是导致数据未持久化的原因。
确保持久化的解决方案
- 使用
SHUTDOWN SAVE命令:这是最可靠的方式,它会在关闭Redis前完成快照,并强制操作系统将数据刷写到磁盘。 - 依赖
rdb-save-incremental-fsync配置:该配置默认开启,会在RDB写入过程中每隔一定字节触发一次磁盘同步,减少最终未刷盘的数据量。 - 手动触发系统磁盘同步:在Linux系统中,执行
SAVE后可调用sync命令,强制操作系统将页缓存数据刷写到磁盘。
内容的提问来源于stack exchange,提问作者User051209
相关产品推荐
相关产品推荐

