一、 Redis 提供了不同级别的持久化方式:

Redis提供了两种方式对数据进行持久化,分别是RDB和AOF。
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。
你也可以同时开启两种持久化方式,,在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

二、 配置文件中对两种存储方式的设置

Redis默认开启RDB的存储方式。
The filename where to dump the DB
dbfilename “dump.rdb”
对于AOF的存储方式redis并没有默认开启。通过配置开启如下:

把注释去掉就开启了AOF的存储方式。

三、 RDB(Redis DataBase)介绍

开启RDB方式redis会在指定的时间段内将内存中的数据快照到磁盘中,redis启动时再恢复到内存中。
Redis会单独创建(fork)一个线程,将数据写入到临时文件中,持久化的过程都结束了,在用这个临时文件替换上次的临时文件。
如果需要进行大规模的数据恢复,并且对于数据恢复不是很敏感,RDB的方式比AOF方式更加高效,RDB的缺点就在于最后一次持久化后的数据有可能会丢失。
RDB持久化数据触发配置在redis.conf中:

默认是当一条数据写入时15分钟持久化一次,当10条数据发生变化5分钟(为了测试方便改成了2分钟)持久化一次,当10000条数据发生变化1分钟进行持久化。
RDB存储方式测试:

两分钟后在文件夹中生成了一个dump.rdb的文件,这个就是临时文件,保存该临时文件。

再次清空数据库:

然后删除dum.rdb文件,将dump.rdb.bk文件恢复成dump.rdb。再启动服务器。

如上图所示,redis中的数据已经从dump.rdb中恢复过来了。

四、 AOF(APPEND ONLY FILE)存储介绍

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),
只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis
重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
注:所有的指令记录也包括flushDB操作,后面会有坑。
在redis中这种存储方式默认是关闭的,需要在redis.conf文件中开启,开启方式在文中已经做了介绍,就不在赘述。
Redis对于AOF存储方式是怎么持久化的在redis.conf也有,如下:

配置文件对于这种方式的持久化有三种方式:
1、 有写操作就写。显然这种方式影响性能。但是数据完整,不会丢数据
2、 不开启。不开启AOF就没意思了
3、 每秒写文件。折中的方式更加合适。但是有可能导致一秒的数据丢失。

AOF的重写(Rewrite)

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,
当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩。

重写原理

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

触发机制:

Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。

AOF存储方式优点:

1、 每秒同步。
2、 每修改同步。

AOF存储方式缺点:

1、 AOF文件远大于EDB。
2、 运行效率慢。

AOF存储方式测试:

1、写入数据

3、 写入之后在文件夹中出现了AOF文件,再对这个文件进行备份

4、 清空数据库并退出

5、 恢复appendonly.aof文件

6、 启动redis服务器,查看数据

如图所示数据已经恢复。

五、 同时开启了RDB和AOF两种方式默认是哪种方式?

从刚才测试AOF可以看出两种方式同时开启是使用AOF的存储方式。

当只开启了RBD方式时数据库中有10条数据,当开启了AOF方式之后,由于appendonly.aof文件中没有备份数据,所以启动后如第二个框中框出的所示没有数据。从这里可以看出默认首先使用AOF的存储方式。

六、 Redis重写

AOF是使用文件追加的方式,随着系统使用的越来越久,AOF的文件会越来越大,当AOF的大小超过文件大小所设定的阈值时,Redis就会启动AOF文件内容压缩,只保留可以恢复的最小指令集。
重写原理:对文件进行压缩(AOF文件过大时,redis会fork出一条新的进程将文件重写,遍历新进程中的内存数据)。
触发条件:Redis会记录上次重写时AOF的大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍,且文件大于64M时触发,可以在配置文件中修改。

七、 小结

1、 同时开启两种方式优先使用AOF方式。
2、 一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能。
3、 如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。
4、 有很多用户都只使用 AOF 持久化, 但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免之前提到的 AOF 程序的 bug 。

分布式内存数据库---Redis的持久化相关推荐

  1. 我的架构梦:(六十三) 分布式缓存 Redis 之持久化

    分布式缓存 Redis 之持久化 一.前言 1.学习目标 2.为什么要持久化 二.RDB 1.触发快照的方式 2.RDB执行流程(原理) 3.RDB文件结构 4.RDB的优缺点 三.AOF 1.AOF ...

  2. 分布式内存数据库--Redis事务

    一. 事务: 与关系型数据库一样redis也支持事务.也就是可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 二. 事务能 ...

  3. 分布式内存数据库---redis配置文件常用配置介绍

    想要熟练使用redis,那么redis的相关配置也要非常熟悉,在大数据开发中使用redis就常常需要修改redis的常见配置. 一. redis的单位 redis的数据单位跟常用的单位有点不一样,打开 ...

  4. 分布式内存数据库---Redis操作String、list、set、hash和Zset

    Redis是一个Key-Value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类 ...

  5. 分布式内存数据库---Redis数据库之(键)key

    Redis数据库之(键)key 前面讲了Redis存储的数据类型是key-value类型,Value可以是如String.List.Set.Hashes和Sorted-Set.这些命令都具有一个共同点 ...

  6. 深入理解Redis的持久化机制和原理

    Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,Redis ...

  7. redis的持久化方式RDB和AOF的区别

    https://blog.csdn.net/m0_38110132/article/details/76906422 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITe ...

  8. 高性能分布式缓存Redis(缓存分类 安装 数据类型选择和应用场景 发布订阅 事务 Lua脚本 慢查询日志)

    高性能分布式缓存Redis 高性能分布式缓存Redis 1. 缓存发展史&缓存分类 1.1 大型网站中缓存的使用 1.2 常见缓存的分类 1.3 分布式缓存选型方案对比 2. Redis概述& ...

  9. 第五阶段-第五阶段高性能分布式缓存Redis

    第五阶段 大型分布式系统缓存架构进阶 文章目录 第五阶段 大型分布式系统缓存架构进阶 第一部分 Redis 快速实战 第一节 缓存原理与设计 1.1 缓存基本思想 1.11 缓存的使用场景 1.12 ...

最新文章

  1. window 10 系统 部分软件打开图标的修改
  2. 程序员深夜啪啪啪真相,看完笑翻!
  3. 使用AxiosJavaScript中的简单HTTP请求
  4. 网约车司机无证最低罚款拟从10000元降至200元
  5. android简单小项目实例_自学(系统学)Python了那么久, 想就业? 几个简单小项目让你通过面试!...
  6. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较
  7. Python+OpenCV:二维直方图(2D Histograms)
  8. eclipse+mysql+tomcat配置JNDI
  9. (转)基于.Net的单点登录(SSO)解决方案(1)
  10. C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
  11. 经验模态分解股票波动matlab,LMD经验模态分解matlab程序——原味的
  12. 一:细说python3中sort和sorted
  13. JSAAS的Activiti会签开发扩展处理
  14. python爬取豆瓣电影top250_python3爬取豆瓣top250电影
  15. 用户的登陆认证、DjangoRestFramework JWT多条件登录,导航栏实现
  16. 如何增加你微博的粉丝人数?微博推广20绝招
  17. 苹果iOS系统下的推送机制及实现
  18. 物联卡中心:物联卡是正规卡吗?与流量卡有什么区别?
  19. Java的反射机制?
  20. AutoCAD .NET: 遍历模型空间

热门文章

  1. C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?
  2. c语言溢出该怎么算,解决整数运算溢出方法——C语言
  3. php获取curl头_php中CURL请求头和响应头获取方法
  4. kernel 中标准的 ir 模块的 时间的定义_Linux开机流程详解:BIOSgt;MBRgt;GRUBgt;Kernel...
  5. 全志 添加PWM7参数
  6. php千人千面框架,千人千面的设计才是最好设计!安卓 UI 可以如此自由
  7. 选择排序稳定吗_最常见的四种数据结构排序算法你不知道?年末怎么跳槽涨薪...
  8. Linux下批量重命名的方法
  9. Apache状态监测集重启
  10. 数据库常忽略小问题汇总