发布网友 发布时间:2023-02-03 10:40
共1个回答
热心网友 时间:2023-12-04 16:26
本节主要分析下Redis日志持久化机制,包括RDB、AOF以及360开源的Pika
AOF是 写后日志 ,即先写内存再记录日志;日志中记录用户的操作命令(类似mysql的binlog)
由于Redis是单线程,如果主线程处理写AOF务必会影响用户请求,因此Redis提供了三种写策略
小结:
Always 可靠性高,数据基本不丢失,但是每个命令都要写磁盘,性能影响较大;
Everysec 性能适中,宕机时最多丢失1秒数据,Redis的默认策略
No 性能好,但是宕机时丢失数据较多
思考此时AOF日志机制存在什么问题?
写AOF日志的目的是为了给数据做持久化,以便宕机或重启时还原内存数据,要实现这个目标需要考虑几个问题:
触发写AOF有两种方式:
再来思考下:重写机制之后AOF日志用于重启或宕机恢复redis还存在什么问题?
要想解决这两个问题就需要引入下面的RDB,gogogo...
RDB即内存快照,就是指内存中的数据在某一个时刻的状态记录(类似thread mp),把这一时刻的状态以文件的形式写到磁盘文件上,用于数据恢复;
触发RDB快照跟AOF一样,同样有两种方式:
看完AOF和RDB的方案,再继续思考下要想实现即高效又完全不丢失数据的目标,还存在哪些问题:
Pika 主要解决的是用户使用 Redis 的内存大小超过 50G、80G 等等这样的情况,会遇到启动恢复时间长,一主多从代价大,硬件成本贵,缓冲区容易写满等问题。Pika 就是针对这些场景的一个解决方案。
本节分析了AOF、RDB、Pika三种缓冲方案的实现,以及各自解决了什么问题,又带来了什么问题;具体使用时还要具体分析权衡利弊,下面几点建议