文章系转载,方便整理和归纳,源文地址:https://cloud.tencent.com/developer/article/1803944

1. 前言

上一篇文章《你的Redis集群撑得住吗?》讲了应用增加pod时,有一个应用最大连接数计算公式为:maxTotal * pod数 < Redis cluster的最大连接数(单个分片的max_clients * 分片数) * 80% (预留百分比),大家有没有考虑过以下两个问题:1.Redis max_clients 是怎么设置的?2.为什么Redis cluster的最大连接数是 : 单个分片的max_clients * 分片数? 不急,看完这篇文章,你心中就会有答案了。

2. Redis 最大客户端连接数介绍

在Redis 2.4中,对可以同时处理的最大客户端数量有一个硬编码的限制。

在Redis 2.6中,此限制是动态的:默认情况下,它设置为10000个客户端,当然,你可以在redis.conf中通过max_clients进行定制化设置。

但是,Redis会与内核一起检查我们能够打开的最大文件描述符数量(检查soft limits)。如果该限制小于我们要处理的最大客户端数量再加上32(即Redis保留供内部使用的文件描述符数量),则Redis会修改最大客户端数量以匹配我们的客户端数量是真正能够处理在当前操作系统的限制。

$ ./redis-server --maxclients 100000
[41422] 23 Jan 11:28:33.179 # Unable to set the max number of files limit to 100032 (Invalid argument), setting the max clients configuration to 10112.

当配置Redis以处理特定数量的客户端时,最好确保也相应地设置了操作系统对每个进程的最大文件描述符数量的限制。

在Linux下,可以使用以下命令在当前会话和系统范围内设置这些限制:

ulimit -Sn 100000 # This will only work if hard limit is big enough.
sysctl -w fs.file-max=100000

Redis 4.0.12 源码在下面这一段也有明确说明

 /* Try to check if the OS is capable of supporting so many FDs. */
server.maxclients = ll;
if (ll > orig_value) {
adjustOpenFilesLimit();
if (server.maxclients != ll) {
addReplyErrorFormat(c,"The operating system is not able to handle the specified number of clients, try with %d", server.maxclients);
server.maxclients = orig_value;
return;
}
if ((unsigned int) aeGetSetSize(server.el) <
server.maxclients + CONFIG_FDSET_INCR)
{
if (aeResizeSetSize(server.el,
server.maxclients + CONFIG_FDSET_INCR) == AE_ERR)
{
addReplyError(c,"The event loop API used by Redis is not able to handle the specified number of clients");
server.maxclients = orig_value;
return;
}
}
}
}

3. 集群的最大连接数计算公式证明

针对集群的最大连接数计算公式,找了下源码,没有找到对应的计算公式。想了下,那就测试吧!建立了个3分片的集群,用阿里云的memtier_benchmark进行压测,得出结论和阿里云的测试结果一致。

测试语句:

./memtier_benchmark -s 192.168.0.12 -p 6379 -a XXX -c 20 -d 32 --threads=10 --ratio=1:1 --test-time=1800 --select-db=10
  • 1

结论(以下测试租用阿里云机器社区版):

规格 分片数 每秒新建连接数上限 连接数上限 带宽(MB/s) QPS平均值
16GB集群版 8 50000 80000 768 640000
128GB集群版 16 50000 160000 1536 1280000
512GB集群版 32 50000 320000 2048 2560000

综上,可以看出Redis cluster最大连接数=单个分片的max_clients * 分片数。

4.总结

本文主要主要解决了《Redis max_clients 是怎么设置的?》,《为什么Redis cluster的最大连接数是 : **单个分片的max_clients * 分片数?》**这两个问题,虽然方法不一致,但是理论联系实际去证明,其实也是一种方法。

5.参考文献

  1. https://redis.io/topics/clients#:~:text=Maximum%20number%20of%20clients%20In%20Redis%202.4%20there,otherwise%20stated%20by%20the%20maxclients%20directive%20in%20Redis.conf.
  2. https://www.alibabacloud.com/help/doc-detail/145231.htm?spm=a2c63.p38356.b99.30.4a9c5a9fbmgjML

[转帖]Redis 最大客户端连接数,你了解吗?的更多相关文章

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

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

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

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

  3. Redis 异步客户端选型及落地实践

    作者:京东科技 王晨 Redis异步客户端选型及落地实践 可视化服务编排系统是能够通过线上可视化拖拽.配置的方式完成对接口的编排,可在线完成服务的调试.测试,实现业务需求的交付,详细内容可参考:htt ...

  4. redis web 客户端工具 redis-admin

    redis-admin是基于java的redis web客户端(redis client),以方便广大程序员使用redis为宗旨,集五种数据结构增删改查于一身. https://github.com/ ...

  5. 在使用Redis的客户端连接工具ServiceStack.Redis要注意的问题

    在使用Redis的客户端连接工具ServiceStack.Redis要注意的问题   Redis是一个非常NB的内存级的数据库,我们可以把很多”热数据“(即读写非常多的数据)放入其中来操作,这样就减少 ...

  6. Redis C客户端API - God's blog - 博客频道 - CSDN.NET

    Redis C客户端API - God's blog - 博客频道 - CSDN.NET Redis安装步骤: 1.redis server安装 wget http://redis.googlecod ...

  7. 【原创】自己动手写一个能操作redis的客户端

    引言 redis大家在项目中经常会使用到.官网也提供了多语言的客户端供大家操作redis,如下图所示 但是,大家有思考过,这些语言操作redis背后的原理么?其实,某些大神会说 只要按照redis的协 ...

  8. RocketMQ的客户端连接数调查

    RocketMQ版本:3.4.6 ==问题现象== RocketMQ集群的某个topic,在一部分节点上消费有“断层”,这部分数据一致没办法消费. ==调查过程== 一顿操作猛如虎的调查之后发现, 该 ...

  9. 推荐一个好的Redis GUI 客户端工具

    推荐一个好的Redis GUI 客户端工具 Redis Desktop Manager  

  10. redis可视化客户端

    1. 场景描述 redis安装完成后,使用命令行看还是有点不方便,github上有开源的redis可视化客户端,很好用,介绍下. 2.解决方案 使用redisclient客户端,来操作redis. 2 ...

随机推荐

  1. 再获殊荣!华为云GaussDB喜提“科技进步一等奖”

    摘要:近日,中国电子学会科学技术奖励大会颁发了2021-2022年度中国电子学会科学技术奖获奖项目,华为云主导的"GaussDB智能云原生分布式数据库"项目荣获"科技进步 ...

  2. 摆平各类目标检测识别AI应用,有它就够了!

    摘要:在计算机视觉领域,CANN最新开源的通用目标检测与识别样例,通过其强大的可定制.可扩展性,为AI开发者们提供了良好编程选择. 本文分享自华为云社区<摆平各类目标检测识别AI应用,有它就够了 ...

  3. YoloV5实战:手把手教物体检测

    摘要:​YOLOv5并不是一个单独的模型,而是一个模型家族,包括了YOLOv5s.YOLOv5m.YOLO... 本文分享自华为云社区<YoloV5实战:手把手教物体检测--YoloV5> ...

  4. linux centos8 安装php nginx mysql 运行phpcms网站

    重新换vps,用centos8,重新配置系统环境,记下笔记: 安装nginx与php 首先安装nginx php ,安装默认版本的nginx,php默认安装7 yum install nginx ph ...

  5. SAST + SCA: 结合使用安全升级

    据 SAP 称,当今85%的安全攻击针对的是软件应用程序,因此一些列应用程序安全测试工具也应运而生.为了避免这些恶意攻击,企业通常使用应用程序安全测试工具来去缓解和解决安全风险,而不同的工具对应的使用 ...

  6. 如何构建面向海量数据、高实时要求的企业级OLAP数据引擎?

    在字节跳动各产品线飞速成长的过程中,对数据分析能力也提出了更高的要求,现有的主流数据分析产品都没办法完全满足业务要求.因此,字节跳动在ClickHouse引擎基础上重构了技术架构,实现了云原生环境的部 ...

  7. DataLeap的全链路智能监控报警实践(一):常见问题

    随着字节跳动业务的快速发展,大数据开发场景下需要运维管理的任务越来越多,然而普通的监控系统只支持配置相应任务的监控规则,已经不能完全满足当前需求,在日常运维中开发者经常会面临以下几个问题: 任务多,依 ...

  8. .Net Core 跨域

    Startup.cs public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseCorsMidd ...

  9. CompletableFuture 打桌球的应用

    CompletableFuture 使用 @Test public void billiardTest() throws Exception { // 创建点外卖线程: CompletableFutu ...

  10. 线上活动 | AI 头像变装秀

    ​宝子们,你的头像多久没换了? 送你一个锦囊,让你拥有既独一无二,又千变万化的专属 AI 头像 Hugging Face 将在 7 月 5 日 发起:AI 头像变装秀 ️️️游戏规则️️️ 我们将分享 ...