Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке Sorted Set (ZSet)?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Sorted Set (ZSet) у Redis - множина унікальних елементів, де кожен пов'язаний з числовим значенням-"оцінкою" (score); елементи автоматично зберігаються у відсортованому за score порядку, і можна отримувати діапазони за позицією чи за score. **Ключове:** реалізований як комбінація Hash (швидкий доступ до score за ім'ям) і Skip list (зберігання у відсортованому вигляді), що дає складність O(log N) для вставки, пошуку й видалення - ідеально для лідербордів, рейтингів і черг із пріоритетами.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**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). - Трекінг активності користувачів. - Списки задач за пріоритетом чи терміном.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.