Redis RDB 持久化问题

前言

Redis 是内存数据库,它将自己的数据储存在内存里面,如果不想办法将储存在内存中的数据保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据也就没了。

因此,Redis 提供了 RDB 持久化功能,这个功能可以将 Redis 在内存中的数据保存到磁盘里面,避免丢失。

问题描述

有两台计算机,分别为 A、B(A 是本机,B 是云服务器)。两台计算机操作系统版本,Redis 版本完全相同。

我有一些数据储存在 A 的 Redis 中(B 无法直接获取这些数据),我想把这些数据保存到 B 中。于是在 A 中调用 SAVE 命令生成 rdb 文件,将 rdb 文件拷贝到 B,想让 B 加载这个 rdb 文件。

rdb 文件的加载工作是在服务器启动时自动执行的,于是我在 B 执行以下命令:

sudo systemctl restart redis 

可是,B 的 Redis 中并没有我预期的数据,还是 B 之前的数据。只要重启后,我拷贝到 B 的 dump.rdb 文件就没了,就又被替换成之前的文件了。

经过排查,B 并没有开启 AOF 持久化,redis.conf 配置的 dump.rdb 文件名和路径都没有问题。排查日志发现 rdb 文件加载正常,并没有打印错误信息。

问题解决

经过重重排查,终于发现了问题,问题出在 Redis 关闭的时候。

server.c/prepareForShutdown 函数的片段如下:

int prepareForShutdown(int flags) {int save = flags & SHUTDOWN_SAVE;int nosave = flags & SHUTDOWN_NOSAVE;/* Create a new RDB file before exiting. */if ((server.saveparamslen > 0 && !nosave) || save) {serverLog(LL_NOTICE,"Saving the final RDB snapshot before exiting.");/* Snapshotting. Perform a SYNC SAVE and exit */rdbSaveInfo rsi, *rsiptr;rsiptr = rdbPopulateSaveInfo(&rsi);if (rdbSave(server.rdb_filename,rsiptr) != C_OK) {serverLog(LL_WARNING,"Error trying to save the DB, can't exit.");return C_ERR;}}
}

准备关闭的时候,在 server.saveparamslen > 0 时,有可能会调用 rdbSave(server.rdb_filename,rsiptr) 生成 rdb 文件。

我们可以在 redis.conf 中设置一些条件让 Redis 自动执行 BGSAVE 命令,例如:

save 900 1
save 300 10
save 60 10000

server.saveparamslen 就是我们设置的 BGSAVE 保存条件数组的长度,在这个例子中为 3。

于是问题就很清晰了,在 Redis 关闭的时候,它生成了一分 rdb 文件,替换了我拷贝到 B 的 rdb 文件,于是启动的时候加载的也是它刚生成的这份。

只要我先关闭 Redis,再将 dump.rdb 拷贝到 B,再在 B 启动 Redis 就可以解决了。

参考资料

  • 《Redis 设计与实现》
  • Redis 5.0.8 server.c/prepareForShutdown

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将Windows PC变成Wi-Fi热点?这里提供详细步骤

序言 Windows 10和Windows 11都有内置功能,可以将你的笔记本电脑(或台式机)变成无线热点,允许其他设备连接到它并共享你的互联网连接。以下是操作指南。 由于Windows中隐藏的虚拟Wi-Fi适配器功能,你甚至可以在连接到另一个Wi-Fi网络或无线路由器时创建Wi-Fi热点,通过另…

鲁教版七年级数学上册-笔记

文章目录 第一章 三角形1 认识三角形2 图形的全等3 探索三角形全等的条件4 三角形的尺规作图5 利用三角形全等测距离 第二章 轴对称1 轴对称现象2 探索轴对称的性质4 利用轴对称进行设计 第三章 勾股定理1 探索勾股定理2 一定是直角三角形吗3 勾股定理的应用举例 第四章 实数1 …

实习生在Linux环境下如何日常使用?

那我简单来说两个我使用的场景吧 我在搭建我们的测试环境的时候,先上传jar包到测试环境对应的目录下,然后呢此时jar包是不可被执行的,所有就有了 chmod x jar包名称, 接下来,我是用 jps 查看Java的进程,获取到pid之后…

Kafka 安装教程和基本操作

一、简介 Kafka 是最初由 Linkedin 公司开发,是一个分布式、分区的、多副本的、多订阅者,基于 zookeeper 协调的分布式日志系统(也可以当做 MQ 系统),常见可以用于 web/nginx 日志、访问日志,消息服务等等…

基于YOLO算法实现网球运动实时分析(附源码)

大家好,我是小F~ 今天给大家介绍一个计算机视觉实战的项目。 该项目使用YOLO算法检测球员和网球,并利用cnn提取球场关键点。 进而分析视频中的网球运动员,测量他们的速度、击球速度和击球次数。 使用win10电脑,Python …

【源码】java + uniapp交易所源代码/带搭建教程java交易所/完整源代码

java uniapp交易所源代码/带搭建教程java交易所/完整源代码 带简洁教程,未测 java uniapp交易所源代码/带搭建教程java交易所/完整源代码 - 吾爱资源网

【古董技术】ms-dos应用程序的结构

序 制定一个MS-DOS应用程序计划需要认真分析程序的大小。这种分析可以帮助程序员确定MS-DOS支持的两种程序风格中哪一种最适合该应用程序。.EXE程序结构为大型程序提供了好处,因为所有.EXE文件之前都有额外的512字节(或更多)的文件头。另一方…

C++第十七弹---string使用(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、标准库中的string类 1.1、string类的常用接口说明 1.1.1、string类对象的修改操作 1.1.2、string类对象非成员函数重载 总结 1、标准库中的…

牛客热题:有效括号

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:有效括号题目链接方法一&#x…

MySQL视图教程(01):创建视图

MySQL 创建视图 在 MySQL 中, CREATE VIEW 语句用于创建一个数据库视图(View)。 MySQL 是一种常用的关系型数据库管理系统,提供了 CREATE VIEW 语法,用于创建视图(View)。视图是一种虚拟的表&…

Mycat+Mysql搭建数据集群实现数据分片存储

前言 MyCAT介绍 * 一个彻底开源的,面向企业应用开发的“大数据库集群”; * 支持事务、ACID、可以替代MySQL的加强版数据库; * 一个可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群; * 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL; * 一个新颖…

QCC---DFU升级变更设备名和地址

QCC---DFU升级变更设备名和地址 这个很多人碰到这个疑问,升级了改不了设备名和地址 /******************************************************************************* Copyright (c) 2018 Qualcomm Technologies International, Ltd. FILE NAME sink_dfu_ps.c DESCRIPT…

2024.5.1学习记录

1、代码随想录:贪心刷题 2、react 高级使用( hoc render、props、函数组件、serState 传送门等) 3、游山玩水

《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学备赛?方法思维教程》【官方笔记】

背景: 有些同学在大一或者大二可能会被老师建议参加蓝桥杯,本视频和文章主要是以一个过来人的身份来给与大家一些思路。 比如蓝桥杯是什么?我是否要参加蓝桥杯?参加蓝桥杯该选择何种语言?如何科学备赛?等…

2023年信息素养大赛小学组C++智能算法复赛试题解析

2023年信息素养大赛小学组C++智能算法复赛真题 智能算法挑战复赛小学组(总共4道题)T1. 判断数字出现了几次 【题目描述】 给定一个正整数 n,判断从 1 到这个数本身的所有数中,一共出现了多少次数字k。 【输入格式】 输入共1行,包括一个正整数n和一个正整数k。(0<n<…

JavaEE之线程(7)_单例模式(设计模式概念、单例模式优点、懒汉、饿汉模式)

一、什么是设计模式&#xff1f; 单例模式是设计模式中较为常见的一种。那么&#xff0c;什么是单例模式&#xff1f; 设计模式&#xff08;Design Pattern&#xff09;都是一些相对优秀的解决方案&#xff0c;很多问题都是典型的、有代表性的问题&#xff0c;学习设计模式&am…

C#面:如果出现ASP.NET中的事件不能触发可能由于什么原因造成

当 ASP.NET 中的事件不能触发时&#xff0c;可能由以下几个原因造成&#xff1a; 事件绑定错误&#xff1a;请确保事件正确地绑定到相应的控件上。在 ASP.NET 中&#xff0c;可以通过在前端代码或者后端代码中使用事件处理程序来绑定事件。如果事件没有正确地绑定到控件上&…

为什么本科毕业后我坚定地选择了就业而不是考研?

大家好&#xff0c;我是小布丁。今天来聊聊我为什么本科毕业后选择了就业而不是考研。 在整个大学期间&#xff0c;我被亲戚拷问最多的问题就是&#xff1a;准备考研吗&#xff1f;相信很多大学生都遇到过这种情况吧。 如果你说准备还好&#xff0c;亲戚大概率就不会问下去&a…

js计算字符串大小存储所占字节数

在JavaScript中&#xff0c;计算字符串所占的大小&#xff08;占用的字节数&#xff09;并不直接&#xff0c;但可以通过一些方法间接得到。 我们需要知道一个前提&#xff0c;英文字母 lenght 和字节数是一样的&#xff1a;都是1&#xff0c;而中文 lenght1&#xff0c;字节数…

golang sqlite主从数据同步插件开发

### golang sqlite主从数据同步插件开发思路 参考Mysql的主从同步机制&#xff0c;Mysql是产生binlog&#xff0c;然后把binlog日志同步到从服务上。 同理&#xff0c;我们按sql执行顺序记录所有的增删改查的sql语句&#xff0c;然后调用接口把sql语句传到从服务上执行。 数…