[转帖]Redis 最大客户端连接数,你了解吗?
文章系转载,方便整理和归纳,源文地址: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.参考文献
- https://redis.io/topics/clients#:~:text=Maximum%20number%20of%20clients%20In%20Redis%202.4%20there,otherwise%20stated%20by%20the%20maxclients%20directive%20in%20Redis.conf.
- https://www.alibabacloud.com/help/doc-detail/145231.htm?spm=a2c63.p38356.b99.30.4a9c5a9fbmgjML
[转帖]Redis 最大客户端连接数,你了解吗?的更多相关文章
- "Redis客户端连接数一直降不下来"的有关问题解决
[线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...
- "Redis客户端连接数一直降不下来"的有关问题解决 good
[线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...
- Redis 异步客户端选型及落地实践
作者:京东科技 王晨 Redis异步客户端选型及落地实践 可视化服务编排系统是能够通过线上可视化拖拽.配置的方式完成对接口的编排,可在线完成服务的调试.测试,实现业务需求的交付,详细内容可参考:htt ...
- redis web 客户端工具 redis-admin
redis-admin是基于java的redis web客户端(redis client),以方便广大程序员使用redis为宗旨,集五种数据结构增删改查于一身. https://github.com/ ...
- 在使用Redis的客户端连接工具ServiceStack.Redis要注意的问题
在使用Redis的客户端连接工具ServiceStack.Redis要注意的问题 Redis是一个非常NB的内存级的数据库,我们可以把很多”热数据“(即读写非常多的数据)放入其中来操作,这样就减少 ...
- Redis C客户端API - God's blog - 博客频道 - CSDN.NET
Redis C客户端API - God's blog - 博客频道 - CSDN.NET Redis安装步骤: 1.redis server安装 wget http://redis.googlecod ...
- 【原创】自己动手写一个能操作redis的客户端
引言 redis大家在项目中经常会使用到.官网也提供了多语言的客户端供大家操作redis,如下图所示 但是,大家有思考过,这些语言操作redis背后的原理么?其实,某些大神会说 只要按照redis的协 ...
- RocketMQ的客户端连接数调查
RocketMQ版本:3.4.6 ==问题现象== RocketMQ集群的某个topic,在一部分节点上消费有“断层”,这部分数据一致没办法消费. ==调查过程== 一顿操作猛如虎的调查之后发现, 该 ...
- 推荐一个好的Redis GUI 客户端工具
推荐一个好的Redis GUI 客户端工具 Redis Desktop Manager
- redis可视化客户端
1. 场景描述 redis安装完成后,使用命令行看还是有点不方便,github上有开源的redis可视化客户端,很好用,介绍下. 2.解决方案 使用redisclient客户端,来操作redis. 2 ...
随机推荐
- php +libcurl+nghttp2 实现高性能微服务架构
1.server端nginx编译时增加参数configure --with-http_v2_module server { listen 80 http2; ...
- 如何通过一个SDK轻松搞定人脸识别,拯救初入职场的程序猿
摘要:看一个SDK如何拯救初入职场的程序猿小Hi- [职场初体验] 时间过得真快,距离上次给小Hi安排"人脸识别"的开发任务(话接上期:[快速玩转华为云开发]小Hi拍了拍你,基于华 ...
- 云小课 | 华为云KYON之L2CG
摘要:本文介绍KYON独创的L2CG,打通大二层网络,支持企业携带私网IP直接上云,让业务敏捷迁移,大幅降低企业上云的复杂度和成本.同时支持虚拟机粒度迁移,让企业上云过程中无需迁移整个子网. 本文分享 ...
- 火山引擎 ByteHouse:如何提升 18000 节点的 ClickHouse 可用性?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 ClickHouse 是业内被广泛使用的 OLAP 引擎.当集群规模过大时,ClickHouse 则面临使用局限性 ...
- Spring Boot Admin 离线实例
一直处于离线状态 spring.boot.admin.client.instance.prefer-ip Use the ip-address rather then the hostname in ...
- WebSoket 的广泛应用
目前大多数网站都在使用的传统 HTTP 协议,即由 Web 服务器通过 HTTP 接收并响应来自客户端的消息,整个发起请求与响应的过程类似我们点外卖,由以下 2 部分构成: 下订单(发起请求):用户( ...
- 简单讲透Mac环境下多版本python的环境变量设置,仅对小白生效
windows下设置多版本的python管理相对容器,一切都是可视化的,但linux和mac下的python多版本对于小白来说,可能就没那么容易理解了. python多版本安装的问题 假如,首次安装了 ...
- 解决刷新页面丢失vuex数据
- 何时使用Kafka而不是RabbitMQ
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理.Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求.本文将比较 ...
- jedis 与 redission 实现分布式锁
本文为博主原创,未经允许不得转载: 目录: 1. Jedis 实现分布式锁 2. Redission 实现分布式锁 为了确保分布式锁可用,至少要保证锁的实现同时满足以下几个条件 互斥性:在任意时刻只有 ...