intermediate

Sorted sets

Используйте sorted sets для leaderboards, time windows, delayed jobs, ranking и range queries by score.

Sorted sets (ZSET) связывают member с числовым score — уникальные members упорядочены по score. Используются для leaderboards, priority queue, скользящих окон, delayed jobs и rank/range запросов.

					ZADD leaderboard 1520 user:42 980 user:7
ZREVRANK leaderboard user:42
ZRANGEBYSCORE delayed:jobs 0 1718448000 LIMIT 0 10
ZINCRBY leaderboard 50 user:42
ZREMRANGEBYSCORE sessions:active 0 1718440000
				

| Паттерн | Подход ZSET | |---------|-------------| | Leaderboard | Score = очки; `ZREVRANGE` top N | | Delayed jobs | Score = время запуска | | Окно rate limit | Score = время события; trim по score | | Уникальный ранг | Member уникален; ничьи по правилам Redis |

Диапазон по score — O(log N + M). Обновления — O(log N). Для tie-break beyond score кодируйте данные в member или аккуратно составляйте score.

На интервью: объясните, почему sorted set подходит для ranking или scheduling и как обрезаете старые scores.

Типовые ошибки: ZSET как полноценное хранилище документов; миллионы members в одном ключе без шардинга; clock skew на timestamp scores; путаница lex vs numeric range API.

Компромисс — упорядоченные range-запросы vs память и log-time updates: sorted sets сильны, когда access pattern строится вокруг score.

Чеклист:

  • Определите семантику score (очки, epoch ms, priority).
  • Выберите range-команды для read path.
  • Спланируйте pruning (`ZREMRANGEBYSCORE`) для time windows.
  • Шардируйте горячие ZSET при взрыве cardinality.