Redis数据持久化

Redis数据持久化

Redis提供了将数据按期自动持久化到硬盘的能力,包括RDB,AOF两种方案,两种方案各有利弊,能够配合起来同时使用,确保数据的稳定性。redis

必须使用数据持久化吗?

Redis数据持久化机制是能够关闭的。若是把 Redis服务做为缓存服务使用,Redis中存储的全部数据都不是该数据的主体而仅仅是同步过来的备份,则能够关闭Redis的数据持久化机制。缓存

但一般,仍要建议至少开启 RDB方式的数据持久化,由于:安全

  • RDB方式的持久化几乎不损耗 Redis自己的性能,在进行 RDB持久化时,Redis 主进程惟一须要作的事情就是 fork出一个子进程,全部持久化工做都由子进程完成。bash

  • Redis不管由于什么缘由crash掉以后,重启时可以自动恢复到上一次RDB快照中记录的数据。这省去了手工从其余数据源(如DB)同步数据的过程,并且要比其余任何的数据恢复方式都要快。app

  • 如今硬盘那么大,真的不缺那一点地方ide

RDB

采用RDB持久方式,Redis会按期保存数据快照至一个 rbd 文件中,并在启动时自动加载rdb文件,恢复以前保存的数据。能够在配置文件中配置 Redis 进行快照保存的时机:工具

save [seconds] [changes]

   意为在[seconds]秒内若是发生了[changes]次数据修改,则进行一次RDB快照保存,例如性能

save 60 100

会让Redis每60秒检查一次数据变动状况,若是发生了100次或以上的数据变动,则进行RDB快照保存。
能够配置多条save指令,让Redis执行多级的快照保存策略。
Redis默认开启RDB快照,默认的RDB策略以下:线程

save 900 1
save 300 10
save 60 10000

也能够经过BGSAVE命令手工触发RDB快照保存。日志

RDB的优势:

  • 对性能影响最小。如前文所述,Redis在保存RDB快照时会fork出子进程进行,几乎不影响Redis处理客户端请求的效率。

  • 每次快照会生成一个完整的数据快照文件,因此能够辅以其余手段保存多个时间点的快照(例如把天天0点的快照备份至其余存储媒介中),做为很是可靠的灾难恢复手段。

  • 使用RDB文件进行数据恢复比使用AOF要快不少。

RDB的缺点:

  • 快照是按期生成的,因此在Redis crash时或多或少会丢失一部分数据。

  • 若是数据集很是大且CPU不够强(好比单核CPU),Redis在fork子进程时可能会消耗相对较长的时间(长至1秒),影响这期间的客户端请求。

AOF

采用AOF持久方式时,Redis会把每个写请求都记录在一个日志文件里。在Redis重启时,会把AOF文件中记录的全部写操做顺序执行一遍,确保数据恢复到最新。

AOF默认是关闭的,如要开启,进行以下配置:

appendonly yes

AOF提供了三种fsync配置,always/everysec/no,经过配置项[appendfsync]指定:

  • appendfsync no:不进行fsync,将flush文件的时机交给OS决定,速度最快

  • appendfsync always:每写入一条日志就进行一次fsync操做,数据安全性最高,但速度最慢

  • appendfsync everysec:折中的作法,交由后台线程每秒fsync一次

随着AOF不断地记录写操做日志,一定会出现一些无用的日志,例如某个时间点执行了命令SET key1 "abc",在以后某个时间点又执行了SET key1 "bcd",那么第一条命令很显然是没有用的。大量的无用日志会让AOF文件过大,也会让数据恢复的时间过长。
因此Redis提供了AOF rewrite功能,能够重写AOF文件,只保留可以把数据恢复到最新状态的最小写操做集。
AOF rewrite能够经过BGREWRITEAOF命令触发,也能够配置Redis按期自动进行:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

上面两行配置的含义是,Redis在每次AOF rewrite时,会记录完成rewrite后的AOF日志大小,当AOF日志大小在该基础上增加了100%后,自动进行AOF rewrite。同时若是增加的大小没有达到64mb,则不会进行rewrite。

AOF的优势

  • 最安全,在启用appendfsync always时,任何已写入的数据都不会丢失,使用在启用appendfsync everysec也至多只会丢失1秒的数据。

  • AOF文件在发生断电等问题时也不会损坏,即便出现了某条日志只写入了一半的状况,也可使用redis-check-aof工具轻松修复。

  • AOF文件易读,可修改,在进行了某些错误的数据清除操做后,只要AOF文件没有rewrite,就能够把AOF文件备份出来,把错误的命令删除,而后恢复数据。

AOF的缺点:

  • AOF文件一般比RDB文件更大

  • 性能消耗比RDB高

  • 数据恢复速度比RDB慢

相关文章
相关标签/搜索