持久化操作
-
redis是基于内存的数据库,数据存储在内存上,服务器重启或者出现什么意外情况会导致数据丢失。
-
这里可以持久化数据放入硬盘的文件中。永远存储数据,在需要时将保存的数据进行恢复。
-
端口连接号:6379
-
持久化机制:
RDB方式(快照方式):将当前数据状态以快照的形式记录下来进行保存,储存格式简单,关注点在数据上。
AOF方式(日志方式):将操作数据的过程以日志的方式记录下来,存储格式复杂,关注在操作数据的过程。
RDB持久方式:
默认方式
在一定的时间间隔中。检测key的变化,然后持久化数据
配置核心配置文件,900秒内有一个数据改变就自动化保存数据。
-
使用save指令进行存储,默认的存储文件是
dump.rdb
; -
当Redis服务启动时候就会自动读取此文件,将存储的数据进行恢复;
-
save
指令直接将数据直接存储到磁盘上,若是数据过大且其他服务器也访问将会出现阻塞问题,影响性能(不建议使用),Redis提供了bgsave进行解决问题。-
/** **使用系统多进程 COW(Copy On Write) 机制 | fork 函数** Redis在持久化时会调用glibc的fork函数产生一个子进程,简单理解也就是基于当前进程复制了一个进程,主进程和子进程会共享内存里面的代码块和数据段: Redis是一个单线程的程序 1.save会直接调用rdbSave,会阻塞当前主进程,知道保存完成为止。在此阻塞期间服务器不能进行处理其他任何客户端的请求。 2.bgsave回调用一个folk函数生成一个子线程,子线程进行调用rdbSave,并且执行完成后返回信号,此期间主线程可以继续处理其他请求。 操作系统的COW机制来进行数据段页面的分离。数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面的数据进行修改时,会将被共享的页面复制一份分离出来,然后对这个复制的页面进行修改。这时子进程相应的页面是没有变化的,还是进程产生时那一瞬间的数据。 子进程因为数据没有变化,它能看到的内存里的数据在进程产生的一瞬间就凝固了,再也不会改变,这也是为什么 Redis的持久化叫「快照」的原因。接下来子进程就可以非常安心的遍历数据了进行序列化写磁盘了。 参考自:敖丙:https://mp.weixin.qq.com/s/O_qDco6-Dasu3RomWIK_Ig **/
-
-
save的相关:
save
指令配置根据使用场景进行设置,频率过高过低都导致性能下降;- 调用debug reload执行重启服务器进行自动保存数据;
- 服务器关闭时shutdown会自动保存数据。
RDB持久化的优点:
- RDB是一个紧凑压缩的二进制文件存储数据效率高;
- 此方法是某个时间点进行数据快照,适合数据备份,数据整体复制的场景;
- RDB恢复数据比AOF快。
RDB持久化的缺点:
- RDB是一个快照方式,一次数据量大,IO慢性能低下;
- 无法进行实时备份数据,数据丢失的情况大;
- bgSave指令每次执行都会创建一个子线程,内存开销。
AOF持久方式:
日志方式记录数据,记录每一条数据的操作
介绍:
- AOF实现持久化是以独立日志的方式记录每次写命令,重启时重新执行AOF文件恢复数据;
- 储存的是对数据的操作,实时性较高,目前AOF持久化是主流方式。
- AOF持久化方式写数据的过程是:
- Redis将命令写入AOF写命令缓冲区中,到达一定程度后进行将缓冲区的数据一次性写入AOF文件中。
- 每次操作写入AOF文件,数据实时性高,零误差但是因为Redis每秒写能达到十万以上,每次要进行IO此方式不推荐使用;
fsync
是一个很消耗资源的一个过程,默认使用每秒写入;- no:由操作系统控制每次同步到AOF文件的周期。
因为Redis默认是RDB方式,此方式需要配置文件设置:appendonly no|yes,开启之后会创建一个.aof文件,用于备份文件。
AOF重写:
不断的往.aof文件写入,数据过大存在废弃的过程;引入了AOF重写机制,对AOF进行压缩,得到最优的文件。
其 原理 就是 开辟一个子进程 对内存进行 遍历 转换成一系列 Redis 的操作指令,序列化到一个新的 AOF 日志文件 中。序列化完毕后再将操作期间发生的 增量 AOF 日志 追加到这个新的 AOF 日志文件中,追加完毕后就立即替代旧的 AOF 日志文件了,瘦身工作就完成了。
AOF重写作用:
- 降低磁盘占用量,提高磁盘使用率;
- 提高持久化效率,降低持久化写时间,提高IO性能;
- 提高数据恢复效率。
AOF重写规则:
- 超时数据不再写入文件;
- 忽略无效指令,只保存最终数据写入文件;
- 对于同一数据的多条写命令合并。
重写方式:
- 手动:bgrewriteaof指令
- 自动配置:
- AOF自动触发百分比 auto-aof-rewrite-percentage 100
- AOF自动触发最小尺寸 auto-aof-rewrite-min-size 64mb