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`.