2015-10-27 4 views
1

Я хотел бы использовать Redis как сервер удаленных таймеров. Мне нужен способ запланировать таймер с одного сервера и получать уведомление, когда этот таймер запускается на всех других серверах.Настройка Redis expire algorithm

Я уже реализовал этот механизм, используя устаревшие ключи и уведомления о ключах, и он работает.

Проблема заключается в том, что путь EXPIRE механизм настроен, когда у меня будет много таймеров они не могли вести огонь ... (http://redis.io/commands/expire)

мне было интересно, если есть способ изменить 25% правило истечения срока действия, во что-то другое, чтобы убедиться, что все таймеры будут запущены? Я могу жить с задержкой в ​​1-2 секунды, но мне нужно, чтобы все таймеры стреляли.

Я помню, где-то, что этот параметр настраивается, но я не могу найти документацию для него ..

+0

Это один из лучших способов использования Redis, и я лично видел, как он успешно работал. Сколько ключей/истекающих событий вы планируете управлять? –

ответ

1

вы не можете установить опцию, чтобы заставить Redis истекают все ключи сразу, но вы можете установить вариант как можно ближе к нему. Имейте в виду how redis expire works. В двух словах:

В частности, это то, что делает Redis 10 раз в секунду:

  1. Тест 20 случайных ключей из набора ключей с ассоциированным истекают.
  2. Удалить все найденные ключи истекло.
  3. Если более 25% ключей были просрочены, начните снова с шага 1.

Вы можете изменить это поведение с 10 timeshz опции в Redis конфигурационном файле. Из оригинальной документации:

Redis вызывает внутреннюю функцию для выполнения многих фоновых задач, как закрытие подключений клиентов в тайм-аут, продувка истекшие ключи , которые никогда не просили, и так далее.

Не все задачи выполняются с одинаковой частотой, но Redis проверяет на выполнение задач в соответствии с указанным значением «hz».

По умолчанию «хз» установлен значением 10. Увеличение значения будет использовать больше ресурсов процессора при Redis простаивает, но в то же время сделает Redis более отзывчивой, когда есть много ключей, истекающих в то же время, и таймауты могут быть обработаны с большей точностью.

Таким образом, вы можете изменить его на 100 или даже 1000. Это означает, что 1000 будет не менее 20 000 ключей в секунду, истек. Важно понимать, что ваш экземпляр redis будет потреблять много CPU в режиме ожидания, если у вас много таймеров.