Redis представляет собой in-memory key-value хранилище в команде, например KEYS * — шаблон, соответствующий всем ключам
Что произойдёт в Redis при запросе со * (звёздочкой)?
Redis представляет собой in-memory key-value хранилище в команде, например KEYS * — шаблон, соответствующий всем ключам
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Что произойдёт в Redis при запросе со * (звёздочкой)?
-
Redis представляет собой in-memory key-value хранилище
-
в команде, например
KEYS *— шаблон, соответствующий всем ключам -
Команда
KEYS *возвращает все ключи из базы данных -
во время выполнения команда блокирует сервер
-
при большом числе ключей это приводит к снижению производительности
-
для итеративного поиска рекомендуется применять SCAN
-
KEYS *удобна при отладке, однако не подходит для продакшена
Подробный ответ
Основной ответ
Если в Redis выполнить запрос с ключом * (звёздочкой), например отправить команду GET * или применить KEYS *, результат будет определяться типом команды. В Redis * является wildcard-паттерном со значением "все ключи", однако автоматически подставляться во все команды он не может. Так, KEYS * вернёт перечень всех ключей базы, тогда как GET * завершится ошибкой: GET принимает конкретный ключ, а не шаблон.
Ключевые моменты
- Команда
KEYS *выдаёт все ключи, соответствующие шаблону*, то есть все ключи текущей базы данных. Хотя это удобно, при большом количестве ключей команда способна создать существенную нагрузку и заблокировать сервер. - Команды с шаблонами работают только с отдельными командами — например,
SCAN,KEYS,DEL(с несколькими ключами, но без шаблона), но не сGETилиSET. - Промежуток масштабируемости: применять
KEYS *на продакшн-сервере не рекомендуется, поскольку команда блокирует Redis и способна замедлить его работу (это измеряют при количестве ключей до сотен тысяч и более). - Попытка выполнить что-либо вроде
GET *приведёт к синтаксической ошибке Redis, так какGETтребует точное имя ключа.
Практический контекст
В реальных проектах для обхода ключей по шаблону применяют команду SCAN с паттерном *: она выполняет итерацию и не блокирует сервер. Для отладки и небольших баз подходит KEYS *. Когда требуется удалить большое число ключей по шаблону, используют скрипты с SCAN и DEL, избегая проблем с производительностью.