Redis持久化原理及配置详解(RDB方式和AOF方式)_RobertoHuang的博客-程序员信息网_redis默认持久化配置

技术标签: RDB  Redis学习笔记  AOF  Redis  持久化  

Redis的强大功能很大程度上是由于其将所有数据都存储在内存中。为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中。Redis支持两种持久化方式,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或两种结合使用。(持久化即将数据保存到磁盘,机器宕机或者重启数据不丢失,存储到内存中的数据会丢失)

1.RDB方式持久化

1.1 RDB的概念
RDB方式是通过快照方式完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并且存储到硬盘上。进行快照的条件在配置文件中指定,有2个参数构成:时间和改动键的个数,当在指定时间内被更改的键的个数大于指定数值时就会进行快照。RDB是Redis默认的持久化方式。

1.2 RDB的配置
在配置文件中已经预置了三个条件

save 900 1 # 15分钟内至少有一个键被更改 
save 300 10 # 5分钟内至少有10个键被更改
save 60 10000 # 1分钟内至少有10000个键被更改

以上条件是或的关系

默认的rdb文件路径是当前目录,文件名是:dump.rdb,可以在配置文件中修改路径和文件名,分别是dir和dbfilename

dir ./ # rdb文件存储路径
dbfilename dump.rdb # rdb文件名

如果没有触发自动快照,需要对Redis执行手动快照操作,SAVE和BGSAVE都是执行手动快照,但是两者有区别:可以通过SAVE和BGSAVE命令来手动快照,两个命令的区别是前者是由主进程进行快照,会阻塞其他请求,后者是通过fork子进程进行快照

注意:由于Redis使用fork来复制一份当前进程,那么子进程就会占有和主进程一样的内存资源,比如说主进程8G内存,那么在备份的时候,必须保证有16G的内存,要不然会启用虚拟内存,性能非常的差。

1.3 RDB功能测试:
RDB功能测试1

这里可能会带来疑惑,明明已经开启了RDB配置,为什么Redis宕机后,数据还是丢失了呢?原因是由于没达到RDB持久化触发条件,所以我们手动触发RBD后再测试,如下图所示:
RDB功能测试2

1.4 RBD文件的压缩:
RDB文件是通过压缩的,可以通过配置rdbcompression参数来禁用压缩,Redis默认是开启压缩的

压缩:
    优点:减少磁盘存储空间
    缺点:消耗CPU资源
不压缩:
    优点:不消耗CPU资源
    缺点:占用磁盘空间多

2. AOF方式持久化

2.1 AOF的概念
Redis的AOF持久化策略是将发送到Redis服务端的每一条命令都记录下来,并且保存在硬盘的AOF文件中。可以通过参数appendonly来设置是否启用AOF。AOF文件的位置和RDB的位置相同,都是通过dir参数设置,默认的文件名是appendonly.aof,可以通过appendfilename参数修改。

2.2 优化AOF文件
可以使用BGREWRITEAOF命令来重写AOF文件。目的是去除数据的中间执行过程,保存最终数据命令即可。

2.3 重写策略的参数设置
auto-aof-rewrite-percentage 100
当前的AOF文件大小超过上一次重写的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF大小为依据。

auto-aof-rewrite-min-size 64mb
限制了允许重写的最小AOF文件,通常在AOF文件很小的时候即使其中有些冗余命令也可是可以忽略的。

2.4 文件同步策略
文件写入默认情况下会先写入到系统的缓存中,系统每30秒同步一次,才是真正的写入到磁盘,如果在这30秒服务器宕机那数据也会丢失的

Redis可以通过配置来修改同步策略:

# appendfsync always 每次都同步(最安全但是最慢)
appendfsync everysec 每秒同步(默认的同步策略)
# appendfsync no 不主动同步,由操作系统来决定(最快但是不安全)

2.5 AOF持久化方式测试
AOF持久化方式测试
由于还没达到RDB的持久化触发条件 所以这里有数据肯定用的是AOF持久化方式 到此AOF持久化成功生效

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/RobertoHuang/article/details/70847194

智能推荐

项目开发中的一些注意事项以及技巧总结_weixin_34138056的博客-程序员信息网

1、jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View()、PartialView()等,只能返回json以及content等,但是一般我们在开发的时候也是使用json返回的,此时如果需要渲染界面或者是加载局部视图,我们可以在ajax的success的事件中使用$.html()来渲染后台给前端传的View()数据。一开始我遇到这个问题的时候还很纳闷...

关于axios发起post请求后端报400错误_随风而来001的博客-程序员信息网_axios报错400

关于axios发起post请求后端报400错误这是前端错误​ 这个问题困扰我很久,在网上查找解决的方法要么说利用qs 要么说利用URLSearchParams 传递参数 等等方法 我都试过了 但是还是解决不了 ,我用postman请求后端是可以的 但是用axios就不行。​ 最后我的解决问题方法是将前面的params 更改成data进来断点了,数据都正常重点在使用axios时,注意到配置选项中包含params和data两者,以为他们是相同的,实则不然。因为params是添加到

JVM--一文读懂垃圾回收_weixin_30564901的博客-程序员信息网

转:https://www.cnblogs.com/kubidemanong/p/9461755.html与其他语言相比,例如c/c++,我们都知道,java虚拟机对于程序中产生的垃圾,虚拟机是会自动帮我们进行清除管理的,而像c/c++这些语言平台则需要程序员自己手动对内存进行释放。虽然这种自动帮我们回收垃圾的策略少了一定的灵活性,但却让代码编写者省去了很多工作,同时也提高了很多安全性。(因为...

【SequoiaDB巨杉数据库】特殊类型对象-BSONObj_F333的博客-程序员信息网

BSON 对象。数据类型的介绍可参考数据类型。语法BSONObj(<json>) / new BSONObj(<json>)BSONObj.toJson()BSONObj.toObj()BSONObj.toString()方法BSONObj(<json>) / new BSONObj(<json>)创建 BSONObj 对象参数名 参数类型 默认值 描述 是否必填 json JSON

智能聊天机器人的技术综述_Chatopera 研发团队的博客-程序员信息网

本文转载,原文地址。在转载过程中,资源和开放数据有更新,不代表原作者观点。目录摘要研究背景国内外研究现状对比工程要求及分类实现需求工程分类常见技术模型Encoder-decoder加解密模型Hierarchiacal Recurrent Encoder-Decoder分级卷积加解密模型Bidirectional HRED双向分级卷积加解密模型Word embedding词嵌入Attention注意力机制模型评估方法公开资源模型框架Dialogflow腾讯智能对话平台 TBPChatoperaLangua

ElasticSearch编程操作_小孩与狗的博客-程序员信息网

ElasticSearch编程操作创建项目创建工程,导入坐标<dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>5.6.8</version> </dependenc

随便推点

20220705开发板BL602的SDK编译以及刷机_南棱笑笑生的博客-程序员信息网

20220705开发板BL602的SDK编译以及刷机2022/7/5 15:241、下载BL602的SDKhttps://bouffalolab.github.io/bl_iot_sdk/get-started/Developer_Environment_BL602/get_started_hw_windows/get_started_hw_windows.htmlBL602的快速入门下载代码,使用 git clone [email protected]:bouffalolab/bl_iot_sdk.g

通过DBLINK查询出现的问题_czw333的博客-程序员信息网

select t1.rolename from (select * from [email protected]) t1, (select * from [email protected]) t2 where t1.rolename = t2.username(+) and t2.username is null;  select t1.rol...

SQL 日期型函数_zoohouse的博客-程序员信息网

<br />1 SQL Server 有两种日期类型:DATETIME 和 SMALLDATETIME,<br />    <br />    DATETIME 的日期范围:1753-1-1到9999-12-31之间的日期值,精度为3.33毫秒,其类型的值在SQLServer内部用两个 4 字节的整数存储。<br />      第一个 4 字节存储“基础日期”(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参照日期。<br />            另外一个 4 字节存储天的时间(以

设计模式 - 模版方法_我爱看明朝的博客-程序员信息网

设计模式 - 模版方法场景小张的团队最近接受一个需求,实现实现一家咖啡店的冲泡咖啡和茶的冲泡自动化。之前这家咖啡店都是由咖啡师傅手动进行调制咖啡和茶。现在咖啡店需要引入自动化的点单和调制饮料的系统,小张负责实现调制饮料的功能。咖啡师傅手工冲泡咖啡和茶的流程:冲泡咖啡:把水煮沸用沸水冲泡咖啡把咖啡倒入杯子加糖和牛奶冲泡茶:把水煮沸用沸水冲泡茶叶把茶倒入...

vue全面介绍--全家桶、项目实例_weixin_30576827的博客-程序员信息网

简介“简单却不失优雅,小巧而不乏大匠”。2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”。授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You)。Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进...

Python threading 多线程_Thinking_boy1992的博客-程序员信息网

threading通过对thread模块进行二次封装,提供了更方便的API来操作线程。threading.ThreadThread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(init)中将可调用对象作为参数传入。下面分别举例说明。先来

推荐文章

热门文章

相关标签