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