redis持久化RDB和AOF

redis简介:

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部
分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
-----百度百科是这样子说的

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求
------简单来说是这样的

闲话少说,书归正传:

为什么要持久化:

由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。

RDB和AOF的原理

redis提供两种方式进行持久化:
一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),
一种是AOF持久化(原理是将Reids的操作日志以追加的方式写入文件

RDB:

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

打开配置文件(安装的目录下有redis-xxxxxxx-conf文件),大概在98-100的位置有下面图图片这个东东

这个东东
可以看到下面的配置信息:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

我们可以通过修改配置文件中的数据,应我们的访问数据设置最佳的配置数据
RDB实现原理图,图画的很丑看得懂就行
优势

(1)非常适合用于进行备份和灾难恢复。

(2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。

(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

劣势

在快照持久化期间修改的数据不会被保存,可能丢失数据。

AOF:

全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。

AOF实现原理图
在这里插入图片描述
AOF也有三种触发机制

(1)每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
(2)每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失
(3)不同no:从不同步

优点

(1)更好的保护数据不丢失,一秒执行一次,最多损失一秒内的数据

(2)写入性高,文件不容要被破坏

(3)可以通过恢复机制,自动恢复所有数据

缺点

(1)AOF快照数据大

(2)AOF开启后,每秒都要执行效率不高

(3)数据恢复不会一模一样和原来的

两者的选择总结:

建议:当在选择的时候两者结合配合使用最好–纯属废话啊哈哈哈哈

emmmmm