平面设计有什么网站,哪些网站可以做邀请函,ui网站界面,个人简历通用免费模板我们已经知道对于一个企业级的redis架构来说#xff0c;持久化是不可减少的。企业级redis集群架构#xff1a;海量数据、高并发、高可用持久化主要是做灾难恢复#xff0c;数据恢复#xff0c;也可以归类到高可用的一个环节里面去#xff0c;比如你redis整个挂了#xff…我们已经知道对于一个企业级的redis架构来说持久化是不可减少的。企业级redis集群架构海量数据、高并发、高可用持久化主要是做灾难恢复数据恢复也可以归类到高可用的一个环节里面去比如你redis整个挂了然后redis就不可用了你要做的事情是让redis变得可用尽快变得可用。此时你需要重启redis尽快让它对外提供服务但是如果你没做数据备份这个时候redis启动了里面也是没有数据的所以一样也用不了也没办法向外提供服务。所以当此刻有大量的请求过来缓存全部无法命中在redis里根本找不到数据这个时候系统缓存雪崩问题所有请求没有在redis命中就会去mysql数据库这种数据源头中去找一下子mysql承接高并发然后就挂了。mysql挂掉你都没法去找数据恢复到redis里面去redis的数据从哪儿来从mysql来。具体的完整的缓存雪崩的场景还有企业级的解决方案会在后面的文章中解释。如果你把redis的持久化做好备份和恢复方案做到企业级的程度那么即使你的redis故障了也可以通过备份数据快速恢复一旦恢复立即对外提供服务。1、RDB和AOF两种持久化机制的介绍redis持久化RDBAOF1)、RDB持久化机制对redis中的数据进行周期性的持久化。2)、AOF机制对每条写入命令作为日志以append-only的模式写入一个日志文件中在redis重启的时候可以通过回放AOF日志中的写入指令来重新构建整个数据集。3)、通过RDB或AOF都可以将redis内存中的数据给持久化到磁盘上然后可以将这些数据备份到别的地方比如说阿里云华为云等云服务。此时如果redis挂了服务器上的内存和磁盘上的数据都丢了可以从云服务上拷贝回来之前的数据放到指定的目录中然后重新启动redisredis就会自动根据持久化数据文件中的数据去恢复内存中的数据继续对外提供服务。注意 1、如果同时使用RDB和AOF两种持久化机制那么在redis重启的时候会使用AOF来重新构建数据因为AOF中的数据更加完整(优先加载)注意 2、如果我们想要redis仅仅作为纯内存的缓存来用那么可以禁止RDB和AOF的持久化机制2、RDB持久化机制的优点1)、RDB会生成多个数据文件每个数据文件都代表了某一个时刻中redis的数据这种多个数据文件的方式非常适合做冷备可以将这种完整的数据文件发送到一些远程的安全存储上去比如华为云、阿里云等云存储上按照制定好的备份策略来定期备份redis中的数据。2)、RDB这种持久化机制对redis对外提供的读写服务影响非常小可以让redis保持高性能因为redis主进程只需要fork一个子进程让子进程执行磁盘IO操作来进行RDB持久化即可。3)、相对于AOF持久化机制来说直接基于RDB这种持久化机制生成的数据文件来重启和恢复redis进程更加快速因为不像AOF那样需要一步一步的回放之前的操作指令之后再进行恢复。(容易发生问题难免出错)3、RDB持久化机制的缺点1)、如果想要在redis发生故障时尽可能少的丢失数据那么RDB持久化机制没有AOF持久化机制好。通常情况下RDB持久化机制产生的数据快照文件都是每隔5分钟或者更长时间生成一次如果这个时候就redis进程宕机的话那么就难免会丢失最近5分钟的数据。2)、RDB这种持久化机制每次在fork子进程来执行RDB快照数据文件生成的时候如果需要备份的数据文件特别大的话可能会导致redis对客户端提供的服务暂停数毫秒或者甚至数秒造成不好的用户体验。4、AOF持久化机制的优点1)、相比RDB的这种持久化机制来说AOF可以更好的保护数据的完整性一般AOF持久化机制会每隔1秒通过一个后台线程执行一次fsync操作所以redis出现问题最多会丢失1秒钟的数据。2)、AOF持久化机制生成的日志文件是以append-only模式写入所以没有任何磁盘寻址的开销写入性能非常高而且文件不容易破损即使文件尾部破损也很容易修复。3)、AOF日志文件即使过大的时候出现后台重写操作也不会影响客户端的读写。因为在rewrite log的时候会对其中的指令进行压缩创建出一份需要恢复数据的最小日志出来。在创建新日志文件的时候老的日志文件还是照常写入。当新的merge后的日志文件ready的时候再交换新老日志文件即可。(就是把当前老的日志数据压缩一下生成新的日志新来的数据还是继续往老的日志文件写之后等新的数据压缩完之后把老日志中新写入的数据写入再新的日志之后新的日志文件替换掉老的日志文件即可)。4)、AOF日志文件的命令通过非常可读的方式进行记录这个特性非常适合做灾难性的误删除的紧急恢复。比如不小心用flushall命令清空了所有数据只要这个时候后台rewrite还没有发生那么就可以立即拷贝AOF文件将最后一条flushall命令给删了然后再将该AOF文件放回去就可以通过恢复机制自动恢复所有数据。5、AOF持久化机制的缺点1)、对于同一份数据来说AOF日志文件通常比RDB数据快照文件更大。2)、当AOF开启后支持的写QPS会比RDB支持的写QPS低因为AOF一般会配置成每秒fsync一次日志文件当然每秒一次fsync性能也还是很高的。(QPS只每秒支持的访问请求)。3)、如果AOF发生bug就是通过AOF记录的日志进行数据恢复的时候没有恢复一模一样的数据出来。所以说类似AOF这种较为复杂的基于命令日志merge回放的方式比基于RDB每次持久化一份完整的数据快照文件的方式更加脆弱一些容易出现bug。不过AOF就是为了避免rewrite过程导致的bug因此每次rewrite并不是基于旧的指令日志进行merge的而是基于当时内存中的数据进行指令的重新构建这样健壮性会好很多。6、RDB和AOF到底该如何选择1)、不要仅仅使用RDB的持久化机制因为那样会导致你丢失很多数据。2)、也不要仅仅使用AOF的持久化机制因为那样有两个问题第一、你通过AOF做冷备没有RDB做冷备来的恢复速度更快; 第二、RDB每次简单粗暴生成数据快照更加健壮可以避免AOF这种复杂的备份和恢复机制的bug3)、综合使用AOF和RDB两种持久化机制第一、用AOF来保证数据不丢失(数据丢失相对较少)作为数据恢复的第一选择; 用RDB来做不同程度的冷备第二、在AOF文件都丢失或损坏不可用的时候还可以使用RDB来进行快速的数据恢复end如果你觉得本文对你有帮助的话记得关注点赞转发你的支持就是我更新动力。