前言

Redis是一种基于内存,通过key-value结构来实现的高性能nosql关系型数据库。它与memcached类似,不过Redis支持数据的持久化,而且支持的数据类型非常的丰富,如:string(字符串),list(列表),set(集合),sorted set(有序集合),hash(哈希)。除了支持丰富的数据类型之外,还能够在服务器端计算集合之间的交集,并集,补集等,还支持各种排序功能。所以说Redis也可以看做是一种数据结构服务器。

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。

由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。那么这两种持久化方式有什么区别呢,该如何选择呢?

Redis提供了两种方式的持久化机制:

①RDB持久化机制(Redis Database):是一种基于内存快照的持久化方式。将Redis在内存中的数据,在指定的时间间隔内将内存中的数据集快照写入磁盘

②AOF持久化机制(Append Only File):是redis使用日志的方式来持久化数据的一种方式。将操作日志aof文件通过追加的方式写入文件

RDB和AOF的区别

RDB持久化,是指在符合一定的条件下,将内存中的 数据集 以 快照 的方式写入磁盘,实际操作过程是fork一个子进程,先将数据写入临时文件,写入成功后,再替换之前的文件,用二进制压缩储存。

Redis会在以下几种情况下对数据进行快照:①根据redis.conf中配置规则进行自动快照(配置规则见文末)  ②用户执行save或者bgsave命令    ③执行flushall命令(清库操作)   ④执行主从复制操作时


AOF持久化,是以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的形式记录,可以打开文件查看到详细的操作记录。

RDB和AOF的优缺点

RDB的优点:

①一旦采用该方式,那么你的整个Reids数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。【适合大规模的数据恢复】

②相对于AOF存储的是日志,RDB更节省磁盘空间【节省磁盘空间】

③性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。

④相比于AOF机制,如果数据集很大,RDB机制的启动效率会更高。【恢复速度快】

RDB的缺点:

①会导致数据丢失。如果你想保证数据的高可用性,即最大限度的避免数据丢失。RDB机制不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将消失。

②由于RDB机制采用fork子进程来完成数据的持久化工作,所以,当数据集足够大时,可能会导致服务器停止几百毫秒,乃至于一秒钟都是有可能的。

参考:Redis持久化之大数据服务暂停问题_扛麻袋的少年的博客-CSDN博客

AOF的优点:

①该机制可以带来更高的安全性,即数据持久性。AOF提供了3种同步策略。即1、每秒同步  2、每次修改同步 3、不同步。

1.每秒同步:其本质也是异步操作。只是每秒钟强制写入磁盘一次,看着是效率也比较慢,但是官方已经在性能和持久化方向中做了很好的折中,推荐使用!!!

2.每次修改同步:我们可以视为它是同步持久化,即每次发生数据变化都会立即flush到磁盘,这种是效率最慢的,但是能够保证完整的持久化,不推荐使用!!!

3.不同步:性能最好,完全依赖OS,就是没有持久化操作,不推荐使用!!!

②由于AOF机制对日志文件的写入操作采用的是append模式,因此在写入过程中,即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过 redis-check-aof 工具 来帮助我们解决数据一致性的问题

③如果日志文件过大,Redis可以自动启用 rewrite 机制。即 Redis 以 append 模式不断的将修改数据写入到老的磁盘文件中。同时Redis会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行 rewrite 切换时可以更好的保证数据的安全性。

④AOF机制包含一个格式清晰、易于理解的日志文件,用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的恢复。

AOF的缺点:

①对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB在恢复大数据集的速度比AOF的恢复速度要快。

②根据同步策略的不同,AOF机制在运行效率上往往会慢于RDB机制。每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。

RDB和AOF如何选择?

       就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(AOF),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save(线上慎重使用save)或者bgsave的时候,再做备份(RDB)。我们可以通过命令:config get save

Redis默认使用的是 RDB。持久化规则为:

3600 1      #在3600秒(60分钟)之后,如果至少有1个key发生变化,则dump内存快照。
300 100     #在300秒(5分钟)之后,如果至少有100个key发生变化,则dump内存快照。
60 10000    #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

我们可以通过命令:config get save 来查看默认的持久化方案。也可以通过 config get * 来查看所有的配置类相关信息。

如果要关闭RDB,

①执行 config set save "" 即可。

②或者进入配置文件将:

Save 900 1

Save 300 10

Save 60 10000

注释掉,并打开save "" 的注释,使得  save ""  生效,即可关闭RDB

RDB和AOF在配置文件中如何配置

RDB持久化配置

Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.conf文件之后,我们搜索save,可以看到下面的配置信息:(三个配置之间是"或"的关系)

save 900 1           #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10          #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000        #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

AOF持久化配置(默认是关闭状态,修改redis.conf文件中appendonly为yes即可打开。如果rdb和aof同时打开,会优先使用AOF)

appendfsync always     #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec   #每秒钟同步一次,该策略为AOF的默认策略。
appendfsync no         #从不同步。高效但是数据不会被持久化。

Redis 禁用持久化

Redis是默认开启RDB的,AOF则是默认关闭的,相当于初始安装的Redis是持久化的。

如何关闭 Redis 持久化?我的需求是只把redis当作缓存来用,所以持久化到硬盘对我的需求来说没有意义。

修改redis配置文件,redis.conf 第115行左右。

#1.注释掉原来的持久化规则
save 900 1
save 300 10
save 60 10000   # 将这三行注释掉#2.设置为空
save ""#3.删除已持久化生成的dump.rdb文件(没有请忽略,如果使用中途要禁用持久化rdb,则需要删除dump.rdb文件)#4.重启redis服务即可。

AOF和RDB同时开启,Redis听谁的

AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

Redis持久化:RDB、AOF相关推荐

  1. [动图演示]Redis 持久化 RDB/AOF 详解与实践

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  2. Redis 持久化 RDB/AOF 详解与实践

    目录 一.什么叫持久化? 二.Redis 为什么要持久化? 三.Redis 怎么实现持久化? 四.RDB 方式与 AOF 方式的优势对比 五.RDB 方式与 AOF 方式的缺点对比 六.工作原理 七. ...

  3. Redis持久化RDB/AOF详解与实践

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  4. [动图演示]Redis 持久化 RDB/AOF 详解与实践 1

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  5. redis持久化RDB与AOF

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...

  6. redis 之redis持久化rdb与aof

    redis是内存型的数据库 重启服务器丢失数据 重启redis服务丢失数据 断电丢失数据 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种 ...

  7. 【Linux服务器开发系列】一场redis线上事故引发的思考丨redis持久化 rdb和aof丨redis主从复制

    一场redis线上事故引发的思考 1. 事故背景介绍 2. redis持久化 rdb和aof 3. redis主从复制 4. 解决方案详解 [Linux服务器开发系列]一场redis线上事故引发的思考 ...

  8. Redis持久化----RDB和AOF 的区别

    关于Redis说点什么,目前都是使用Redis作为数据缓存,缓存的目标主要是那些需要经常访问的数据,或计算复杂而耗时的数据.缓存的效果就是减少了数据库读的次数,减少了复杂数据的计算次数,从而提高了服务 ...

  9. Redis持久化 - RDB和AOF

    一.持久化的作用 1. 什么是持久化 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘). 持久化Redis所有数据保持在内存中,对数据的更新将异步地保 ...

  10. Redis持久化 RDB和AOF 比较与选择

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

最新文章

  1. 姚振宇:在数据科学培养下,我成为了那个不安分的“细菌” | 优秀毕业生专访...
  2. 第二单元linux系统
  3. linux下mysql定时备份数据库
  4. ORM的问题第2部分–查询
  5. fish工具_Python程序员使用哪些开发工具
  6. sql中in与php数组,格式化SQL“IN”子句的PHP数组
  7. python excel取列_python取excel表格第一列数据-python操作excel,使用xlrd模块,获取某一列数据的......
  8. 关于类微博的timeline的设计思考
  9. mysql 逻辑备份工具_MySQL逻辑备份工具-mydumper
  10. xp大容量u盘补丁_xp大容量硬盘补丁
  11. 高等代数——大学高等代数课程创新教材(丘维声)——第0章 笔记+习题
  12. afterburner功耗限制调不了_为啥我的MSIAfterburner很多项都拖不了
  13. java mac 加密_Algorithm:Java加密解密之MAC(消息认证码)
  14. PNAS:控制缺乏情感的肢体语言的大脑回路
  15. 哈工大计算机学院非全日制,哈尔滨工业大学非全日制研究生上课方式
  16. 360全景拍摄教程:鱼眼全景图拍摄方法
  17. JavaScript传参的6种方式
  18. HTTP中的301重定向和302暂重定向重定
  19. 如何在Linux中安装应用程序
  20. A. Magical Sticks

热门文章

  1. c语言中typeof,运算符关键字typeof的使用
  2. 使用WebCollector爬取时光网电影数据
  3. mysql错误1053 服务没有及时响应启动或控制请求_windows服务安装启动报错误1053:服务没有及时响应启动或控制请求...
  4. @Bean的方法中如何注入同一个@Configuration注解的类里的其他@Bean注解的bean
  5. Mikrotik路由系统升级方式
  6. flashback功能全解析
  7. 矩阵论笔记(三)——欧氏空间与正交变换
  8. 疑惑,System.currentTimeMillis真有性能问题?
  9. windows下Redis-cluster集群搭建
  10. 【web素材】09—150款+炫酷的CSS3 loading加载动画,总有一款适合你