Redis "max number of clients reached"

问题描述

在Django的websocket连接中,借用Redis实现消息订阅的功能,突然出现问题,websocket端连接不上服务器,在uwsgi日志中发现是握手中连接Redis出错,进而导致握手失败,日志

ConnectionError: max number of clients reached

解决办法

在查找资料后,得知主要有2个原因会导致出现此问题

  • Redis允许的连接数太小,并发的客户端超过这个值
  • 客户端未及时关闭,导致Redis的连接数被耗尽

打开Redis的配置文件,检查maxclients参数,发现为1000,客户端当前应该是不超过1000的,使用命令检查一下连接数

netstat -an|grep redis | wc -l
1001

居然有那么多连接,看来自己遇到的问题应该是第二种,应该是客户端的websocket断开后,代码逻辑中没有释放连接,导致运行一段时间后出现这个问题。

发现问题,解决的办法应该也很简单了
1,在websocket的connection lost事件中,释放redis
2,简单一点,给redis添加一个timeout时间,超时后自动释放,当然此方法不适合频繁的Redis连接,毕竟过一段时间Redis才会释放

点赞