redis持久化到mysql的方案_redis进阶: 数据持久化

redis是内存数据库,即数据库状态都是存储于内存中,因此,当服务器重启或者断开后,数据便会丢失;为了解决数据丢失问题,便需要将数据从内存保持到磁盘中,这就是redis的数据持久化

目前,redis实现了两种数据库持久化方案,一种是RDB,另一种是AOF,让我们来聊聊这两种方案

RDB

redis database,即将数据库的内容(key-value)保存为压缩的二进制文件

即便redis服务进程退出,但是RDB文件仍然存在,这样当redis启动时便会自动载入RDB文件以此保证数据不丢失,其流程如下

![rdb流程](http://image.fidding.me/20200601162845.png )

1.手动生成RDB文件

redis有两个命令用于生成RDB文件,即SAVE与BGSAVE,这两个指令的用途都是一样的,唯一的区别在于

SAVE会直接堵塞服务器进程,知道RDB文件创建完毕为止,这会导致在此期间服务器不能处理任何命令请求

BGSAVE不会堵塞服务器进程,而是会fork派生出一个子进程用于执行RDB创建,在此期间服务器主进程(父进程)仍可以继续处理命令请求

其实现源码位于rdb.c中的rdbSave()与rdbSaveBackground()函数,有兴趣的小伙伴可以去看看

从区别来看,很明显,在执行RDB文件的创建首选指令BGSAVE

2.自动生成RDB文件

一般来说RDB文件的生成并不需要用户去手动执行,redis提供了save指令允许用户设置执行条件:在多少时间内服务器进行多少次修改;例如指令save 500 1即表示服务器如果满足在500秒之内对数据库执行了至少1次修改,那么就会执行RDB文件的生成

在redis的serverCron()时间事件中会去判断是否满足条件并执行RDB文件生成

3.自动加载RDB

RDB文件的生成可以手动执行,但是redis目前并没有提供手动加载RDB文件的操作指令,即RDB文件的载入工作是在服务器启动的时候自动执行的,并且在服务器载入RDB文件期间会一直处于堵塞状态

AOF

Append Only File,通过将redis服务器所执行的写指令保存为AOF文件来记录数据库状态

1.何时写入

当用户执行redis写操作时,便会将指令保存到AOF文件中,其流程如下

512a2c0d10ece651fc53eec1af5a0a07.png

2.关于AOF重写

问题:随着数据库服务器运行,AOF文件中的内容会越来越多,因为每一条写指令都需要记录,也因此执行AOF文件来进行数据还原的时间也就越久

解决方案:为了解决这个问题,redis提供了AOF重写BGREWRITEAOF指令;原理即从数据库中读取键现在的值,然后用一条指令去记录键值对,代替之前的多余命令,并重新生成一套写指令存储为新的AOF文件,并替换掉旧的AOF文件,这样新AOF文件就不会存在过多的冗余指令,体积包括执行时间也会小很多

3.何时加载AOF

当服务器重启动时会先检测是否有AOF文件,如果有就会载入AOF文件来实现数据一致,如果没有AOF则会检测是否执行RDB载入流程

加载

当服务器启动时会先检测是否有AOF文件,如果有则加载AOF文件,如果没有则会判断是否有RDB文件存在,如果有RDB文件,则加载RDB文件

eb6fd65d163437d76ddc3babc8881485.png

相关文档:

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

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

相关文章

《C++ Primer》7.1.2节练习(部分)

练习7.4: class Person {private:string strName;//姓名string strAddress;//地址 };练习7.5: class Person {private:string strName;string strAddress;public:string getName()const{return strName;}string getAddress() const{return strAddress;} };上述两个函数应该被…

如何创建一个自定义的`ErrorHandlerMiddleware`方法

在本文中,我将讲解如何通过自定义ExceptionHandlerMiddleware,以便在中间件管道中发生错误时创建自定义响应,而不是提供一个“重新执行”管道的路径。作者:依乐祝译文:https://www.cnblogs.com/yilezhu/p/12497937.htm…

《C++ Primer》7.1.3节练习

练习7.6: #include <iostream> using namespace std;Sales_data add(const Sales_data &lhs,const Sales_data &rhs) {Sales_data sum lhs;sum.combine(rhs);return sum; }std::istream &read(std::istream &is ,Sales_data &item) {is>>ite…

mysql or中有空查询慢_MySQL 慢查询日志

1.定义2.相关参数2.开启3.原因4.慢查询日志工具mysqldumpslow1.定义作用:用来记录在MySQL中响应时间超过阀值的语句。2.相关参数mysql> show variables like %slow_query%;------------------------------------------------------------| Variable_name | Value …

从业务需求抽象成模型解决方案

从业务需求调研&#xff0c;通过抽象转换成模型技术方案&#xff0c;本文将对这个过程做个拆解&#xff0c;供大家参考。以下我所说的可能都是错的&#xff0c;只是一家之见&#xff0c;欢迎大家在留言区多提意见和看法&#xff0c;互相共勉。一、订单对象-信息需求公司的运营都…

《C++ Primer》7.1.4节练习

练习7.11: #include <iostream> #include <cstring> using namespace std;class Sales_data {public:Sales_data() default;Sales_data(const std::string &book): bookNo(book) {}Sales_data(const std::string &book, const unsigned num, const doubl…

DotNetCore Web应用程序中的Session管理

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。限于译者的能力有限&#xff0c;个别语句翻译略显生硬&#xff0c;还请见谅。作者简介&#xff1a;Jon&#xff08;Jonathan&#x…

css3是什么 ptml_CSS3

CSS3HTMLCSSJavaScript结构表项交互如何学习&#xff1f;CSS是什么CSS怎么用(快速入门)CSS选择器(重点难点)美化网页(文字、阴影、超链接、列表、渐变...)盒子模型浮动定位网页动画(特效效果)1、初识CSS1.1、什么是CSSCascading Style Sheet(层叠样式表)CSS&#xff1a;表现(美…

《C++ Primer》7.2节练习

练习7.16: 在类的定义中&#xff0c;可以包含0个或者多个访问说明符&#xff0c;并且对于某个访问说明符能出现多少次以及能出现在哪里都没有严格规定。每个访问说明符指定接下来的成员的访问级别&#xff0c;有效范围直到出现下一个访问说明符或者到达类的结尾为止。 一般来说…

python docx runs_别再问我Python怎么操作Word了!

安装docx是一个非标准库&#xff0c;需要在命令行(终端)中使用pip即可安装pip install python-docx一定要注意&#xff0c;安装的时候是python-docx而实际调用时均为docx!前置知识Word中一般可以结构化成三个部分&#xff1a;文档Document段落Paragraph文字块Run也就是Document…

【要闻】如何基于K8s管理1600个微服务?某数字化银行秘诀公开

Cloud Foundry Foundation宣布KubeCF为新孵化项目Cloud Foundry Foundation是开放源代码项目的聚集地&#xff0c;简化了开发人员的体验&#xff0c;近日其宣布&#xff0c;KubeCF已成为该基金会的孵化项目&#xff0c;并已发布版本1.0.1。KubeCF是Cloud Foundry应用程序运行时…

《C++ Primer》7.2.1节练习

练习7.20: 当非成员函数确实需要访问类的私有成员时&#xff0c;我们可以把它声明成该类的友元。此时&#xff0c;友元可以“工作在类的内部”&#xff0c;像类的成员一样访问类的所有数据和函数。但是一旦使用不慎&#xff08;比如随意设定友元&#xff09;&#xff0c;就有可…

python常用字符串方法调用语法_Python3常用的字符串方法

判断是否全是字母"python".isalpha() # 返回True"2python".isalpha() # 返回False根据分隔符分割字符串a "I,LOVE,PYTHON"a.split(",")# 结果&#xff1a;[I,LOVE,PYTHON]去掉字符串两头的空格及回车符str.strip() # 去掉字符串两边的…

如何用 Blazor 实现 Ant Design 组件库?

本文主要分享我创建 Ant Design of Blazor 项目的心路历程&#xff0c;已经文末有一个 Blazor 线上分享预告。Blazor WebAssembly 来了&#xff01;Blazor 这个新推出的前端 Web 框架&#xff0c;想必是去年 .NET Core 3.0 发布时才进入 .NET 开发者的视线的。但其实&#xff0…

《C++ Primer》7.3.1节练习

练习7.23: class Screen {private:unsigned height 0,width 0;unsigned cursor 0;string contents; }/*对于Screen类来说&#xff0c;必不可少的数据成员有&#xff1a;屏幕的宽度和高度、屏幕的内容以及光标的当前位置*/练习7.24: class Screen {private:unsigned height …

mysql 中如何删除重复的数据_mysql如何快速删除重复的数据

在mysql中去重&#xff0c;其实是一个很简单的事情&#xff0c;来看下面的例子&#xff1a;mysql> DROP TABLE test;Query OK, 0 rows affected (0.01 sec)mysql> CREATE TABLE test(id INT,NAME VARCHAR(10));Query OK, 0 rows affected (0.01 sec)mysql> INSERT IN…

.NET Core开发实战(第28课:工作单元模式(UnitOfWork):管理好你的事务)--学习笔记...

28 | 工作单元模式&#xff08;UnitOfWork&#xff09;&#xff1a;管理好你的事务工作单元模式有如下几个特性&#xff1a;1、使用同一上下文2、跟踪实体的状态3、保障事务一致性我们对实体的操作&#xff0c;最终的状态都是应该如实保存到我们的存储中&#xff0c;进行持久化…

《C++ Primer》7.3.2节练习

练习7.27: #include <iostream> #include <cstring> using namespace std;class Screen {private:unsigned height 0, width 0;unsigned cursor 0;string contents;public:Screen() default;Screen(unsigned ht, unsigned wd): height(ht), width(wd), conten…

【实战 Ids4】║ 控制台密码模式搭配Ocelot网关

&#xff08;此岁只能云赏樱了&#xff09;书接上文&#xff0c;这些天一直在研究IdentityServer4&#xff08;下文简称Ids4&#xff09;框架&#xff0c;发现有很多有意思&#xff0c;或者说比我想象中的知识点&#xff0c;可扩展的多&#xff0c;所以比较开心能钻研进去&…

mysql递归查询 缓存_MySQL-递归查询方法解析

MySQL-递归查询方法解析&#xff0c;兄弟连教育(www.lampbrother.net)帮大家做了个简单的整理&#xff1a;有需要的朋友可以参考下哈。首先表结构和数据CREATE TABLE class ( classid int(11) NOT NULL AUTO_INCREMENT, banji int(11) DEFAULT NULL COMMENT 0, nianji varch…