(1)什么是Redis持久化机制?持久化包括哪些机制?
Redis持久化机制:为了能够重用Redis数据(防止系统故障导致数据丢失),我们需要将Redis中的数据写入到磁盘空间中。
两种持久化方法:快照RDB,只追加文件AOF。
快照RDB:RDB在指定的时间间隔内,将内存中的数据集快照写入磁盘,它恢复数据时,是将快照文件直接读到内存里。
优势:适合大规模的数据恢复;对数据完整性和一致性要求不高。
劣势:在一定间隔时间做一次备份,所以如果Redis意外 down 掉的话,就会丢失最后一次快照后的所有修改。
只追加文件AOF:AOF 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件,但不可以改写文件。Redis重启,就会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。AOF采用文件追加方式,文件会越来越大,为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时, Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集.。
优势:①每修改同步:每次发生数据变更会被立即记录到磁盘,性能较差但数据完整性比较好。②每秒同步:每秒记录,如果一秒内宕机,有部分数据丢失。③不同步:从不同步。
劣势:相同数据集的数据而言,aof 文件相比 rdb 文件,占用存储空间大、恢复速度小、运行效率低,每秒同步策略效率较好,不同步效率和 rdb 相同
(2)如何选择合适的持久化机制?Redis 4.0 对于持久化机制做了什么优化?
关闭持久化:如果数据的持久性要求不高,或者数据能够轻松地从其它源头重新生成,那么为了最大化Redis的性能,可以选择关闭持久化功能。这意味着当Redis服务器停止或重启时,内存中的所有数据都将丢失。
RDB持久化:当数据具有一定的重要性,但允许一定时间窗口内的数据丢失(比如几分钟),并且主要用作缓存或者短时间内可容忍少量数据丢失的情况,可以选用RDB持久化。RDB会在预设的时间间隔或满足特定条件时,通过生成数据的快照来保存数据。这种方式的优点在于恢复速度快,占用磁盘空间小,但在服务器突然宕机的情况下,可能会丢失最后一次快照以来的部分数据。
结合使用RDB和AOF:
对于数据完整性要求较高,不能接受任何非计划内的数据丢失,尤其是将Redis当作内存数据库使用的场景,推荐同时启用RDB和AOF持久化。RDB用于周期性的生成数据的完整快照,方便做数据备份和灾难恢复,而AOF则记录每一次写命令,确保数据的实时性和一致性。即使在Redis意外崩溃的情况下,AOF能够最大程度减少数据损失,因为它持续记录了所有写操作日志,并在Redis启动时按照日志重放来恢复数据。
Redis 4.0持久化机制优化:
Redis 4.0以后还支持混合持久化,即将RDB快照和AOF日志相结合,RDB格式的全量数据作为文件的开头部分,然后追加增量的AOF命令。这样做的好处是,在Redis重启时,首先加载RDB格式的全量数据,从而加快了重启过程中的数据恢复速度,因为RDB文件加载更快;同时又保留了AOF的全部增量更新,从而保证了数据的一致性和完整性。(新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据)(兼容性差,一旦开启了混合持久化,在4.0之前版本都不识别该aof文件)