铜川网站seo,大学生毕业设计网站,做网站的法律,有学做衣服的网站吗Redis中使用了很多缓冲区#xff0c;在redis各个环节起到了非常核心的作用。下面来一一介绍一下#xff1a;
输入输出缓冲区#xff08;客户端缓冲区#xff09;
Redis中的输入输出缓冲区是为了平衡客户端发送命令和服务端处理命令的速度差异#xff0c;如果客户端发送指…Redis中使用了很多缓冲区在redis各个环节起到了非常核心的作用。下面来一一介绍一下
输入输出缓冲区客户端缓冲区
Redis中的输入输出缓冲区是为了平衡客户端发送命令和服务端处理命令的速度差异如果客户端发送指令速度大于服务端处理速度那么就会缓冲区的溢出严重的内存问题。所以输入输出缓冲区就是在接受指令和返回数据上进行了限制一旦溢出就会进行断开客户端连接操作这也是Redis的一种内存保护机制。
Redis会为每个客户端创建一个输入缓冲区和一个输出缓冲区它们都属于客户端缓冲区在接受客户端指令时会将指令放入输入缓冲区redis后续会从缓冲区提取指令执行执行完成后返回数据回存入输出缓冲区。 可以通过client list 来查看客户端信息其中包括了一些缓冲区的容量信息。 客户端分类
在Redis中客户端主要分为3中1、普通客户端就是常规应用程序客户端比如jedis、java程序连接的这种。2、主从复制中slave在主从复制模式中的从节点。3、发布订阅模式频道的客户端。
输入缓冲区
Redis服务端对于每个redis客户端以上3钟输入缓冲区默认大小为1gbredis不支持修改配置该大小一般来说1gb的指令已经足够我们使用了。溢出了会怎么样如果输入缓冲区溢出了则就会断开客户端的连接保障服务器内存不会标准是一种保护机制。导致输入溢出场景1、出现key很大指令bigkey比如特别大的pipeline等同时客户端指令请求过快的情况下。2、服务器资源不足等一些情况导致服务端处理速度很慢无法快速的接受并处理掉输入缓冲区中的数据导致缓冲区积累。应对方式是什么针对以上两种溢出场景我们可以思考应对方式1、避免bigkey的出现同时保障服务器有足够的响应速度。2、可以通过分区集群的方式将过多的请求负载减轻单个服务器CPU压力和内存压力。
输出缓冲区
Redis对于不同客户端的输出缓冲区有不同容量的默认配置同时支持容量限制的修改。容量限制配置和默认大小1、普通客户端client-output-buffer-limit normal 0 0 0 默认不限制大小。 因为客户端数据量大小是不确定的所以如果有所限制可能会造成不可用。 2、主从模型slaveclient-output-buffer-limit replica 256mb 64mb 60 默认如果缓冲区超过 256mb或者持续60s内存超过64mb则断开客户端连接。当前缓冲区也就是复制缓冲区。3、发布订阅频道客户端client-output-buffer-limit pubsub 32mb 8mb 60AOF缓冲区服务器端缓冲区
AOF缓冲区作用于类似于输入缓冲区只不过是作用在AOF持久化过程Redis进行AOF持久化时并不是直接将指令Append到AOF文件尾部而是将指令以Redis协议写入到AOF缓冲区中Redis会根据同步规则appendsync的配置将指令从内存中写入到磁盘。 1、临时存储指令然后在合适的时机写入磁盘比如1秒一次可以减少每次直接写入磁盘的IO开销也提高了写入性能。 2、AOF可以将多写操作合并写入磁盘减少了IO开销。 3、通过合并指令写入磁盘也降低了存储的碎片化。提高了磁盘利用率。
AOF重写缓冲区服务器端缓冲区
AOF重写缓冲区aof_rewrite_buffer是在AOF文件bgrewriteaof过程中使用到的缓冲区它主要保障了在重写过程中新增指令的一致性。在重写时主进程除了将指令写入AOF缓冲区同时还会将指令写入AOF重写缓冲区等重写完成之后会将重写缓冲区中的指令追加到AOF文件尾部从而保障重写过程中新写入的指令不会丢失。 复制缓冲区客户端缓冲区
复制缓冲区是Redis主从复制模型中在全量数据同步过程中新的数据产生后从slave和主数据一致性的保障方式。它使用的就是输出缓冲区其配置就是client-output-buffer-limit replica 256mb 64mb 60所以它也是一种客户端缓冲区。 在主从全量数据同步过程中主进程会将新产生的数据写入到复制缓冲区中等到RDB同步完毕之后将缓冲区中数据发送给从节点从而保障了从节点数据的一致性。 复制缓冲区溢出当RDB时间过长或者复制过程中写入操作过多导致复制缓冲区积累数据过多导致溢出此时redis会断开客户端连接
溢出解决办法 1、增大复制缓冲区的大小但是同时也需要考虑到maxmemory限制。 2、减小RDB文件大小可以通过分区集群的方式降低当个主节点的存储量从而减小RBD大小。
复制积压缓冲区服务端缓冲区
复制积压缓冲区是主从复制模型中redis实现增量数据同步的一种环形缓冲区。它主要记录的每次数据同步的ID和offset当从节点断线重连后发起同步请求时主节点通过对比从节点发送来的ID和offset在复制积压缓冲区中是否存在来判定是否进行增量数据同步如果复制积压缓冲区中存在发送过来的offset则将缓冲区中剩余数据发送给从增量同步否则进行全量同步。 原图下载