• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

redis_py_cluster读取redis遇到too many connections问题

tech admin 8个月前 (08-13) 1042次浏览 0个评论 扫描二维码

最近项目中需要自己去往redis里面写数据,redis集群读写需要使用到redis_py_cluster这个python包,这中间遇到不少问题,其中就有数据序列化问题,有人使用spark 中的json序列化方式,与python还不兼容,最后是不序列化直接存字符串的方式解决了不同语言之间的兼容问题,但是自己在读写redis的时候遇到了too many connections的错误,字面上就是建立了太多的连接。

redis本来不就是频繁的读写操作?这个报连接太多嘛意思,一开始定位可能是redis集群版本与python包版本不匹配的问题,通过降级方式还是会出现上述现象。
下面是定义连接的方式

from rediscluster import StrictRedisCluster

redis_conn = StrictRedisCluster(startup_nodes=[{'host': '1333', 'port': 829}, {'host': '13334', 'port': 8269}],
                                skip_full_coverage_check=True)

注意上面只是定义连接,其实现在你还没有跟redis集群进行任何连接,当你在执行get或者set的时候才会进行连接。
StrictRedisCluster定义如下

其中有一个max_connections最大连接数的参数,这个如果你设置20,那么在你建立20个连接的时候会报错,这个就会出现文章一开始说的问题,这个也是自己折腾好久才发现的点。

你可以这么来定位这个问题,你是哟空上面的定义好之后执行一个get操作,在去查看这个变量

这个可以打印当前已经建立的连接,你会发现有一条,当你继续读写数据的时候如果建立的连接超过20立马就会报错。

那么解决的方法是啥呢,我现在想的是超级简单:max_connnections参数不指定,因为你不指定,python会自己指定2**31次方
源码定义

这个为什么设置这么大也可以理解,基本上你一次get之后很快就会失去连接,redis不会保持很长的连接,所以自动就会断开,设置这么大其实对redis集群没有什么太大的影响,除非你的并发超级大,超过了redis默认最大的连接数,那么就会出现问题。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明redis_py_cluster读取redis遇到too many connections问题
喜欢 (0)
[@lc@]
分享 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!