redis有两种持久化机制,一种是RDB,一种是AOF
RDB是每隔一段时间,生成一个RDB的文件快照,存放在磁盘上。
AOF是当来一条数据redis是往AOF中写一条数据,写的是日志指令格式,AOF是存放在os cache中,它会每隔一秒向操作系统发送fsync命令,让os强转将AOF的日志指令写入磁盘中。
由于redis的缓存大小是限量的,所以当redis的缓存达到了一定大小后,便会使用缓存淘汰算法,删除一些不经常使用的数据,AOF文件的大小也是有限量的,当AOF文件达到了上限后,redis会向AOF执行rewrite操作,根据redis自身现有的数据生成一个新的AOF文件,而旧的已经上限的AOF文件会被直接干掉。
当redis发生灾难性宕机后,数据恢复会优先调用AOF文件,重新根据日志指令来构建redis缓存数据,因为AOF比RDB持久化的数据更加完整
搭建redis集群时,要解决异步复制和脑裂的数据丢失问题,通过复制的时间延迟来进行,设置master对slave复制的延迟时间在10秒内,如果master向slave复制RDB快照,时间延迟超过了10秒,master就直接拒绝请求的写操作,等待slave的数据与master的数据相差在10秒内,再接收请求。在master拒绝写操作时,直接在client端做服务降级,让数据存在本地磁盘,来对外访问,并同时将请求放在消息队列,等待master接收请求再写入
哨兵机制中的quorum和majority
quorum=2是指 只要有两个哨兵sdown了,就将sdown转为odown
majority=3是指 在sdown的情况下,只要有3个哨兵同意故障转移就让一个哨兵去执行故障转移 |
|