Skip to main content

Що таке Sorted Set (ZSet)?

Sorted Set (ZSet) у Redis - це множина унікальних елементів, де кожен елемент пов'язаний з числовим значенням - "оцінкою" (score). Ці елементи автоматично зберігаються у відсортованому порядку за score.

Основні властивості

  • Кожен елемент унікальний, як у звичайному Set.
  • У кожного елемента є score - число з плаваючою комою (float).
  • Елементи завжди впорядковані за score (за зростанням).
  • Можна отримувати діапазони за позицією чи за score.

Приклад

bash
ZADD rating 100 "anna" 200 "ivan" 150 "maria" ZRANGE rating 0 -1 WITHSCORES

Результат:

javascript
1) "anna" (100) 2) "maria" (150) 3) "ivan" (200)

Елементи автоматично відсортовані за score.

Основні команди

КомандаОпис
ZADD key score member [score member ...]додати елементи з оцінками
ZRANGE key start stop [WITHSCORES]отримати елементи за позицією (за зростанням)
ZREVRANGE key start stop [WITHSCORES]те саме, але за спаданням
ZRANGEBYSCORE key min max [WITHSCORES]отримати елементи за діапазоном score
ZREM key member [member ...]видалити елемент(и)
ZSCORE key memberотримати score елемента
ZCARD keyкількість елементів
ZCOUNT key min maxкількість елементів у діапазоні score
ZRANK key memberпозиція елемента за зростанням
ZREVRANK key memberпозиція за спаданням
ZINCRBY key increment memberзбільшити score елемента

Приклад рейтингу

bash
ZADD leaderboard 300 "player1" ZADD leaderboard 500 "player2" ZADD leaderboard 450 "player3" ZREVRANGE leaderboard 0 2 WITHSCORES

Результат:

javascript
1) "player2" (500) 2) "player3" (450) 3) "player1" (300)

Так можна зберігати таблиці лідерів, рейтинги, очки, пріоритети задач.

Діапазон за score

bash
ZRANGEBYSCORE leaderboard 400 600

Результат:

javascript
"player2" "player3"

Внутрішня будова

ZSet реалізований як комбінація:

  1. Hash - для швидкого доступу до score за ім'ям елемента.
  2. Skip list - для зберігання елементів у відсортованому вигляді.

Так досягається складність O(log N) для вставки, пошуку й видалення.

Застосування

  • Рейтингові таблиці (лідерборди).
  • Черги з пріоритетами.
  • Часові мітки подій (time series).
  • Трекінг активності користувачів.
  • Списки задач за пріоритетом чи терміном.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.