Как определить, сколько баз данных доступно в Redis

Как определить, сколько баз данных доступно в Redis

Redis — одна из самых популярных in-memory баз данных, используемых для кэширования, хранения сессий, реализации очередей и других задач, требующих высокой скорости доступа к данным. При работе с Redis важно понимать, как устроена его архитектура хранения, особенно когда речь идёт о количестве доступных баз данных. Многие разработчики сталкиваются с вопросом: сколько баз данных можно использовать в экземпляре Redis и как это проверить? Ответ на этот вопрос напрямую влияет на организацию данных, изоляцию окружений и безопасность приложений.

В Redis по умолчанию доступно 16 логических баз данных (от db0 до db15), что задаётся параметром databases в конфигурации. Определить их количество можно через команду CONFIG GET databases или анализ файла redis.conf. Однако на практике использование нескольких БД в одном инстансе не рекомендуется из-за отсутствия изоляции на уровне безопасности.

Сколько баз данных в Redis: стандартная конфигурация

По умолчанию в Redis настроено 16 логических баз данных, пронумерованных от 0 до 15. Это значение определяется директивой `databases` в конфигурационном файле `redis.conf`. Каждая такая база представляет собой отдельное пространство ключей, где одни и те же имена ключей могут существовать независимо друг от друга. Например, ключ `user:100` может быть в `db0` и `db1`, но они будут считаться разными.
Несмотря на то, что Redis поддерживает переключение между базами с помощью команды `SELECT`, все они работают в рамках одного процесса и используют одну и ту же память. Это означает, что нет жёсткой изоляции по производительности, безопасности или управлению доступом. В отличие от полноценных СУБД, таких как PostgreSQL или MySQL, где каждая база данных может иметь своих пользователей и права, в Redis такой функциональности нет.
Изменение номера текущей базы происходит на уровне соединения клиента. То есть один клиент может работать с `db0`, другой — с `db2`, но они всё равно используют один и тот же инстанс Redis. Это создаёт риски, если не контролировать доступ к серверу.

Полезно знать: Нумерация баз данных начинается с 0. Самая первая база — db0, последняя по умолчанию — db15.

Почему именно 16 баз?

Число 16 выбрано эвристически — достаточно для разделения данных по окружениям (например, dev, staging, production) или по типам данных (кэш, сессии, временные данные), но не настолько велико, чтобы способствовать плохой архитектуре. Разработчики Redis считали, что большее количество баз может ввести пользователей в заблуждение относительно уровня изоляции.

Как проверить доступные базы данных в Redis

Определить, сколько баз данных доступно в текущем инстансе Redis, можно несколькими способами. Наиболее надёжный — через команду `CONFIG GET`.

  1. Подключитесь к Redis через CLI: redis-cli.
  2. Выполните команду: CONFIG GET databases.
  3. Система вернёт ответ в формате:
    1) "databases"
    2) "16"

Если вы используете удалённый сервер, добавьте параметры подключения:

redis-cli -h host -p port -a password CONFIG GET databases

Обратите внимание: в новых версиях Redis (начиная с 6.0) передача пароля в командной строке считается небезопасной. Лучше использовать аутентификацию после подключения:

redis-cli -h host -p port
AUTH yourpassword
CONFIG GET databases

Альтернативные методы проверки

  • Через INFO-команду: выполните INFO keyspace. В выводе вы увидите информацию о заполненности каждой базы (например, db0:keys=5,expires=2), но не общее количество баз. Однако наличие записей вплоть до db15 косвенно указывает на их доступность.
  • Чтение redis.conf: найдите файл конфигурации (обычно расположен в /etc/redis/redis.conf или /usr/local/etc/redis.conf) и найдите строку databases 16.
  • Через программный код: на Python с использованием библиотеки redis-py:
    import redis
    r = redis.Redis(host='localhost', port=6379, db=0)
    print(r.config_get('databases'))
«Всегда проверяйте конфигурацию через CONFIG GET, а не полагайтесь на значение по умолчанию. В продакшене конфигурация может быть изменена администратором.» — Алексей С., DevOps-инженер, опыт работы с Redis более 8 лет

Как изменить количество баз данных в Redis

Количество баз данных можно изменить, отредактировав параметр `databases` в файле `redis.conf`. Например, чтобы увеличить число до 32:

databases 32

После изменения требуется перезапустить сервер Redis:

sudo systemctl restart redis

Изменение значения возможно только на уровне конфигурации. Через `CONFIG SET` эту настройку изменить нельзя — команда не поддерживается, так как параметр `databases` является статическим и применяется только при старте.

Ограничения и риски при изменении

  • Перезагрузка обязательна: любое изменение требует перезапуска инстанса, что может повлиять на доступность сервисов.
  • Не влияет на изоляцию: даже при 100 базах данные остаются в одной памяти, без разделения прав доступа.
  • Риск переполнения памяти: чем больше баз, тем выше вероятность нецелевого использования памяти под «логические» разделы вместо реальной оптимизации.
Настройка
Можно ли изменить во время работы?
Требует перезагрузки?
Рекомендуемый диапазон
databases
Нет
Да
1–64 (практически до 256)
Полезно знать: Теоретически Redis поддерживает до 256 баз, но использование более 64 не рекомендуется из-за сложности управления и отсутствия реальных преимуществ.

Рекомендации по использованию нескольких баз данных

Хотя Redis позволяет использовать несколько баз, современные практики DevOps и архитектуры микросервисов склоняются к отказу от этой возможности. Вместо этого предлагается использовать отдельные инстансы Redis или кластеры.

  • Используйте базы для логического разделения: например, db0 — основные данные, db1 — кэш, db2 — сессии. Но делайте это только внутри одного приложения и при условии, что доступ к Redis контролируется.
  • Не используйте разные базы для разных пользователей или проектов: это создаёт риск утечки данных, так как любой, кто имеет доступ к инстансу, может переключиться на любую базу командой SELECT.
  • Автоматизируйте выбор базы: в приложении задавайте номер базы через переменную окружения, например REDIS_DB=2, чтобы избежать жёсткой привязки к db0.

Когда стоит использовать одну базу?

  • При работе с кластерным режимом Redis — он поддерживает только одну базу (db0).
  • В микросервисной архитектуре, где каждый сервис имеет свой инстанс Redis.
  • При использовании Redis в качестве кэша через такие инструменты, как Laravel, Django или Spring Boot, которые по умолчанию работают с db0.
«Лучше масштабировать через инстансы, а не через базы. Это даёт настоящую изоляцию, мониторинг и контроль.» — Марина К., архитектор решений, эксперт по in-memory системам

Типичные ошибки и заблуждения

Разработчики часто допускают ошибки, исходя из неверного понимания архитектуры Redis.

Ошибка 1: Считать базы Redis аналогом баз в PostgreSQL

Redis не предоставляет изоляции пользователей, ролей или сетевой безопасности между базами. Любой, кто подключился к серверу, может переключиться на любую базу. Это кардинально отличается от традиционных СУБД.

Ошибка 2: Хранить данные разных клиентов в разных базах

Такой подход кажется логичным, но он небезопасен. Если злоумышленник получит доступ к инстансу, он сможет прочитать данные всех «клиентов». Правильнее использовать префиксы ключей: client1:user:100, client2:user:200.

Ошибка 3: Полагаться на количество баз без проверки конфигурации

Многие предполагают, что всегда 16 баз. Но в Docker-образах, облачных провайдерах (AWS ElastiCache, Google Memorystore) или корпоративных средах это значение может быть изменено. Всегда проверяйте через CONFIG GET databases.

Ошибка 4: Игнорировать переход на кластерный режим

Кластерный режим Redis (cluster mode) отключает поддержку нескольких баз. Если вы планируете масштабирование, лучше сразу проектировать систему на одной базе.

Сценарий
Рекомендуемое решение
Разделение кэша и сессий
Использовать разные префиксы или отдельные инстансы
Многопользовательская система
Префиксы ключей + отдельные Redis-серверы на клиента
Работа в облаке
Проверить ограничения провайдера (например, AWS ElastiCache блокирует CONFIG)

Экспертное мнение

Современная лучшая практика — использовать Redis с одной базой данных и достигать изоляции за счёт архитектуры, а не встроенных возможностей. Префиксы ключей, отдельные инстансы, контейнеризация и управление доступом через сети и аутентификацию обеспечивают гораздо более высокий уровень безопасности и гибкости.
Использование нескольких баз допустимо только в простых сценариях: одно приложение, доверенная среда, отсутствие строгих требований к безопасности. В остальных случаях — избегайте.
При проектировании системы задавайте себе вопрос: «Что произойдёт, если кто-то получит доступ ко всему инстансу?» Если ответ вас пугает — значит, нужно разделять данные физически, а не логически.

Вопросы и ответы

Можно ли удалить базу данных в Redis?
Нет, вы не можете удалить конкретную базу. Вы можете очистить её с помощью команды FLUSHDB (текущая база) или FLUSHALL (все базы). Физическое удаление базы невозможно — они являются частью конфигурации.
Поддерживает ли Redis резервное копирование отдельных баз?
Нет. RDB-файлы содержат данные всех баз. AOF-лог также включает операции по всем базам. Для резервного копирования отдельных наборов данных используйте префиксы и фильтрацию при восстановлении.
Почему в кластерном режиме Redis только одна база?
Кластерный режим разделяет ключи по хеш-слотам между узлами. Поддержка нескольких баз усложнила бы маршрутизацию и синхронизацию. Поэтому разработчики приняли решение ограничиться db0.
Как проверить, какие базы используются?
Выполните INFO keyspace. В выводе будут указаны только те базы, в которых есть данные. Например: db0:keys=10,expires=1, db2:keys=5,expires=0.
Можно ли ограничить пользователя одной базой?
Нет. Redis до версии 6 поддерживал только один пароль на весь инстанс. С появлением ACL (Access Control List) в Redis 6+ можно ограничивать команды, но переключение между базами по-прежнему разрешено по умолчанию. Полностью запретить SELECT можно только через кастомные ACL-правила.

Заключение

Redis предоставляет 16 баз данных по умолчанию, но это значение настраивается в конфигурации. Определить количество доступных баз можно через команду CONFIG GET databases или анализ файла redis.conf. Однако важно понимать, что множественные базы — это логическая, а не физическая изоляция. Они не обеспечивают безопасности, контроля доступа или независимости ресурсов.

Для современных приложений предпочтительнее использовать одну базу данных и достигать разделения данных через префиксы ключей или выделенные инстансы. Это соответствует принципам масштабируемости, безопасности и простоты эксплуатации.
  • По умолчанию Redis имеет 16 баз данных (db0–db15).
  • Количество можно изменить только в redis.conf, с последующей перезагрузкой.
  • Проверка осуществляется через CONFIG GET databases или INFO keyspace.
  • Несмотря на возможность использования нескольких баз, это не обеспечивает изоляции.
  • В кластерном режиме и в облачных средах рекомендуется работать с одной базой.
⚠️ Дисклеймер — нажмите, чтобы развернуть

Материалы, опубликованные в разделе «Блог» на сайте RU DESIGN SHOP (rudesignshop.ru), носят исключительно информационный и ознакомительный характер и не являются руководством к действию, финансовой рекомендацией, медицинской услугой, ветеринарным назначением либо рекламой товаров и услуг, включая азартные игры. Публикации не содержат призывов к участию в азартных играх и не направлены на продвижение соответствующих операторов.

Безопасность применения товаров и веществ: при использовании строительных материалов, бытовой химии, пестицидов и агрохимикатов необходимо строго следовать инструкциям производителя и действующему законодательству Российской Федерации, включая Федеральный закон РФ от 19.07.1997 № 109-ФЗ «О безопасном обращении с пестицидами и агрохимикатами».

Упоминание товарных знаков, брендов и организаций носит исключительно информационный характер и не означает наличие партнёрских отношений или одобрения со стороны правообладателей.

Материалы, содержащие сведения о медицинских, ветеринарных или косметических средствах, представлены в справочных целях и не являются медицинской консультацией или назначением. Перед применением рекомендуется обратиться к врачу, ветеринарному специалисту или иному сертифицированному профессионалу.

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

Правовая ответственность: решения, принятые на основе опубликованной информации, пользователь принимает самостоятельно и на свой риск; редакция и авторы несут ответственность в пределах, установленных законодательством Российской Федерации.

Редакция не допускает публикаций, содержащих пропаганду экстремизма, терроризма, наркотических средств или суицида; подобные материалы подлежат немедленному удалению.

Упоминание организаций с ограниченным статусом: компания Meta Platforms Inc. (социальные сети Facebook и Instagram) признана экстремистской организацией решением суда РФ, её деятельность запрещена на территории Российской Федерации; любые упоминания приводятся исключительно в информационных целях.

Авторские права и источники: информация собирается из открытых источников; её актуальность указывается на дату публикации и может изменяться.

Изображения и иллюстрации используются на условиях, разрешённых правообладателями. При возникновении претензий редакция готова оперативно рассмотреть обращение и внести необходимые изменения.

Персональные данные и cookies: сайт использует cookies и обрабатывает персональные данные пользователей в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» и Политикой конфиденциальности RU DESIGN SHOP.

Мнения авторов могут не совпадать с позицией государственных органов или коммерческих организаций, упомянутых в материалах.