данных только токен и айди пользователя. Мои варианты:
1) SET/GET/DEL, но как удалить все сессии одного пользователя?
2) hash (мапа) и HSET/HGET/HDEL, но как искать по токену?
Требуется поиск по токену, удаление его или всех для юзера
Это не тут мы дружно ржали над тем, что редис вечно вешается и теряет всю базу?
не в прод пишется, но слышал что редис часто используют для этого
Используют -- часто, непонятно только зачем и почему.
1) Записывать в двух вариантах token => user_id, user_id => token 2) Использовать KEYS с паттерном поиска и писать ключи типо tokens:user_id:user_token. Не самый популярный вариант, но проблем с производительностью быть не должно, если у вас там не баснословное кол-во записей хранится
Создание: SET 12192:1dfd21340440eb3c1e51 "" Поиск: SCAN 0 MATCH *:1dfd21340440eb3c1e51 COUNT 1 Удаление: DEL 12192:1dfd21340440eb3c1e5 Удаление всех токенов: В приложении результат KEYS 12192:* положить в аргументы DEL ?
да. Классифицировать ключи все же стоит конкретней, порядка будет больше
редис - это самопвоспроизводимая проблема. именно из-за вот этого "я слышал, это популярное решение" его берут и берут на вооружение люди, еще не осознавшие проблематику конкретно этого сервиса.
И да, регулярное, на каждый connection использование scan, который O(N) от числа элементов на всю коллекцыю в редиске -- это полный абзац. Прямо сразу вопрос -- а нафига брать редис, как-то его тамагочить, если скорость вообще в принцыпе не интересует? То есть, вопрос нафига брать редис стоит всегда, конечно -- но тут он сразу встаёт второй раз. Просто не делайте так.
Обсуждают сегодня