一、输入缓冲区
1,简介:
![](https://img-blog.csdnimg.cn/20210330082237486.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nMDkwOTA2MDY=,size_16,color_FFFFFF,t_70)
2、应用场景
Redis缓冲区有两个应用场景:
(1)在客户端和服务器端之间进行通信时,用来暂存客户端发送的命令数据,或者是服务器端返回给客户端的数据结果
2.主从节点间进行数据同步时,用来暂存主节点接收的写命令和数据。
3、会产生的问题
问题:
(1)一旦某个客户端的输入缓冲区超过1G,客户端将会被关闭。
(2)输入缓冲区不受maxmemory控制,假设一个Redis实例设置了 maxmemory为4G,已经存储了2G数据,但是如果此时输入缓冲区使用了 3G,已经超过maxmemory限制,可能会产生数据丢失、键值淘汰、OOM等情况
产生原因:
(1)每次进入输入缓冲区的命令包含了大量 bigkey,从而造成了输入缓冲区过大的情况
(2)Redis发生了阻塞,短期内不能处理命令造成客户端输入的命令积压在了输入缓冲区
如何避免:
(1)建立监控通过定期执行client list命令,收集qbuf和qbuf-free找到异常的连接记录并分析,最终找到可能出问题的客户端,
(2)通过定期执行client list命令,收集qbuf和qbuf-free找到异常的连接记录并分析,最终找到可能出问题的客户端
优劣对比
二、输出缓冲区:
1.简介
![](https://img-blog.csdnimg.cn/20210330085256802.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5nMDkwOTA2MDY=,size_16,color_FFFFFF,t_70)
2.输出缓冲区分类
实际上输出缓冲区由两部分组成
1.固定缓冲区(16KB):返回比较小的执行结果,使用的是字节数组
2.动态缓冲区:返回比较大的结果,例如大的字符串、hgetall、smembers命令的结果等,动态缓冲区使用的是列表,当固定缓冲 区存满后会将Redis新的返回结果存放在动态缓冲区的队列中,队列中的每个对象就是每个返回结果