如何为redis请求的节点设置超时

时间:2019-03-03 19:15:16

标签: node.js redis

我编写了一个使用redis的简单服务,将数据存储在内存中或从光盘中提取然后存储在内存中。现在,我试图控制抓取Redis缓慢的罕见情况。我已经看到了一个示例(https://gist.github.com/stockholmux/3a4b2d1480f27df8be67#file-timelimitedredis-js),该示例似乎可以解决此问题,但是实现起来很麻烦。

链接的实现为:

/**
 * returns a function that acts like the Redis command indicated by cmd except that it will time out after a given number of milliseconds
 * 
 * @param {string} cmd The redis commmand to execute ('get','hset','sort', etc.)
 * @param {integer} timeLimit The number of milliseconds to wait until returning an error to the callback.
 * 
 */
function timeLimited(cmd, timeLimit) {
  return function() {
    var
      argsAsArr = Array.prototype.slice.call(arguments),
      cb        = argsAsArr.pop(),
      timeoutHandler;

    timeoutHandler = setTimeout(function(){
      cb(new Error('Redis timed out'));
      cb = function() {};
    }, timeLimit);

    argsAsArr.push(function(err, values){
      clearTimeout(timeoutHandler);
      cb(err,values);
    });

    client[cmd].apply(client,argsAsArr);
  };
}

但是我不知道如何实现它,因为从未定义客户端,也从未传递过redis键/值。有人可以解释一下如何实现此示例吗?我一直在寻找更多信息或工作示例,但到目前为止还没有任何运气。谢谢。

1 个答案:

答案 0 :(得分:0)

这不是很清楚的写法,但是当您使用cmd(例如SET,HSET等)和时间限制调用它时,它将返回一个函数。您可以使用值调用此返回的函数。我不知道客户来自哪里,我想您需要将其纳入范围。这不是很好的代码,我建议您发布您所写的内容,并询问如何使用它来实现所需的功能。