客户端的超时时长分连接超时和读写超时,如果是基于hiredis的实现,则读写超时是合在一起的,同一参数控制。

在hiredis中,读写超时调用函数redisSetTimeout设置,可以看到没有区分读和写:

int redisSetTimeout(redisContext *c, const struct timeval tv);

而连接超时,则是在建立连接时指定:

redisContext *redisConnectWithTimeout(const char *ip, int port, const struct timeval tv);

超时值设置偏小,容易导致访问redis失败。如果是写操作(set、lpush、hset、incrby等操作),则结果还有不确定性,即可能在redis端成功了,但客户端得到的是超时,象incrby和setnx等操作还不方便简单重试。

如果超时值设置过大,则在redis异常时不容易及时做切换,比如master卡住(可能因为在重写AOF而繁忙)时,调用者也将被卡住,不能及时解脱,一些情况下可能造成雪崩,这种情况下超时值越小越有利。

如何确定一个合理超时值了?原则是保证大多数超时都能成功,因此需要确定什么值可以满足大多数情况。这需考虑两个方面:

1) 网络延迟,通过ping掌握网络延迟

$ ping -c 3 192.168.1.22

PING 192.168.1.22 (192.168.1.22) 56(84) bytes of data.

64 bytes from 192.168.1.22: icmp_seq=1 ttl=53 time=31.7 ms

64 bytes from 192.168.1.22: icmp_seq=2 ttl=53 time=31.7 ms

64 bytes from 192.168.1.22: icmp_seq=3 ttl=53 time=31.7 ms

--- 192.168.1.22 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2000ms

rtt min/avg/max/mdev = 31.720/31.725/31.728/0.145 ms

2) 查看redis慢日志

$ redis-cli slowlog get

1) 1) (integer) 10526

2) (integer) 1566357322

3) (integer) 10926

4) 1) "ZCOUNT"

2) "test1"

3) "-9223372036854775808"

4) "9223372036854775807"

2) 1) (integer) 10525

2) (integer) 1566343237

3) (integer) 17572

4) 1) "HGET"

2) "test2"

3) "tq"

3) 1) (integer) 10524

2) (integer) 1566343212

3) (integer) 101400

4) 1) "HGET"

2) "test3"

3) "tq"

看“slowlog get”命令输出的第“3”条数值,比如上面的“10926”、“17572”和“101400”,分别表示对应命令执行的时长,单位为微秒。显然以上述为例,超时时长不能小于“102+32”毫秒,即读写超时至少得设置134毫秒。

显然实际中,超值时不可能很小,如果都是同步调用,调用相互耦合,一个redis节点异常即会影响全局,为此业务侧的架构应考虑到这一点。原则是一次业务操作只涉及单个redis节点,业务侧采用分机器、分进程或分线程方式解耦,这样即使某redis节点异常,也只会影响这部分数据,其它部分仍然可正常操作(这里建议redis的配置项cluster-require-full-coverage值为no)。

如果设置Redis客户端的超时时长?的更多相关文章

  1. spring boot项目配置RestTemplate超时时长

    配置类: @Configuration public class FeignConfiguration { @Bean(name="remoteRestTemplate") pub ...

  2. 国人开源了一款超好用的 Redis 客户端,真香!!

    大家都知道,Redis Desktop Manager 是一款非常好用的 Redis 可视化客户端工具,但可惜的是 v0.9.4 版本之后需要收费了: 这个工具不再免费提供安装包了,要对所有安装包收费 ...

  3. 项目中redisTemplate设置的key,redis客户端上查询不到的问题

    再项目使用了redis储存key,测试需要在客户端删除对应的key,发现查询不到对应的key redis客户端: 发现redisTemplate实际存进去的key会多了几个字符 原因:程序中对key没 ...

  4. 常用的Redis客户端的并发模型(转)

      伪代码模型 # get lock : timestamp = current Unix time + lock = SETNX lock.foo timestamp or (now() > ...

  5. "Redis客户端连接数一直降不下来"的有关问题解决 good

    [线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...

  6. Redis客户端管理

    1.客户端管理 Redis提供了客户端相关API对其状态进行监控和管理,本节将深入介绍各个API的使用方法以及在开发运维中可能遇到的问题. 1.1 客户端API 1.client list clien ...

  7. "Redis客户端连接数一直降不下来"的有关问题解决

    [线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...

  8. spring整合redis客户端及缓存接口设计(转)

    一.写在前面 缓存作为系统性能优化的一大杀手锏,几乎在每个系统或多或少的用到缓存.有的使用本地内存作为缓存,有的使用本地硬盘作为缓存,有的使用缓存服务器.但是无论使用哪种缓存,接口中的方法都是差不多. ...

  9. 全球领先的redis客户端:SFedis

    零.背景 这个客户端起源于我们一个系统的生产问题. 一.问题的发生 在我们的生产环境上发生了两次redis服务端连接数达到上限(我们配置的单节点连接数上限为8000)导致无法创建连接的情况.由于这个系 ...

随机推荐

  1. sklearn中的KMeans算法

    1.聚类算法又叫做“无监督分类”,其目的是将数据划分成有意义或有用的组(或簇).这种划分可以基于我们的业务需求或建模需求来完成,也可以单纯地帮助我们探索数据的自然结构和分布. 2.KMeans算法将一 ...

  2. 数据结构与算法5—KMP算法

    串的模式匹配算法 子串(模式串)的定位操作通常称为串的模式匹配. 这是串的一种重要操作,很多 软件,若有“编辑”菜单项的话, 则其中必有“查找”子菜单项. 串的顺序存储实现 #include<s ...

  3. PHP实现单人多人聊天源码免费分享 | 电脑报修系统

    源码清单 1. 简易版登陆式聊天源码. 2. 电脑报修轻系统源码. 3. 关注下面公众号回复“聊天”,免费获取. 聊天系统 虽然微信,QQ是即时通讯的元老.但是他们限制很多,所以很多人都想做一个自己的 ...

  4. 响应式js库——rxjs

    原文地址:https://rxjs.dev/guide/overview 简介 RxJS 是组合异步以及基于事件的使用可观察者序列的程序类库.它提供一个核心类型,Observable,附属类型(Obs ...

  5. AES加密解密工具类封装(AESUtil)

    package club.codeapes.common.utils; import org.springframework.util.Base64Utils; import javax.crypto ...

  6. java标识符的作用和命名规则

    今天让我们从心开始学习Java,从最基础的开始. 这篇先从java标识符的作用和命名规则说起. 1.作用 常量.变量.方法.类和包等的名称. 2.命名规则 必须以字母._下划线.美元符$开头. 其他部 ...

  7. Linux Mysql创建新用户并允许远程连接

    第一步 登陆mysql: mysql-u 数据库用户名 -h 数据库IP -p 根据提示 输入数据库密码 第二步: GRANT ALL PRIVILEGES ON *.* TO '自定义用户名'@'% ...

  8. linux设备驱动程序-i2c(0)-i2c设备驱动源码实现

    (基于4.14内核版本) 为了梳理清楚linux内核中的i2c实现框架,从本文开始,博主将分几个章节分别解析i2c总线在linux内核中的形成过程.匹配过程.以及设备驱动程序源码实现. 在介绍linu ...

  9. 解决Mac OS X 系统在home文件夹下面操作不支持的方法

    解决Mac OS X 系统在home文件夹下面操作不支持的方法   最近需要使用Mac OS X 系统尝试安装使用appium程序,安装过程中发现,Mac OS X 系统在home文件夹下面操作不支持 ...

  10. PAT 乙级 1001.害死人不偿命的(3n+1)猜想 C++/Java

    1001 害死人不偿命的(3n+1)猜想 (15 分) 题目来源 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复 ...