Раздел 37 · Redis с нуля

Ключи, пространства имён и время жизни

junior~20 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

В прошлом уроке мы подключились к серверу и положили первый ключ. В Redis всё держится на ключах: нет таблиц и коллекций, есть одно большое пространство имён на весь сервер. Сегодня учимся называть ключи так, чтобы в них не запутаться, проверять и удалять их и, главное, задавать им время жизни.

Камера хранения на вокзале

В камере хранения тысячи ячеек, и у каждой свой номер. Сдал сумку, получил номер, по номеру забрал. Никто не ищет сумку «синего цвета с наклейкой»: только по номеру. А ещё у камеры хранения бывает срок: не забрал вещи за трое суток, ячейку освобождают.

Redis устроен так же. Ключ это номер ячейки, значение это сумка. А время жизни ключа это срок хранения, после которого ячейка освобождается сама.

Как называть ключи

Все ключи лежат вместе, поэтому порядок задают сами имена. Принято собирать имя из частей через двоеточие, от общего к частному:

user:42:name
user:42:city
book:1:title
session:a8f3c1
cache:book:1

Первая часть называет тип объекта, дальше идёт его номер и поле. Такую схему называют пространством имён, хотя для самого Redis это обычные строки. Двоеточие понимают графические клиенты: они показывают ключи деревом, как папки.

Несколько правил, которые сэкономят время:

  • Имя читается без справочника. user:42:cart понятнее, чем u42c. Пара лишних байт на ключ почти ничего не стоит.
  • Один стиль на проект. Если в одном месте user:42, а в другом users_42, найти все ключи пользователя будет трудно.
  • Префикс по назначению. Ключи кэша начинай с cache:, тогда их легко отличить от данных, которые терять нельзя.

Есть ли ключ и что в нём

EXISTS проверяет ключи и возвращает, сколько из них нашлось:

127.0.0.1:6379> SET user:42:name alice
OK
127.0.0.1:6379> EXISTS user:42:name
(integer) 1
127.0.0.1:6379> EXISTS user:42:name user:42:age
(integer) 1

Второй запрос спрашивает про два ключа и отвечает 1: найден только один. Ответ (integer) значит, что сервер вернул число.

TYPE показывает, какая структура лежит под ключом: string, list, hash и другие, или none, если ключа нет. Это пригодится, когда начнём работать со списками и хешами.

DEL удаляет ключи и возвращает, сколько удалилось. Несуществующие пропускаются:

127.0.0.1:6379> DEL user:42:city book:1:title
(integer) 2

урок из курса

Урок из курса «Redis с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.