最近使用redis的list做跨进程的消息队列,客户端使用的是redis-cplusplus-client.这个client库还是蛮好用的,提供了和redis命令行一致的接口,很方便。

使用过程中发现下面一个问题。

我有多个客户端连接同一数据库,client从redis中blpop数据,设置超时为5秒。按说没什么问题,客户端也不多,不会对数据库造成什么压力。但运行一段时间后,client就从redis取不到数据了。

首先想到的是,是不是数据库连接断开了。从redis和client两侧查看6379端口的tcp连接,发现确实部分client的连接没了。但是客户端竟然没有异常,还在那傻傻的blpop!看来这个第三方库还是做得不够完善。

一个解决办法是,client和redis之间不保持长连接,每次操作都重新连接。可行,但是too simple。

后来查看了一下redis的配置文件,发现有一个tcp-keepalive的选项。

# TCP keepalive.
#
# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
# of communication. This is useful for two reasons:
#
# 1) Detect dead peers.
# 2) Take the connection alive from the point of view of network
# equipment in the middle.
#
# On Linux, the specified value (in seconds) is the period used to send ACKs.
# Note that to close the connection the double of the time is needed.
# On other kernels the period depends on the kernel configuration.
#
# A reasonable value for this option is 60 seconds.
tcp-keepalive 0

就是用来定时向client发送tcp_ack包来探测client是否存活的。默认不探测,官方建议值为60秒。那就试试吧。

如此设置,观察一段时间后发现client和redis之间的连接一直保持着。管用!

更多我的文章,请访问:零一积流(www.it-refer.com)

[转]redis服务器与客户端保活参数(tcp-keepalive)设置的更多相关文章

  1. TCP长连接保持连接状态TCP keepalive设置

    如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/42077321 作者:super_bert@csdn 对于TCP长连接保活是 ...

  2. Redis服务器和客户端的通信

    Redis客户端使用RESP(Redis序列化协议)与Redis服务器进行通信,RESP在位于TCP之上,而网络模型上客户端和服务器是保持的双工的连接.如图1 而一个简单的请求/响应的串行通信模型如下 ...

  3. 【转载】TCP保活(TCP keepalive)

    下图是我遇到tcp keepalive的例子: 以下为转载: TCP保活的缘起 双方建立交互的连接,但是并不是一直存在数据交互,有些连接会在数据交互完毕后,主动释放连接,而有些不会,那么在长时间无数据 ...

  4. Redis源码解析:14Redis服务器与客户端间的交互

    Redis服务器是典型的一对多服务器程序,通过使用由IO多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端进行网络通信. Redis客户端与服务器之 ...

  5. Redis服务器搭建/配置/及Jedis客户端的使用方法

    摘要 Redis服务器搭建.常用参数含意说明.主从配置.以及使用Jedis客户端来操作Redis Redis服务器搭建 安装 在命令行执行下面的命令: $ wget http://download.r ...

  6. C#中使用Redis学习一 windows安装redis服务器端和客户端

    学习背景 今天是2015年1月2日,新年刚开始的第二天,先祝大家元旦快乐啦(迟到的祝福吧^_^).前段时间一直写Jquery插件开发系列博文,这个系列文章暂停一段时间,最近一直在看redis,我将把r ...

  7. TCP KeepAlive机制理解与实践小结

    0 前言 本文将主要通过抓包并查看报文的方式学习TCP KeepAlive机制,以此加深理解. 1 TCP KeepAlive机制简介 TCP长连接下,客户端和服务器若长时间无数据交互情况下,若一方出 ...

  8. 客户端程序通过TCP通信传送"小文件"到服务器

    客户端程序通过TCP通信传送"小文件"到服务器 [c#源码分享]客户端程序通过TCP通信传送"小文件"到服务器 源码  (不包含通信框架源码,通信框架源码请另行 ...

  9. 【卷二】网络二—TCP服务器与客户端

    经过上回简单地介绍,大家对服务器多少应该清楚一些了吧!还记得TCP: (Transmission Control Protocol) 传输控制协议? 还记得IP: (Internet Protocol ...

随机推荐

  1. webform button

    https://www.codeproject.com/Questions/412553/differences-between-onClick-and-onClientClick OnClick w ...

  2. java基础笔试题二(集合关系)

    知识点:java集合继承关系(Collection,Map) 1.集合框架体系图 2.java的集合层次 来自博客(http://blog.csdn.net/stubbornaccepted/arti ...

  3. jQuery使用ajaxSubmit()提交表单(在不希望页面跳转的情况下)

    原文:http://www.jb51.net/article/48728.htm ajaxSubmit(obj)方法是jQuery的一个插件jquery.form.js里面的方法,所以使用此方法需要先 ...

  4. 算数基本定理 - nefu 118

    算数基本定理 每个大于1的正整数都可以被唯一分解为素数的成绩,在乘积中的素因子按照非降序排列 a = p1^a1 * p2^a2 * ... pn^an; b = p1^b1 * p2^b2 * .. ...

  5. 2017 ACM/ICPC Asia Regional Qingdao Online - 1011 A Cubic number and A Cubic Number

    2017-09-17 17:12:11 writer:pprp 找规律,质数只有是两个相邻的立方数的差才能形成,公式就是3 * n * (n + 1) +1, 判断读入的数是不是满足 这次依然只是做了 ...

  6. MySQL安装的N种方式

    一.二进制包安装 1.)下载:在官网的下载页面下的服务器操作系统选择  Linux- Generic : 进制分发版的格式是:mysql-<版本>-<OS>-tar.gz 2. ...

  7. p-value值的认识

    待续:https://www.zhihu.com/question/21429785/answer/147047565

  8. 为红米Note 5 Pro编译Lineage OS 15.1的各种坑

    安装了ubuntu虚拟机,直接上网repo sync,网速特别慢,中间断了好多次,记得是3天吧,总算是下载成功了.中途还在淘宝上买过付费的VPN代理软件,有时候会打开代理来尝试,也是不太稳定.好歹第1 ...

  9. http code码实验

    500: 1.代码语法错误. 2.代码文件未被授权执行或访问. 502: php-fpm 未启动 302 Moved Temporarily header 跳转 404: 访问的页面不存在,或者没有权 ...

  10. EASYUI 1.4版 combobox firefox 下不支持中文检索的问题

    easyui 的combobox 在IE下面输入中文,可以自动实现筛选和检索的功能,但是在firefox下面不可以. 于是查了一些资料,发现原来是浏览器对于中文输入法的处理问题,对于chrome 和 ...