当前位置:首页 > 技术 > 资源文档

redis服务器与客户端保活参数(tcp-keepalive)设置

2015-10-11 来源:网络 作者:无名网整理

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

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

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

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

一个解决办法是,client和redis之间不保持长链接,每次操做都从新链接。可行,可是too simple。tcp

后来查看了一下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 0th

就是用来定时向client发送tcp_ack包来探测client是否存活的。默认不探测,官方建议值爲60秒。那就试试吧。命令行
如此设置,观察一段时间后发现client和redis之间的链接一直保持着。

相关内容: redis
『 猜你喜欢 』
  • 使用Redis连接池大小该如何合理设置

    Redis连接池是指预先建立一组Redis连接,让客户端程序可以从连接池中获取连接,从而提高Redis客户端程序的性能。无论是单进程、多线程程序读写Redis,都可以使

  • 如何保证Redis的可靠性

    居高声自远,非是藉秋风-----虞世南。《蝉》 秋风一阵比一阵紧,刮得人的心里也是落叶飘飘孤零零的,据说秋风是有味道的,小时候有一个疯姑姑,秋天的时候,总是一丝不挂的满

  • Redis学习

    一、 为什么 Redis 那么快?Redis 是基于内存的单进程单线程模型的 KV 数据库,由 C 语言编写,官方提供的数据是可以达到 100000+ QPS。完全基于

  • ServiceStack.Redis的使用以及Redis的数据类型

    一、.NET使用Redis和MongoDB一样,在.NET中使用Redis其实也是使用第三方驱动,官网推荐的是使用ServiceStack.Redis 不过看

  • C#连接Redis-使用 ServiceStack.Redis 自由切换db

    前段时间用Redis优化了公司的一个c#项目模块,刚上线时表现还是不错的,但后来发现不太对劲。高峰期时CPU占比很高,于是想找优化方案。RedisClientRedis

  • 查看redis状态-redis状态查询命令-redis info详解

    查看Redis服务状态。语法【Syntax】。INFO[section[section...]]

  • redis_git_dirty是什么意思

    redis_git_dirty是Redis服务器信息中的一个字段,它表示Redis的Git仓库是否存在未提交的修改。它的作用是标识当前Redis服务器的代码库是否有未提