SADD и SMEMBERS
Тема дорожной карты · Redis
SADD и SMEMBERS — основополагающие команды для работы с множествами Redis — неупорядоченными коллекциями уникальных элементов в in-memory хранилище. SADD key member [member ...] добавляет одного или нескольких участников в множество, автоматически игнорируя дубликаты, что делает множества Redis идеальными для отслеживания уникальных посетителей, тегов или прав в распределённом кэше. SMEMBERS key возвращает всех участников множества за O(N) времени и лучше всего использовать на небольших множествах; для больших множеств SSCAN предоставляет курсорную итерацию во избежание блокировки цикла событий Redis. Множества Redis также поддерживают мощные команды теоретико-множественных операций — SINTER, SUNION и SDIFF — работающие через несколько ключей полностью в in-memory хранилище, обеспечивая эффективное пересечение или объединение групп пользователей, флагов функциональности или списков доступа. Понимание SADD и SMEMBERS фундаментально для использования множеств Redis как быстрой in-memory альтернативы SQL JOIN для задач управления принадлежностью и тегированием.
Как это работает
SADD и SMEMBERS — Sets и Sorted Sets. Set (SADD/SREM/SISMEMBER/SINTER) — неупорядоченная коллекция уникальных: O(1) проверка членства, set-алгебра (пересечение, объединение, разность). Sorted Set (ZADD/ZRANGE/ZRANGEBYSCORE/ZRANK) — set, где у каждого члена есть score; авто-упорядочены по score — идеально для leaderboards, time-based feed, priority queue. Sorted — O(log N) add/remove, unsorted — O(1).
Когда применять
Sets — для "уникальные X на Y" (уникальные посетители на страницу, теги на пост, онлайн юзеры в чате) — SINTER отлично для "общее между двумя cohort". Sorted Sets — для любого ранжирования: leaderboards (score = очки), time-indexed feeds (score = timestamp), priority queue (score = priority). Для high-volume time-series ZADD + ZRANGEBYSCORE лучше самописного.
Типичные ошибки
Ловушки SADD и SMEMBERS: SINTER на гигантских sets (материализует результат — медленно); sets для упорядоченных данных (потом удивление, что порядок undefined — переходите на sorted sets); непонимание коллизий score (члены с равным score упорядочены лексикографически — иногда баг); leaderboard на миллионы записей в памяти навсегда (TTL или trim).