Redis提供两种持久化方式:RDB和AOF。下面介绍RDB。
RDB(Redis DataBase)是Redis默认的持久化方式,其原理是将当前时刻Redis存储的数据以快照形式写入硬盘,用于在Redis重启时恢复数据。
Redis在进行RDB持久化时,会fork出一个子进程负责生成RDB文件。在生成期间,Redis主进程继续响应客户端请求。生成完毕后,Redis会将新的RDB文件替换旧的RDB文件,完成持久化。
RDB持久化的配置项:
- save m n:在m秒内有n次修改操作,则进行持久化操作。
- stop-writes-on-bgsave-error yes/no:当RDB快照持久化出错时,是否停止写入操作。
- rdbcompression yes/no:是否开启压缩。开启后虽然可以减少磁盘占用,但生成和加载时需要消耗更多的CPU时间。
- rdbchecksum yes/no:是否开启校验和。开启后可以确保数据的完整性,但是需要更多的CPU资源。
生成的RDB文件可以通过redis-cli的命令进行加载,例如:
127.0.0.1:6379> BGSAVE # 后台进行RDB持久化
Background saving started
127.0.0.1:6379> LASTSAVE # 获取最后一次RDB持久化的时间
1566171804
127.0.0.1:6379> SHUTDOWN SAVE # 保存当前内存中的数据到磁盘,并关闭Redis
RDB持久化的优点和缺点:
优点:
RDB文件是一个完整的数据快照,加载速度快。
RDB文件体积相对较小,对磁盘占用比较友好。
生成和加载RDB文件对CPU的消耗较小,适用于数据集较大的情况。
缺点:
RDB文件生成时间间隔较长,如果Redis发生故障,最后一次持久化的数据可能会丢失。
在一些特殊场景(如fork出的子进程大于内存容量)下,RDB文件生成会导致Redis主进程短暂停止服务。
RDB持久化适用于需要快速恢复大量数据的场景,例如数据集较大或者Redis中的数据变化不是非常频繁的情况。需要注意的是,RDB持久化不能保证数据实时同步到磁盘,因此如果需要更高的数据可靠性和实时性,可以考虑使用AOF持久化方式。