redis主从复制(4)— client buffer

1、 client buffer的设计

redis server以单进程的方式处理接收到的请求,而redis完成请求有些工作比较慢,比如网络IO和磁盘IO等比较慢的操作。redis为了提高处理客户端请求的响应时间,做了很多优化。比如网络io和磁盘io是异步完成、使用后台进程完成bgsave和bgrewriteaof工作,在server端为客户提供读buffer等等。

client buffer是在server端实现的一个读取缓冲区。redis server在接收到客户端的请求后,把影响结果写入到client buffer中,而不是直接发送给客户端。server把结果写入到client buffer中后,继续处理客户端的其他请求。这样异步处理方式使redis server不会因为网络原因阻塞其他请求的处理。之前的文章中replication buffer也是client buffer中的一种。

2、client buffer参数设置

redis client buffer的配置参数为”client-output-buffer-limit”,默认值为:

127.0.0.1:6379> CONFIG GET "*output*"
 
    1) "client-output-buffer-limit"
 
    2) "normal 0 0 0 slave 0 0 0 pubsub 0 0 0"

参数设置方法如下:

client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

具体参数含义如下:

class : 客户端种类,normal、slave、pubsub。

– mormal:普通的客户端

– slave: 从库的复制客户端

– pub/sub: 发布与订阅的客户端的

hard limit: 缓冲区大小的硬性限制。

soft limit: 缓冲去大小的软性限制。

soft seconds: 缓冲区大小达到了(超过)soft limit值的持续时间。

client-output-buffer-limit参数限制分配的缓冲区的大小,防止内存无节制的分配。参数的默认值都为0,意思是不做任何限制。

3、client buffer保护机制

redis server触发保护机制主要有两种情况:

1) client buffer的大小达到了soft limit并持续了soft seconds时间,将立即断开和客户端的连接。

2) client buffer的大小达到了hard limit,server也会立即断开和客户端的连接。

slave replication buffer这里不再讨论,而是讨论普通客户端的client buffer。

思考问题:是否要设置client-output-buffer-limit normal参数(默认参数不做任何限制),如何设置?

1)client-output-buffer-limit参数一定要设置,不能使用默认的参数,防患于未然。client buffer实际上是占用redis的数据内存空间(unlike replication buffers, memory allocation for client buffers is taken from Redis’ data memory space.)。redis的最大数据内存空间由maxmemory参数限定。当数据内存空间达到maxmemory参数限定值时,redis会开始evict数据,或者直接提示客户端OOM(out of memory)。

这种情况下主要发生在客户端执行大批量数据读取, 比如keys *、smembers、lrange、hgetall等操作。
如果单次查询的数据太多,导致redis的used memory增长一倍。

2)client-output-buffer-limit也不能设置太小,这个会导致客户端读取不到数据。

这篇文章包含了top redis headaches for devops – client buffers里面的一些内容,而不是简答的翻译。

转自:http://mdba.cn/?p=833

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/2486

(0)
s19930811s19930811
上一篇 2016-03-28 23:18
下一篇 2016-03-28 23:19

相关推荐

  • Trap命令简介

     Trap命令简介     一、基本概念  trap是一个shell内建命令,它用来在脚本中指定信号如何处理。比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序。如果要在Ctrl +C不退出程序,那么就得使用trap命令来指定一下SIGINT的处…

    Linux干货 2015-05-11
  • CentOS 7破解密码教程

    启动时任意键暂停启动  按e键进入编辑模式  将光标移动linux16开始的行,添加内核参数rd.break  按ctrl-x启动  mount –o remount,rw /sysroot  chroot /sysroot  passwd root  touch /.autorelabe…

    Linux干货 2016-12-01
  • 第七周

    第七周 1 创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动…

    Linux干货 2017-02-20
  • N25_第六周

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s@^[[:space:]]+@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; %s@^[[:spac:]]+@@g…

    Linux干货 2017-02-13
  • Linux文件类型及颜色标识

    文件类型(共7种): – :普通文件 d:目录文件 (directory) c:字符设备文件 (char) b:块设备文件 (block) s:本地域套接口 (socket) p:有名管道 (pipeline) l:符号连接 (link) 关于硬链接、软连接、复制之间的区别说明: 上图中,我为photo.png这个图片文件建立了一个拷贝(phot…

    Linux干货 2016-10-16
  • N22-love cat第19周 – 基于Apache + Tomcat +2种模式实现负载均衡以及配置集群seesion服务

      基于Apache+Tomcat实现负载均衡和集群服务 一、概念     从Tomcat权威指南中的测试数据,我们不难发现,对于静态页面的数据,Tomcat的处理速度比Apache要快很多,所以为什么要整合apache虽然在处理静态页面速度上比Apache快,但是Tomcat经不起大的并发量容易死。为此,我们就需要A…

    Linux干货 2016-08-29