一 持久化的必要性
redis持久化的目的主要是为了故障恢复。
把持久化文件定期备份到其他存储设备,遇到灾难的时候可以恢复。
二 持久化的分类和适用场景
-
RDB 模式(快照模式)
每隔一定时间(如几分钟),定期生成当前redis内存中数据的一个快照文件。
redis会开启一个新的子进程,由子进程来做内存数据快照。因此不会阻塞当前主进程效率。由于是内存快照,所以加载还原会很快。 -
AOF模式(追加模式)
一条数据一条数据的追加到AOF文件中。追加过程如下:- 每增加一条数据,就把数据追加到操作系统内存空间。
- 然后redis每一秒都会刷(fsync)一下操作系统内存中数据到磁盘的AOF文件中。
- 可见AOF文件会逐渐增大,于是当AOF增加到一定程度后,redis就会执行rewrite命令,重新基于当前内存数据生成一个新的AOF文件,然后基于新的AOF文件做数据写入,并删除原来老的AOF文件。
- 所以AOF始终只有一个文件,还占磁盘空间。
三 持久化的企业级持久化方案
- RDB通过子进程来生成内存快照,效率高,不影响主进程,还原效率高(内存直接加载)。数据健壮。
缺点是快照周期生成,可能还原后会与真实情况数据缺失。如果内存数据过大,fork生成数据时,可能会影响主进程的读写,导致无响应几秒钟。建议间隔周期不要太大。
非常适合冷备场景。
*AOF是每次都要去处理文件,导致写速度没有RDB高。由于是数据文件,所以在还原时较慢。数据文件大,占据磁盘空间大,数据文件结构复杂。优点是数据备份齐全(可能只有一秒误差)。可以认为是一个数据处理日志。
非常适合由于客户端误操作导致数据丢失等场景。比如误删除了一批数据,这时候,可以在AOF还没有进行rewrite之前,把AOF文件中的误删除命令删除,再恢复之前的数据。
综上,redis实际上支持两种持久化方式同时开启,建议两者都开始。AOF作为热备,当前进程重启恢复数据用。RDB作为冷备,为磁盘崩溃等场景恢复数据适用。
网友评论