是否可以将错误消息"达到的最大客户端数"更改为空或空字符串?
我正在使用 redis 作为我的数据库值的缓存,如果我无法从缓存中获取值,我将从数据库中获取它。 如果我可以在 Redis 中自行配置它,那对我来说将是最佳选择,因为我的代码不必更改以支持该边缘情况。
如果有人有一些关于如何避免此类错误的提示,那也很好:)(我正在使用带有predis包的php脚本)
错误消息max number of clients reached
清楚地表明 Redis 已达到客户端限制,无法处理任何新请求。
- 此问题可能与代码中不正确使用
PredisClient
有关。而是创建一个连接对象一次(singleton
),并在进程生存期内使用它。代码可能会在每次向 Redis 发出请求时创建一个新对象,并保持所有这些连接处于打开状态。 - 另一件事值得检查 Web 服务器如何管理
php
进程。网络服务器(例如apache prefork
,nginx php-fpm
) 可能会长时间离开进程,既保持与 Redis 的连接,又耗尽服务器资源(mem、CPU)。 - 如果上面没有任何内容是真的 - 问题(错误)可能出在
predis
库中。
底线:代码/Web 服务器耗尽maxclients
限制。
如果您无法控制代码/Web 服务器(例如nginx
),要减少错误消息的数量,您可以:
- 将
maxclients
增加到 10k 以上(取决于您的 Redis 服务器资源)。这将减少错误消息的频率。 - 考虑启用(默认禁用)连接
timeout
(谨慎使用它,因为代码可能假定连接永远不会超时)。这将从连接池中释放旧连接。 - 将
tcp-keepalive
从300
秒减少到小于timeout
秒。这将关闭与dead peers
的连接(即使看起来已连接也无法访问的客户端)。