У вас есть много вариантов для достижения того, что вы хотите, но я собираюсь предоставить один здесь, который является очень эффективным с точки зрения получения скорости, но требует больше места.Очевидно, все зависит от вашего варианта использования.
Скажем, токен 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 - это гибкость.