php - 将 'max number of client reached' redis 错误消息更改为 ''

标签 php redis predis

是否可以将错误消息“达到最大客户端数”更改为 null 或空字符串?

我正在使用 Redis 作为我的数据库值的缓存,如果我无法从缓存中获取值,我将从数据库中获取它。 如果我可以在 redis 中自行配置它,那将是我的最佳选择,因为我的代码无需更改即可支持这种边缘情况。

如果有人有一些关于如何避免此类错误的提示,那也很好:)(我正在使用带有 predis 包的 php 脚本)

最佳答案

错误消息 max number of clients reached 清楚地表明 Redis 已达到客户端限制,无法处理任何新请求。

  • 此问题可能与代码中错误使用 Predis\Client 有关。而是创建一次连接对象(singleton)并在整个进程生命周期中使用它。该代码可能会在对 Redis 的每个请求上创建一个对象,并保持所有这些连接打开。
  • 另一件事值得检查 php 进程是如何由 Web 服务器管理的。 Web 服务器(例如 apache preforknginx php-fpm)可能会使进程长时间保持与 Redis 的连接并耗尽服务器资源(内存、cpu)。
  • 如果以上内容均不正确 - 问题(错误)可能出在 predis 库中。

底线:代码/网络服务器耗尽 maxclients 限制。

如果您无法控制代码/网络服务器(例如 nginx),要减少错误消息的数量,您可以:

  • maxclients 增加到 10k 以上(取决于您的 Redis 服务器资源)。这将减少错误消息的频率。
  • 考虑启用(默认情况下禁用)连接 timeout(谨慎使用,因为您的代码可能假定连接永远不会超时)。这将从连接池中释放旧连接。
  • tcp-keepalive300 秒减少到小于 timeout。这将关闭与 dead peers 的连接(即使看起来已连接也无法访问的客户端)。

关于php - 将 'max number of client reached' redis 错误消息更改为 '',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64305408/

相关文章:

php preg_split 忽略重复的分隔符

php - MySQL中如何获取之前操作的id(主键)的值

dictionary - 用于大型整数值列表的键值存储

redis - 在 Redis 中,如何通过从第二个排序集中排除记录来将记录与第一个集分开。?

php - 如何在 Laravel 中使用 Redis 缓存?

php - 如何将 ZINCRBY 与 predis 一起使用

php - SELECT 是同步的还是异步的?

php - Firebase token 验证

redis - 如何查看我的 Redis 数据库 current_size?

php - 在 Redis 中存储对象数组并检索它