一、客户端相关配置

①客户端的限制maxclients

  • Redis提供了maxclients参数来限制最大客户端连接数,一旦连接数超过 maxclients,新的连接将被拒绝

  • maxclients默认值是10000

  • 可以通过info clients来查询当前Redis的连接数:

  • 可以通过config set maxclients对最大客户端连接数进行动态设置:

  • 但是这个参数会受到操作系统设置的限制,在后面“Redis实践篇的陷阱文章中还会介绍”

②客户端的限制timeout

  • 一般来说maxclients=10000在大部分场景下已经绝对够用,但是某些情况由于业务方使用不当(例如没有主动关闭连接)可能存在大量idle连接, 无论是从网络连接的成本还是超过maxclients的后果来说都不是什么好事, 因此Redis提供了timeout(单位为秒)参数来限制连接的最大空闲时间,一 旦客户端连接的idle时间超过了timeout,连接将会被关闭

  • timeout默认为0,也就是不会检测客户端的空闲

  • 该参数也可以动态设置。例如设置timeout为30秒:

演示案例

  • 下面继续使用Jedis进行模拟,整个代码和上面是一样的,只不过第2) 步骤休息了31秒:

String key = "hello";
// 1) 生成jedis,并执行get操作
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println(jedis.get(key));
// 2) 休息31秒
TimeUnit.SECONDS.sleep(31);
// 3) 执行get操作
System.out.println(jedis.get(key));
// 4) 休息5秒
TimeUnit.SECONDS.sleep(5);
// 5) 关闭jedis连接
jedis.close();
  • 执行上述代码可以发现在执行完第2)步之后,client list中已经没有了 Jedis的连接,也就是说timeout已经生效,将超过30秒空闲的连接关闭掉:

  • 同时可以看到,在Jedis代码中的第3)步抛出了异常,因为此时客户端 已经被关闭,所以抛出的异常是JedisConnectionException,并且提示 Unexpected end of stream:

  • 如果将Redis的loglevel设置成debug级别,可以看到如下日志,也就是客 户端被Redis关闭的日志:

  • Redis源码中redis.c文件中clientsCronHandleTimeout函数就是针对timeout 参数进行检验的,只不过在源码中timeout被赋值给了server.maxidletime:

int clientsCronHandleTimeout(redisClient *c) {// 当前时间time_t now = server.unixtime;// server.maxidletime就是参数timeoutif (server.maxidletime &&// 很多客户端验证,这里就不占用篇幅,最重要的验证是下面空闲时间超过了maxidletime就会// 被关闭掉客户端(now - c->lastinteraction > server.maxidletime)){redisLog(REDIS_VERBOSE,"Closing idle client");// 关闭客户端freeClient(c);}}
  • Redis的默认配置给出的timeout=0,在这种情况下客户端基本不会出现上面的异常,这是基于对客户端开发的一种保护。例如很多开发人员在使用JedisPool时不会对连接池对象做空闲检测和验证,如果设置了timeout>0,可 能就会出现上面的异常,对应用业务造成一定影响,但是如果Redis的客户 端使用不当或者客户端本身的一些问题,造成没有及时释放客户端连接,可能会造成大量的idle连接占据着很多连接资源,一旦超过maxclients;后果也是不堪设想。所在在实际开发和运维中,需要将timeout设置成大于0,例如 可以设置为300秒,同时在客户端使用上添加空闲检测和验证等等措施,例如JedisPool使用common-pool提供的三个属性:minEvictableIdleTimeMillis、 testWhileIdle、timeBetweenEvictionRunsMillis

③tcp-keepalive

  • 检测TCP连接活性的周期

  • 默认值为300

  • 如果需要设置,建议为60,那么Redis会每隔60秒对它创建的TCP连接进行活性检测,防止大量死连接占用系统资源

④tcp-backlog

  • TCP三次握手后,会将接受的连接放入队列中,tcpbacklog就是队列的大小

  • 它在Redis中的默认值是511

  • 修改方法也非常简单,只需要执行如下命令

echo 511 > /proc/sys/net/core/somaxconn
  • 通常来讲这个参数不需要调整,但是这个参数会受到操作系统的影响。例如在Linux操作系统 中,如果/proc/sys/net/core/somaxconn小于tcp-backlog,那么在Redis启动时会 看到如下日志,并建议将/proc/sys/net/core/somaxconn设置更大

二、客户端统计片段

info clients

  • 例如下面就是一次info clients的执行结果:

  • 说明如下:

    • connected_clients:代表当前Redis节点的客户端连接数,需要重点监控,一旦超过maxclients,新的客户端连接将被拒绝

    • client_recent_max_output_buffer:当前所有输出缓冲区中队列对象个数的最大值

    • client_recent_max_input_buffer:当前所有输入缓冲区中占用的最大容量

    • blocked_clients:正在执行阻塞命令(例如blpop、brpop、 brpoplpush)的客户端个数

info stats

  • 参数说明:

    • total_connections_received:Redis自启动以来处理的客户端连接数总数

    • rejected_connections:Redis自启动以来拒绝的客户端连接数,需要重点监控

Redis:21---客户端相关配置篇相关推荐

  1. SAP S4 FI后台详细配置教程- PART4 (科目及税费相关配置篇)

    目录 1.总帐科目 1.1编辑科目表清单 1.2 科目表分配给公司代码 1.3 定义科目组 1.4 定义留存收益科目 2.销售/购置税 2.1 维护销售/购置税务代码税率 2.2  配置销项/销项税会 ...

  2. OAuth2.0认证服务器之客户端相关配置

    认证服务器的客户端相关的配置,先构建一个类继承AuthorizationServerConfigurerAdapter 如下所示 ,实现里面的三个configure方法 import org.spri ...

  3. SAP S4 FI后台详细配置教程- PART3 (财务凭证相关配置篇)

    本篇主要介绍凭证相关的配置,希望对学习SAP财务的同学有帮助. 1.定义凭证类型 概念功能说明: •     凭证类型是区分不同交易类型的方法并决定能够被过帐的会计形式. 例如, 可将所有的会计凭证按 ...

  4. Redis:Redis配置文件相关配置、Redis的持久化

    目录: (1)Redis的配置文件 (2)常规配置 (3)安全配置 (4)Redis的持久化策略RDB (5)Redis的持久化策略AOF (6)Redis的持久化 (1)Redis的配置文件 red ...

  5. Redis安装及基本配置

    一.Redis介绍 1.Redis是一个key-value存储系统 2.官方站点http://redis.io 3.Redis和Memcached类似,但支持数据持久化 4.支持更多value类型,除 ...

  6. redis:客户端管理

    机制 redis提供了一些操作客户端的命令,比如查询所有已连接到服务端的客户端数量,控制客户端的连接状态(关闭或者挂起)等.通过客户命令我们可以轻松实现对客户端的管理.控制. redis服务器通过监听 ...

  7. redis入门——客户端篇

    redis入门--客户端篇 @(Redis)[redis, 入门, 客户端命令, jdeis] redis入门客户端篇 redis的客户端 redis-cli redis-desktop-manage ...

  8. redis 服务器/客户端安装与配置

    redis 服务器/客户端安装与配置 1 redis server 1.1 获取redis源码包 //官网 http://redis.io/ wget -c http://redis.googleco ...

  9. redis cli 删除key 模糊_Web基础配置篇(六): Redis的安装配置及基本操作

    Web基础配置篇(六): Redis的安装配置及基本操作 一.概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的A ...

最新文章

  1. 《代码整洁之道:程序员的职业素养》一一1.5 参考文献
  2. 经Apache将tomcat转用80port这两个域名
  3. python可变数据类型与不可变数据类型
  4. linux红帽子怎么配置dhcp,LinuxDHCP的高级配置如何应用呢?
  5. Mobaxterm常用的指令(基于linux)
  6. Typecho 支持黑暗模式的后台主题插件
  7. 用 State Pattern 来实现一个简单的 状态机
  8. C/C++通过WMI和系统API函数获取获取系统硬件配置信息(转)
  9. sql int 比较_SQL进阶--错题集1
  10. paip.输入法编程----二级汉字2350个常用汉字2350个
  11. 以太坊:用 Solidity 写测试用例
  12. super的使用方法(Java)
  13. 爱奇艺内容中台数据中心的设计与实现
  14. LaTeX in 24 Hours - 3. Formatting Texts I
  15. 看了一篇别人的年终总结,感觉对自己的启发挺大的
  16. ABB 机器人二次开发另一种方式 socket通信
  17. proteus7isis 如何设置电源电压范围
  18. lradc按键驱动程序分析(for F1C100S)
  19. python接口自动化项目_Python+requests接口自动化完整项目框架整理笔记
  20. 漏洞利用与卡巴斯基的对抗之路

热门文章

  1. Package ‘*****‘ has no installation candidate
  2. java二维数组数字数显次数_【每日一题】118.数组中数字出现的次数
  3. c语言选择结构程序设计报告,C语言学习与总结---第四章:选择结构程序设计
  4. mysql查当前用户的的命令_mysql命令大全用户管理相关命令
  5. arcgis批量裁剪矢量模型
  6. Python3 爬虫学习笔记 C12【验证码对抗系列 — 图形验证码】
  7. Python3 爬虫学习笔记 C07 【解析库 lxml】
  8. 【LeetCode1046】最后一块石头的重量(堆heap)
  9. 【Python学习】 - sklearn - 用于生成数据的make_blobs模块
  10. 【CodeForces - 616C】The Labyrinth(bfs,并查集,STLset)