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.