1.RDB(Redis DataBase)

  1.1 定义:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的snapshot快照,他恢复时是将快照文件直接读到内存里

  是什么:Redis会单独创建(fork) -一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何I0操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一.次持久化后的数据可能丢失。(在替换的时候出问题)

  1.2 fork:Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程(如果fork的东西特别大,就相对于吧东西乘2)

  1.3 RDB保存的是dump.rdb:在Redis.conf中的快照中有设置DB(

    1.会自动保存,在哪个文件夹下运行的Redis就会在哪个文件夹下生成dump.rdb         s

    2.ave 900 1:意思是在900秒内有一个key被改变就保存,注意这里保存是按照时间来算的,到时间检查一次

    3.直接保存,在命令里面输入save 或bgsave  127.2.2.1:6379>save

      3.1 save时只管保存,其他不管,全部阻塞

      3.2 bgsave,Redis会在后台异步进行快照操作,快照同时还可以响应客户端的请求,可以通过lastsave命令获取最后一次成功执行快照的时间

    4.flashall 会刷新所有然后瞬间保存一个空的rdb

            

    5.stop-writes-on-bgsave-error  在保存出错的时候停止写入(如果配置成no,表示你不在乎数据不一致或者有其他手段发现和控制)

    6.rdbcompression:对于存储到磁盘中的快照,可以设置是否压缩存储,如果是的话会采用LZF算法进行压缩,如果你不想小号CPU来进行压缩的话可以设置为关闭此功能。

    7.rdbchecksum:在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做为·增加大约10%的性能消耗,如果希望活力到最大的性能提升,可以关闭此功能

    8.dbfilename  默认的RDB的名字

    9.dir 存储的dir)

  1.4 优势:适合大规模的数据恢复,对数据完整性和一致性要求不高因为到时间保存一次如果还没保存就死了,那么最近的一段时间的数据就没了

  1.5 劣势:1.在一定间隔时间做一次备份,如果Redis意外down掉的话,就会丢失最后一次快照的所有修改

     2.fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑

  1.6 动态停止RDB保存规则的方法:redis-cli config set save " "

 2.AOF(append only file)

  2.1 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

  2.2 AOF默认是关闭的,打开在conf中设置yes就可以打开

  2.3 AOF生成的aof文件是可以和RDB共存的,但是两者都设置为yes的话启动找的是AOF文件

  2.4 如果AOF文件或者RDB文件因为什么事情导致乱码什么的,可以用redis-check-aof --fix appendonly.aof,他会自动清除乱码不符合的地方。

  2.5 appendfsync :设置保存的方式,修改一条就备份一条还是每秒

    2.5.1 Always: 同步持久化每次发生数据变更会被立即记录到磁盘性能较差但数据完整性比较好

    2.5.2 Everysec:出厂默认推荐,异步操作,每秒记录如果 - -秒内宕机,有数据丢失

    2.5.3 NO

  2.6 Rewrite 重写

    2.6.1 AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阙值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof

    2.6.2重写原理:AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重多了一个新的aof文件,这点和快照有点类似.

    2.6.3 触发机制:Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于设置的最大内存的时候触发

  2.7 优势: 每修改同步:appendfsync always同步持久化 每次发生数据变更会被立即记录到磁盘性能较差但数据完整性好

       每秒同步::appendfsync everysec 异步操作,每秒记录如果一秒内宕机, 有数据丢失

       不同步 :appendfsync no 从不同步

  2.8劣势:  相同的数据而言aof要远大于rbd文件,恢复速度要慢与rbd

        aof运行效率要慢于rbd,每秒同步策略效率较好,不同步效率和rdb相同

总结:RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式,同时开启两种持久化方式,


性能建议:

因为RDB文件只用作后备用途,建议只在Slave.上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。

如果Enalbe AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。代价一 是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘 许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。

如果不Enable AOF,仅靠Master-Slave Replication实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。新浪微博就选用了这种架构

七:Redis的持久化的更多相关文章

  1. Redis详解(七)------ AOF 持久化

    上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失).对于数据完整性要求很严 ...

  2. redis + 主从 + 持久化 + 分片 + 集群 + spring集成

    Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...

  3. Redis 之持久化

    目录 一.前言 二.持久化类型之 RDB 三.持节化类型之AOF 四.Redis 持久化类型的抉择 五.持久化的恢复 六.持久化问题的分析定位与优化 七.回顾总结 一.前言 首先,来回顾下前面文章的知 ...

  4. (八)Redis之持久化之AOF方式

    一.概念 AOF方式:将以日志,记录每一个操作 优势:安全性相对RDB方式高很多: 劣势:效率相对RDB方式低很多: 二.案例 appendonly no默认关闭aof方式 我们修改成yes 就开启 ...

  5. 删库到跑路?还得看这篇Redis数据库持久化与企业容灾备份恢复实战指南

    本章目录 0x00 数据持久化 1.RDB 方式 2.AOF 方式 如何抉择 RDB OR AOF? 0x01 备份容灾 一.备份 1.手动备份redis数据库 2.迁移Redis指定db-数据库 3 ...

  6. Redis总结(四)Redis 的持久化

    前面已经总结了Redis 的安装和使用今天讲下Redis 的持久化. redis跟memcached类似,都是内存数据库,不过redis支持数据持久化,也就是说redis可以将内存中的数据同步到磁盘来 ...

  7. Redis的持久化的两种方式drbd以及aof日志方式

    redis的持久化配置: 主要包括两种方式:1.快照  2 日志 来看一下redis的rdb的配置选项和它的工作原理: save 900 1 // 表示的是900s内,有1条写入,则产生快照 save ...

  8. redis启用持久化

    redis的持久化有rdb和aof两种. rdb是记录一段时间内的操作,一盘的配置是一段时间内操作超过多少次就持久化. aof可以实现每次操作都持久化. 这里我们使用aof. 配置方式,打开redis ...

  9. Redis笔记(八)Redis的持久化

    Redis相比Memcached的很大一个优势是支持数据的持久化, 通常持久化的场景一个是做数据库使用,另一个是Redis在做缓存服务器时,防止缓存失效. Redis的持久化主要有快照Snapshot ...

  10. 深入剖析 redis AOF 持久化策略

    本篇主要讲的是 AOF 持久化,了解 AOF 的数据组织方式和运作机制.redis 主要在 aof.c 中实现 AOF 的操作. 数据结构 rio redis AOF 持久化同样借助了 struct ...

随机推荐

  1. npoi 设置单元格格式

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. frp 内网穿透远程桌面(Windows 10)配置

    一.服务端配置 服务端需要公网环境,一般用一台云服务器就行了,我选择的是 Linux 服务器,Windows 服务器也是可以的. 下载 frp: wget https://github.com/fat ...

  3. WCF服务创建到发布(SqlServer版)

    在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构.该架构的项层为服务模型层. 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型. ...

  4. Docker学习笔记之-在虚拟机VM上安装CentOS 7.8

    虚拟机VM版本:VMware Workstation Pro 16 中文虚拟机软件专业版 到官网下载即可,或者也可以通过下边链接下载 下载地址: http://www.epinv.com/post/1 ...

  5. LIS初级推算(最长上升子序列问题)

    所谓LIS,就是Longest Increasing Subsequence问题 注意,子序列不一定是连续的,举个例子:对于序列10,9,2,3,5,4,7,9,101,18,其中的LIS就是2,3, ...

  6. Sec-Fetch-*请求头,了解下?

    如果你使用76+版本的chrome浏览器,通过开发者面板查看每个网络请求,会发现都有几个Sec-Fetch开头的请求头,例如访问百度首页https://www.baidu.com/的请求: Sec-F ...

  7. Swagger配置与使用

    问题:前后端分离时代的到来 前端需要测试后端数据 后端提供接口,实时更新接口的改动 一.Swagger简介 号称世界上最流行的api框架 Restful api文档在线自动生成工具-->api文 ...

  8. Redis缓存雪崩和穿透的解决方法

    转载自: https://blog.csdn.net/qq_35433716/article/details/86375506 如何解决缓存雪崩?如何解决缓存穿透?如何保证缓存与数据库双写时一致的问题 ...

  9. RestfulApi 学习笔记——简单介绍(一)

    前言 什么是restapi? 直接看:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 阮一峰的blog,即可明白,下面是一些例子,增强理 ...

  10. 使用 Dockerfile 文件但是不使用缓存生成镜像

    前一段时候使用 Dockerfile 重新部署 NetCore3.1 项目的时候很顺利,由来由于一些原因,我把以前的镜像删除,如果我们大家继续使用 docker  build 命令去生成镜像的话就会报 ...