как установить таймаут с узлом для повторного запроса - PullRequest
0 голосов
/ 03 марта 2019

Я написал простой сервис, использующий 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 голосов
/ 03 марта 2019

Это не очень ясно написано, но когда вы вызываете его с помощью cmd (например, SET, HSET и т. Д.) И ограничения по времени, он возвращает функцию.Вы вызываете эту возвращаемую функцию со значениями.Я не знаю, откуда приходит клиент, я думаю, вам нужно иметь его в поле зрения.Это не очень хороший код, я бы предложил опубликовать то, что вы написали, и спросить, как добиться того, чего вы хотите с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...