[转帖]Redis 最大客户端连接数,你了解吗?

redis,最大,客户端,连接数,了解 · 浏览次数 : 0

小编点评

**Redis集群的最大连接数计算公式:** ``` maxTotal * pod数 < Redis cluster的最大连接数 ``` 其中: * `maxTotal` 是 Redis 集群中的所有连接的最大数量。 * `pod数` 是当前应用连接的数量。 * `Redis cluster的最大连接数` 是 `single_partition_max_clients * partition_count` 的乘积,其中: * `single_partition_max_clients` 是单个分片的最大连接数。 * `partition_count` 是分片数。 **测试结果:** * 测试结果表明,Redis集群的最大连接数等于单个分片的 `max_clients * partition_count`。

正文

文章系转载,方便整理和归纳,源文地址: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集群版85000080000768640000
        128GB集群版165000016000015361280000
        512GB集群版325000032000020482560000

        综上,可以看出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 最大客户端连接数,你了解吗?相似的内容:

        [转帖]Redis 最大客户端连接数,你了解吗?

        文章系转载,方便整理和归纳,源文地址:https://cloud.tencent.com/developer/article/1803944 1. 前言 上一篇文章《你的Redis集群撑得住吗?》讲了应用增加pod时,有一个应用最大连接数计算公式为:maxTotal * pod数 < Redis c

        [转帖]为什么redis的SDS的最大长度限制为512mb?

        当客户端操作 client 时,一般不会直接使用 sds ,而是通过对象的方式来使用。比如创建的字符串其实是一个对象,间接使用到了 sds 结构。限制 512M 的逻辑在 t_string.c 的 checkStringLength 方法。 在redis3.2.13、redis4.0.14、redi

        [转帖]Redis:我是如何与客户端进行通信的

        江湖上说,天下武功,无坚不摧,唯快不破,这句话简直是为我量身定制。 我是一个Redis服务,最引以为傲的就是我的速度,我的 QPS 能达到10万级别。 在我的手下有数不清的小弟,他们会时不时到我这来存放或者取走一些数据,我管他们叫做客户端,还给他们起了英文名叫 Redis-client。 有时候一个

        [转帖]Redis 性能优化的 13 条军规!史上最全

        https://zhuanlan.zhihu.com/p/118532234 Redis性能优化实战方案 Redis 是基于单线程模型实现的,也就是 Redis 是使用一个线程来处理所有的客户端请求的,尽管 Redis 使用了非阻塞式 IO,并且对各种命令都做了优化(大部分命令操作时间复杂度都是 O

        [转帖]redis最大连接和CPU使用过高

        https://www.jianshu.com/p/bca85370c808 redis默认最大连接数为10000 redis 使用的cpu过高是因为: 1.存在慢查询语句 slowlog get 10 获取慢查询语句 slowlog len 查看保存了多少慢查询语句 2.连接数量过多,导致要执行的

        [转帖]Redis中Key的过期策略和淘汰机制

        Key的过期策略 Redis的Key有3种过期删除策略,具体如下: 1. 定时删除 原理:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作优点:能够很及时的删除过期的Key,能够最大限度的节约内存缺点:对CPU时间不友好,如果过期的Key比

        [转帖]redis内存限制管理--maxmemory和maxmemory-policy

        https://www.cnblogs.com/zgxblog/p/14198543.html 作为内存数据库,为了防止redis占用过多的内存对其他的应用程序造成影响,可以在redis.conf文件中通过设置maxmemory选项对redis所能够使用的最大内存做限制,并通过maxmemory_p

        [转帖]redis配置注意事项(适合于较大配置)

        https://tool.4xseo.com/article/102125.html 实际中最好让redis主节点仅使用50-60%的内存,剩余的用于执行bgsave和创建写命令的缓冲区,保证最大可 ... 展开 根据官方的建议,redis-server的相关配置建议如下,但是有些并不合适,LZ会进

        [转帖]Redis 最佳实践(上)

        https://my.oschina.net/jiagoushi/blog/5601975 引言 尽管 redis 是一款非常优秀的 NoSQL 数据库,但更重要的是,作为使用者我们应该学会在不同的场景中如何更好的使用它,更大的发挥它的价值。主要可以从这四个方面进行优化:Redis 键值设计、批处理

        [转帖]Redis 运维实战 第02期:Redis Cluster

        https://cloud.tencent.com/developer/article/1986819 Redis 最为突出的特性就是:执行命令的速度非常快(原因是所有数据都存放在内存中)。但是单机 Redis 总会遇到瓶颈的,比如:并发、流量、内存等。在 Redis 3.0 之前,官方并没有提供集