intermediate
Sets
Используйте sets для uniqueness, membership, intersections и id collections, где ordering irrelevant.
Sets хранят неупорядоченные уникальные строки — для проверки membership, коллекций тегов, idempotency keys и алгебры множеств без порядка.
SADD article:9:tags redis nosql cache
SISMEMBER article:9:tags redis # O(1) membership
SMEMBERS user:42:roles
SINTER tag:redis tag:cache # статьи с обоими тегами
SUNIONSTORE tmp:all user:1:likes user:2:likes
SREM processed:events evt-991
| Sets уместны | Избегайте sets, когда | |--------------|----------------------| | Уникальные id или теги | Нужны порядок или ранжирование | | Быстрая проверка membership | Значения — большие документы | | Пересечение / объединение | Cardinality миллионы на ключ | | Dedup с TTL на родительском ключе | Запросы по диапазону score |
`SCARD` и `SMEMBERS` на огромных sets дороги — используйте bucketing или HyperLogLog для приблизительных счётчиков. Sets подходят для «видели ли event id?» с ограниченным TTL namespace.
На интервью: дайте задачу на уникальность или пересечение и покажите, почему set лучше list или string.
Типовые ошибки: большой JSON в members; неограниченный `SMEMBERS` на hot path; sets как основная БД; нет стратегии истечения для dedup sets.
Компромисс — O(1) проверка уникальности vs память на member: sets компактны для id и тегов, но не подходят, когда важны порядок, score или размер payload.
Чеклист:
- Подтвердите, что уникальность — ядро задачи.
- Выберите операции: add, test, intersect, union.
- Спланируйте TTL или pruning для dedup окон.
- Оцените cardinality до `SMEMBERS`.