前言
持久化就是数据库保存到存储设备上(比如磁盘)。防止数据的丢失。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。下面将介绍Redis持久化的两种方式。
一、RDB 快照持久化方式
也叫RDB持久化方式。就是通过拍摄快照的方式来实现持久化,Redis创建快照时,会将某一时刻存在于内存中的数据保存到本地文件中。在redis服务重新启动的时候会加载rdb文件中的数据。快照文件默认为dump.rdb。修改保存文件名:
进入redis安装目录
vi redis.conf
1.如何触发RDB持久化
1.1 手动触发
-
save命令
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下图:
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。 -
bgsave命令
执行该命令时,Redis会调用fork()方法创建一份子进程,用于对快照的操作,快照同时还可以响应客户端请求。具体流程如下图:
虽然bgsave会进行异步保存,但是如果频繁的进行快照,也会有两个问题:
1、加大磁盘的压力。
2、主进程fork子进程这个创建过程本身会阻塞主进程,而且快照的数据量越大,阻塞时间越大。
1.1 自动触发
进入redis安装目录
vi redis.conf
二、AOF 日志持久化方式
在Redis4.0以前,它会重写Redis的AOF日志。但在Redis4.0之后,Redis的AOF重写的时候就直接把RDB的内容写到AOF文件开头,将增量的以指令的方式Append到AOF文件。通俗的理解就是日志记录。
该方式默认是关闭的,需要我们手动开启,默认保存文件名:appendonly.aof。
修改保存文件名:
进入redis安装目录
vi redis.conf
AOF的触发放式
进入redis安装目录
vi redis.conf
三、RDB与AOF的优缺点
RDB优点:
(1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
(2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理
所有保存工作,主进程不需要进行任何磁盘IO操作。
(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
RDB缺点:
(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大.
(2) 快照持久化期间修改的数据不会被保存,可能丢失数据。数据完整性比较差。
AOF优点:
(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,
通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。
(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
(3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
AOF缺点:
(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大.
(2) 恢复数据时时间要比快照模式慢很多。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了redis的两种持久化方式,而想要更好的使用redis还需要我们更深入的学习。