Ось твій урок у стилі CS50. Вмикай уяву: ми в лекційній залі, я ходжу сценою, жестикулюю і звертаюсь прямо до тебе. Поїхали!
🔴 CS50 Redis: CLI та перші кроки
1. 🔥 Вступ: Навіщо нам "чорний екран"?
Вітаю! Радий бачити. Уявіть ситуацію: п'ятниця, вечір. Ваш інтернет-магазин раптом починає "гальмувати". Користувачі скаржаться, що кошик зникає, а сесії "відвалюються". Ви підозрюєте, що проблема в Redis — нашій швидкій пам'яті.
Що ви будете робити?
Писати скрипт на Python або Java, щоб перевірити з'єднання? Компілювати код, деплоїти його, дивитися логи? Це занадто довго! Поки ви це зробите, користувачі вже підуть до конкурентів.
Вам потрібен прямий доступ. Вам потрібно "відкрити капот" і подивитися, чи крутиться мотор.
Питання до вас: Якби ви були лікарем, ви б хотіли ставити діагноз через переписку в чаті, чи воліли б оглянути пацієнта особисто, тут і зараз?
Redis CLI (Command Line Interface) — це ваш стетоскоп. Це інструмент, який дозволяє говорити з базою даних напряму, без посередників у вигляді бекенд-коду. Без розуміння CLI ви працюєте "наосліп". Сьогодні ми знімемо пов’язку з очей.
2. 🧠 Теоретична база: Як це працює?
Давайте розберемося, що відбувається, коли ви пишете команду в терміналі.
Уявіть ресторан. * Redis Server — це шеф-кухар на кухні. Він дуже швидкий, але мовчазний. Він просто готує дані. * Ваш код (Python/JS) — це офіціант, який носить замовлення. * Redis CLI — це можливість зайти на кухню і крикнути шефу прямо в вухо: "Дай мені бургер!".
Що "під капотом"?
Redis працює за моделлю Клієнт-Сервер.
1. Ви запускаєте redis-cli (Клієнт).
2. Він встановлює TCP-з'єднання з сервером (зазвичай порт 6379).
3. Ви пишете текст (команду).
4. CLI перетворює цей текст у спеціальний формат (протокол RESP — про це поговоримо пізніше, зараз просто знайте, що це мова, яку розуміє сервер).
5. Сервер виконує дію і повертає відповідь.
🔑 Що треба запам'ятати залізно:
- Redis — це сховище "Ключ-Значення" (Key-Value). Усе в Redis має своє ім'я (ключ).
- CLI працює в режимі REPL (Read-Eval-Print Loop): він читає вашу команду, виконує її, друкує результат і чекає знову.
3. 🧪 Приклади: Від простого до реального
Відкривайте терміналом (або уявіть його). Ви бачите промпт: 127.0.0.1:6379>. Це означає, що ми "на кухні".
Приклад 1: Hello World
Найпростіша операція — зберегти рядок.
SET greeting "Hello, Redis!"
Питання: Що, на вашу думку, відповість Redis?
.
.
.
Відповідь: OK.
Redis лаконічний. Він підтвердив, що створив ключ greeting зі значенням "Hello, Redis!".
А тепер давайте дістанемо це:
GET greeting
Результат: "Hello, Redis!"
Приклад 2: Лічильник переглядів (Реальний кейс)
Уявіть, що ви робите YouTube. Вам треба рахувати перегляди відео. Ключ — це ID відео (video:101:views), а значення — число.
SET video:101:views 0
INCR video:101:views
INCR video:101:views
Питання: Що поверне остання команда INCR?
.
.
.
Відповідь: (integer) 2.
Redis розумний. Хоча ми записали 0 як текст (бо Redis зберігає рядки), команда INCR розпізнала це як число, додала одиницю і повернула новий результат. Це атомарна операція — навіть якщо 1000 людей натиснуть play одночасно, Redis нічого не загубить.
Приклад 3: "Згораюче" повідомлення (SMS-код)
Ви відправляєте код для входу, який діє 30 секунд.
SETEX auth_code 30 "123456"
(Це комбінація SET + EXPIRE)
Тепер перевіримо, скільки часу залишилось жити цьому ключу:
TTL auth_code
Ви побачите число, наприклад (integer) 28. Якщо зачекаєте 30 секунд і зробите GET auth_code, отримаєте (nil). Дані зникли. Магія? Ні, це механізм TTL (Time To Live).
4. 🛠 Практична частина
Час бруднити руки! Виконайте ці завдання у своєму терміналі (або на сайті try.redis.io).
🔹 Завдання 1: Розігрів
Створіть ключ myname зі своїм іменем. Перевірте, чи він зберігся, використовуючи GET.
🔹 Завдання 2: Перезапис
Що буде, якщо ви знову зробите SET myname "Terminator"? Спробуйте. Перевірте значення.
(Спойлер: старе значення затреться без попередження).
🔹 Завдання 3: Арифметика
Створіть ключ wallet зі значенням 100.
Витратьте 50 одиниць (використайте команду DECRBY wallet 50). Скільки залишилось?
🔹 Завдання 4: Міні-кейс "Кеш"
Уявіть, що ви кешуєте ціну біткоїна, але вона актуальна лише 10 секунд.
Запишіть ключ btc_price зі значенням 50000, який зникне через 10 секунд. Перевіряйте його командою TTL кожні 2 секунди, доки він не помре.
🔹 Завдання 5: А що, якщо...
Спробуйте виконати команду INCR myname (де лежить ваше ім'я, а не число).
Яку помилку ви отримали? Чому Redis на вас свариться?
(Підказка: Redis суворо ставиться до типів даних, коли ви просите математику).
5. 💡 Мислення як у розробника
Ви навчилися писати команди. Але як думає сеньйор-розробник?
❌ Типова помилка новачка: KEYS *
Дуже спокусливо написати KEYS *, щоб побачити всі ключі в базі.
Ніколи, чуєте, ніколи не робіть цього на продакшені!
Чому? Redis однопотоковий (mostly). Якщо у вас мільйон ключів, ця команда заблокує сервер, доки не перерахує їх усі. Ваші користувачі в цей час отримуватимуть помилки.
✅ Як робить профі: Використовує команду SCAN, яка видає ключі порціями, не блокуючи роботу магазину.
❌ Помилка: Забуті ключі
Новачки часто створюють тимчасові дані без TTL (часу життя). Через рік ваша пам'ять забита сміттям.
✅ Як робить профі: Завжди запитує себе: "Ці дані мають жити вічно?". Якщо ні — ставимо EXPIRE.
💡 Порада
Використовуйте CLI не для написання коду, а для дебаггінгу.
* Код не бачить ключ? Зайди в CLI, зроби GET.
* Ключа немає? Значить проблема в записі.
* Ключ є? Значить проблема в читанні.
Ви локалізуєте проблему за секунди.
6. 🧩 Підсумок
Ми сьогодні зробили великий крок.
- Ви зрозуміли, що CLI — це пряма лінія зв'язку з вашою базою даних.
- Вивчили базу:
SET(записати),GET(прочитати),INCR(рахувати),TTL(перевірити життя). - Ви дізналися, чому не можна блокувати сервер командою
KEYS *.
Що ви тепер вмієте: Ви можете зайти на будь-який сервер з Redis, перевірити, чи він живий, подивитися, які дані там лежать, і навіть вручну виправити баг гарячими слідами.
🔍 Тизер: Сьогодні ми працювали лише з простими рядками та числами. Але Redis — це не просто блокнот. Уявіть, що один ключ може зберігати цілий список друзів, унікальну чергу задач або навіть рейтингову таблицю геймерів. На наступному уроці ми розберемо Складні структури даних: Списки (Lists) та Хеші (Hashes). Це буде цікаво!
А поки що — практикуйтесь. exit 👋