node.js создает рабочие места с помощью ttl, используя redis - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно спроектировать приложение node.js в этом сценарии:

  1. Пользователь запрашивает / страницу с файлом cookie, который имеет уникальное token
  2. Node.js создаетrecord с этим токеном на Redis (?) с 5-минутным TTL.token s имеет тип n.Поэтому redis (?) Должен хранить токены с типами.
  3. Если пользователь возвращается снова до истечения record, TTL record снова сбрасывается на 5 минут.
  4. Если пользователь не делаетне может вернуться снова и record истекает, функция запускается.
  5. И, наконец, I также нужно, чтобы число record s принадлежало определенному типу (то есть типу 27).

Как лучше всего решить эту проблему?Является ли Redis правильным выбором для этого?Как я могу сосчитать token с и запустить 5. шаг, если я использую Redis?Использование https://github.com/Automattic/kue или что-то подобное было бы хорошим выбором?

Редактировать: кажется возможным дублировать с Событие на ключ истекает .В общем спрашиваю, подходит ли redis для этой проблемы?Если вы так думаете, не могли бы вы привести пример, которому я должен следовать.Если нет, то каковы другие решения, возможно, даже без redis или стороннего инструмента.

Также, как я сказал в пункте 5. в приведенном выше списке, redis, похоже, не подходит для запроса keys с шаблономздесь описано: https://redis.io/commands/keys.Поскольку, похоже, нет способа выставить срок действия отдельному элементу набора ( TTL для набора ), я не могу поместить токены в набор type или хэш.Таким образом, мне нужно запросить ключи, чтобы получить счетчик группы (type), и это неэффективно, как описано по ссылке выше.

Даже если https://redis.io/topics/notifications решит проблему в4. пункт в списке выше, я также спрашиваю: «Какой шаблон / алгоритм я должен идти и как»Я не хочу, чтобы ты кодировал для меня, но просто нужна искра.Учебник, руководство, видео и т. Д. Было бы здорово.Спасибо!

1 Ответ

0 голосов
/ 16 октября 2018

У вас есть много вариантов для достижения того, что вы хотите, но я собираюсь предоставить один здесь, который является очень эффективным с точки зрения получения скорости, но требует больше места.Очевидно, все зависит от вашего варианта использования.

Скажем, токен 12345, тип A

При добавлении токена (мы сделаем это с транзакцией):

MULTI
SETEX tokens:12345 300 ""
SET type:12345 "A"
INCR types:A
EXEC

Когда срок действия ключа истекает (через 300 секунд или всякий раз, когда Redis видит его как просроченный), мы получаем уведомление с помощью уведомлений Keyspace (https://redis.io/topics/notifications) прослушивание события EXPIRED:

PSUBSCRIBE __keyspace@0__:expired

Когда эта подписка получает сообщение, в вашем коде вам необходимо:

MULTI
GET type:12345 # Returns A
DEL type:12345
DECR types:A
EXEC

Чтобы получить элементы определенного типа:

GET types:A

Любой клиент NodeJS Redis будетотлично подойдет для этого.

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

...