引言

Redis官方提供了两种不同的持久化方法来将数据存储到硬盘里面分别是:
(1)快照(Snapshot)
(2)AOF (Append Only File)只追加日志文件

1、快照机制

1.1、特点

这种方式可以将某一时刻的所有数据都写入硬盘中,当然这也是redis的默认开启持久化方式,保存的文件是以.rab形式结尾的文件,因此这种方式也称之为RDB方式。

1.2、快照生成方式

(1)客户端方式:BGSAVE和SAVE指令
(2)服务器配置自动触发

1.客户端方式之BGSAVE

a.客户端可以使用BGSAVE命令来创建一 个快照,当接收到客户端的BGSAVE命令时,redis会调用fork 1来创建一 个子进程, 然后子进程负责将快照写入磁盘中,而父进程则继续处理命令请求。
名词解释: fork当一个进程创建子进程的时候,底层的操作系统会创建该进程的一个副本,在类unix系统中创建子进程的操作会进行优
化:在刚开始的时候,父子进程共享相同内存,直到父进程或子进程对内存进行了写之后,对被写入的内存的共享才会结束服务。

2.客户端方式之SAVE

b.客户端还可以使用SAVE命令来创建一 个快照,接收到SAVE命令的redis服务器在快照创建完毕之前将不再响应任何其他的命令。

注意:SAVE命令并不常使用,使用SAVE命令在快照创建完毕之前,redis处于阻塞状态,无法对外服务。

3.服务器配置方式之满足配置自动触发

一如果用户在redis . conf中设置了save配置选项,redis会在save选项条件满足之后自动触发一次BGSAVE命令 ,如果设置多个save配置选项,当任意一个save配置 选项条件满足, redis也会触发一次BGSAVE命令。

4.服务器接收客户端shutdown指令

一当redis通过shutdown指令 接收到关闭服务器的请求时,会执行一次save命令,阻塞所有的客户端,不再执行客户端执行发送的任何命令,并且在save命令执行完毕之后关闭服务器

1.3、配置生成快照名称和位置

1.修改生成快照名称
-dbfilename dump.rdb
2.修改生成位置

  • dir ./

2、AFO只追加日志文件机制

2.1、特点

这种方式可以将客户端执行的写命令记录到日志文件中,AOF持久化会将被执行的写命令写到AOF的文件末尾,以此来记录数据发生的变化,因此只要redis从头到尾执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件的记录的数据集。

2.2、开启AOF持久化

在redis的默认配置中AOF持久化机制是没有开启的,需要在配置中开启。

1.开启AOF持久化

  • a.修改appendonly yes开启持久化。
  • b.修改appendfilename " appendonly. aof" 指定生成文件名称。

2.3、日志追加频率

1.always [谨慎使用]

一说明:每个redis写命令都要同步写入硬盘,严重降低redis速度。
一解释:如果用户使用了always选项,那么每个redis写命令都会被写入硬盘,从而将发生系统崩溃时出现的数据丢失减到最少;遗憾的。
是,因为这种同步策略需要对硬盘进行大量的写入操作,所以redis处理命令的速度会受到硬盘性能的限制;
一注意:转盘式硬盘在这种频率下200左右个命令/s ;固态硬盘(SSD)几百万个命令/s;
一警告:使用SSD用户请谨慎使用always选项,这种模式不断写入少量数据的做法有可能会引发严重的写入放大问题,导致将固态硬盘的寿命从原来的几年降低为几个月。

2.everysec [推荐]

一说明:每秒执行一次同步显式的将多个写命令同步到磁盘。
一解释:为了兼顾数据安全和写入性能,用户可以考虑使用everysec选项,让redis每秒一 次的频率对A0F文件进行同步; redis每秒同步一次AOF文件时性能和不使用任何持久化特性时的性能相差无几,而通过每秒同步-一次AOF文件, redis可以保证,即使系统崩溃,用户最多丢失一秒之内产生的数据。

3.no[不推荐]

一说明:由操作系统决定何时同步
一解释:最后使用no选项,将完全有操作系统决定什么时候同步AOF日志文件,这个选项不会对redis性能带来影响但是系统崩溃时,会丢失不定数量的数据,另外如果用户硬盘处理写入操作不够快的话,当缓冲区被等待写入硬盘数据填满时,redis会处于阻塞状态,并导致redis的处理命令请求的速度变慢。

2.4、修改日志同步频率

1.修改日志同步频率

—修改appendfsync everysec| always |no指定

3、 AOF文件的重写

3.1、 AOF带来的问题

AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大。例如我们调用incr test命令100次,文件中必须保存全部的100条命令,其实有99条都是多余的。因为要恢复数据库的状态其实文件中保存一条set test 100就够了。为了压缩aof的持久化文件Redis提供了AOF重写机制。

3.2、 AOF重写

用来在一定程度上减小AOF文件的体积

1.客户端方式触发重写

—执行BGREWRITEAOF命令 不会阻塞redis的服务

3.3、服务器配置方式自动触发

—配置redis . conf中的auto-aof- rewrite- percentage选项 参加下图↓↓↓
—如果设置auto-aof-rewrite-percentage值为100和auto- aof-rewrite-min-size 64mb ,并且启用的AOF持久化时,那么当AOF文件体积大于64M,并且AOF文件的体积比上一次重写之后体积大了至少-倍(100%)时,会自动触发,如果重写过于频繁,用户可以考虑将auto-aof-rewrite-percentage设置为更大。

3.4、重写原理

注意:重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,替换原有的文件这点和快照有点类似。

1 重写流程

  • 1.redis调用fork ,现在有父子两个进程子进程根据内存中的数据库快照,往临时文件中写入重建数据库状态的命令
  • 2.父进程继续处理client请求,除了把写命令写入到原来的aof文件中。同时把收到的写命令缓存起来。这样就能保证如果子进程重写
    失败的话并不会出问题。
  • 3.当子进程把快照内容写入已命令方式写到临时文件中后,子进程发信号通知父进程。然后父进程把缓存的写命令也写入到临时文件。
  • 4.现在父进程可以使用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加。

4、持久化总结

两种持久化方案既可以同时使用(aof),又可以单独使用,在某种情况下也可以都不使用,具体使用那种持久化方案取决于用户的数据和应用决定。
无论使用AOF还是快照机制持久化,将数据持久化到硬盘都是有必要的,除了持久化外,用户还应该对持久化的文件进行备份(最好备份在多个不同地方)。

Redis持久化机制——随记2相关推荐

  1. redis的通用命令 || redis持久化机制:(RDB  ||  AOF)

    通用命令 1. keys * : 查询所有的键         2. type key : 获取键对应的value的类型         3. del key:删除指定的key value 持久化   ...

  2. Redis持久化机制(RDB VS AOF)

    Redis持久化机制 Redis持久化机制由来 一.RDB机制 1.1 工作原理 1.2 RDB的配置 1.3 修改RDB配置的快照策略 1.3.1 自定义RDB持久化策略 1.3.2 服务宕机RDB ...

  3. Redis系列:Redis持久化机制与Redis事务

    Redis 是个基于内存的数据库.那服务一旦宕机,内存中数据必将全部丢失.所以丢失数据的恢复对于 Redis 是十分重要的,我们首先想到是可以从数据库中恢复,但是在由 Redis 宕机时(说明相关工作 ...

  4. Redis系列之Redis持久化机制

    Redis持久化机制 为什么要持久化 如果Redis再次访问时,发现Redis的数据是空的,就会形成缓存穿透.更重要的是,因为Redis的数据是空的,所以客户端想要访问的key都没有,就会造成大量的请 ...

  5. Redis持久化机制

    1.简单介绍一下Redis Redis是使用C语言开发的数据库,不过与传统数据库不同的是Redis的数据是存在内存中的,也就是内存数据库,读写速度非常的快,因此Redis被广泛应用于缓存方向. 2.R ...

  6. redis持久化机制,深入分析redisAOF和RDB模式的利弊

    文章目录 写在前面 日志文件-AOF AOF的格式 AOF的写入方式 三种写回策略 AOF 中开启 always 刷盘策略也会存在数据丢失吗? AOF配置为每秒刷盘,有可能阻塞Redis,影响性能吗? ...

  7. Redis持久化机制 -全量同步与增量同步的区别

    全量同步与增量同步的区别 全量同步:就是每天定时(避开高峰期)或者采用一个周期实现将数据拷贝到一个地方也就是Rdb存储. 增量同步:比如采用对行为的操作实现对数据的同步,也就是AOF. 全量与增量的比 ...

  8. 缓存使用-4、Redis 持久化机制

    一.redis启动时载入持久化文件的流程. 二.redis两种持久化机制 两种持久化机制是RDB和AOF机制,下面介绍下是什么和优缺点. RDB持久化是指用数据集快照的方式记录redis数据库的所有键 ...

  9. Redis系列(五)Redis持久化机制

    文章目录 Redis持久化 为什么需要持久化 RDB 概念 触发条件(什么时候触发?) 自动触发 手动触发 通过RDB文件恢复数据 优势 不足 AOF 概念 同步机制 重写机制 重写过程 重写触发条件 ...

最新文章

  1. 谷歌AI专家爆料:90%的人都不知道,写不出好代码,是输在了这点上!
  2. Linux/服务器常用操作
  3. RegularExpressionValidator 控件用法
  4. 中国电信:全业务IP网络的安全运营
  5. 『Python』python 弹窗、提示和警告框MessageBox部件
  6. ubuntu设置始终亮屏_ubuntu设置关闭屏幕和锁定
  7. 正则表达式必知必会学习笔记
  8. 牛逼!国产开源的远程桌面火了,只有 9MB,支持自建中继器!
  9. linux启动mysql_允许远程连接到MySQL数据库服务器的步骤
  10. 系统集成项目管理案例答题技巧
  11. linux下下载文件到谷歌云盘,如何使用wget下载谷歌云端硬盘里的文件
  12. [答疑]请问商品领用审批的序列图画的对么
  13. 高速PCB电路板的信号完整性设计
  14. swift压缩图片的方法
  15. MLO/uboot-spl.bin和uboot.img/uboot.bin
  16. 程序员如何使正确卖出自己的程序但是不想被人知道代码的具体实现?
  17. php利用PDO对数据库的操作练习
  18. 如何旋转树莓派的显示屏幕
  19. “好奇号”现在距离地球有多远?
  20. sqlServer sa账号被锁定

热门文章

  1. python源代码怎么变成软件_python程序怎么变成软件
  2. 精选微软等公司数据结构+算法经典面试100题[1-80题]
  3. Webpack 快速入门
  4. MWeb入门-MWeb mac外部模式详细介绍
  5. 南开大学程明明-学术规范及论文写作指导
  6. 使用adb命令从手机传文件到电脑
  7. 抠像 : 实时视频抠像
  8. 计算机专业不想考专技岗,事业单位管理岗和专技岗考试区别到底有哪些?不懂你就戳进来...
  9. SQL Server系统数据库介绍
  10. Wireless Image Transmission Using Deep SourceChannel Coding With Attention Modules 阅读2021