Node.js为Redis请求设置超时

时间:2019-03-04 00:38:23

标签: node.js redis

我编写了一个使用redis的简单服务,将数据存储在内存中或从磁盘中获取数据,然后再存储在内存中,并希望为慢速请求设置超时。我希望找到一种方法来使带有超时的get请求防止这种请求挂起。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

因此,您可以在此处做一些事情。但是,首先,我想知道您是否正在尝试过早的优化。在大多数情况下,Redis的运行速度非常快,如果在客户端上发现性能问题,则表明您的数据或在Redis中的处理方式存在问题。应该在redis中修复此问题,您无需在客户端中处理缓慢的请求。

因此,如果您偶尔看到速度变慢,那么它们是由什么引起的呢?这不是正常的Redis问题,应该解决而不是寻找JavaScript修复程序。

如果您仍在寻找JavaScript修复程序,则可以执行以下操作:

const client = require('redis').createClient(...);

export async function asyncSetEx(key) {
  return new Promise((resolve, reject) => {
    const timer = setTimeout(() => {
      reject(new Error('Timed out'));
    });
    client.setEx(key, (res, err) => {
      if (err) {
        reject(err);
      } else {
        resolve(res);
      }
      clearTimeout(timer);
    });
  });
}

不过,我建议对此进行概括,以使其适用于具有任意数量参数的任何redis函数。

答案 1 :(得分:0)

<块引用>

防止这个请求挂起

如果将 enable_offline_queue 设置为 false,所有 Redis 命令将立即抛出异常,而不是等待重新连接。然后,您可以捕获该异常并从光盘或某个数据库中获取数据。

在文档中找不到关于此的任何内容,并在 SO 上发现了许多此类问题,因此发布在这个旧问题中。

请记住,当 enable_offline_queue 设置为 false 时,您在服务器出现连接问题时发出的命令将永远不会执行。