2015-06-06 3 views
0

Я храню временные токены в Memcache, и он работает хорошо. Когда пользователь входит в мое приложение, они представляют свои учетные данные, а токен хранится в Memcache с 15-минутным TTL, а также возвращается пользователю. Каждый раз, когда пользователь делает запрос, представляющий токен, его TTL расширяется. Ключ Memcache - «user-id- {id}». Это означает, что если пользователь регистрируется дважды в течение первого сеанса, он будет признан недействительным по мере замены токена.Хранение нескольких сеансов в Memcache для пользователя

Я бы хотел, чтобы у пользователей была возможность иметь несколько активных токенов. Причина, по которой я использую имя ключа «user-id- {id}» вместо произвольно сгенерированной строки, заключается в том, что я хочу контролировать количество активных токенов, которые пользователь имеет. Если бы я дал им случайные имена, один пользователь мог бы заполнить мою базу данных Memcache, создав миллионы токенов.

Как я могу ограничить их наличием, скажем, 10 активных токенов? Я подумал о добавлении индекса, такого как «user-id- {id} - {index}», а затем итерации более 1-10 для индекса, чтобы увидеть, есть ли пустое место для токена. Это похоже на большую работу и имеет некоторые условия гонки. Есть ли лучшие варианты для достижения моей цели, если я хочу продолжать использовать Memcache?

ответ

0

Сохраните тот же ключ и сохраните коллекцию активных сеансов. Если вы это сделаете, вам необходимо вручную управлять TTL для всех, кроме первой записи.

+0

, но тогда все они будут иметь одну запись в memcache и не могут иметь отдельные TTL – william

+0

да, хороший момент @william. В ответ я должен был что-то сказать. Я обновил свой ответ. необходимость беспокоиться о TTL самостоятельно делает решение менее привлекательным. что это может быть лучше всего, что вы можете придумать. –

Смежные вопросы