Що таке 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 реалізований як комбінація:
- Hash - для швидкого доступу до score за ім'ям елемента.
- Skip list - для зберігання елементів у відсортованому вигляді.
Так досягається складність O(log N) для вставки, пошуку й видалення.
Застосування
- Рейтингові таблиці (лідерборди).
- Черги з пріоритетами.
- Часові мітки подій (time series).
- Трекінг активності користувачів.
- Списки задач за пріоритетом чи терміном.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.