Подтвердить что ты не робот

Базы данных Redis на dev-машине с несколькими проектами

Как вы управляете несколькими проектами на своей машине разработки и/или тестирования, когда в некоторых из этих проектов используются базы данных Redis?

Есть две основные проблемы:

  • Redis не имеет именованных баз данных (только числа 0-16)
  • Тесты, вероятно, будут выполнять FLUSHDB при каждом запуске

Прямо сейчас, я думаю, у нас есть три варианта:

  • Назначение различных баз данных для каждого проекта, каждого разработчика и тестовой среды
  • Префиксные ключи с именем проекта, используя что-то вроде redis-namespace
  • Nuke и загружать базы данных при каждом переключении между проектами

Первый из них проблематичен, если несколько проектов назначают "0" для основного использования и "1" для теста и т.д. Даже если Project B решил перейти на "2" и "3", у другого участника проекта может возникнуть конфликт в других проектах для него. Другими словами, этот подход не является дружественным SCM.

Для второго, это плохая идея просто потому, что она добавляет лишние накладные расходы на производительность и эффективность памяти. И независимо от того, что вы делаете, другой проект, возможно, уже использовал тот же ключ, когда вы присоединились к проекту.

Третий вариант - скорее продукт компромисса, но иногда я хочу, чтобы мои локальные данные были не затронуты, когда я развертываю небольшие патчи для других проектов.

Я знаю, что это может быть запрос функции для Redis, но мне сейчас нужно решение.

Любые идеи, практики?

4b9b3361

Ответ 1

Если проекты независимы и поэтому не нужно обмениваться данными, гораздо лучше использовать несколько экземпляров redis - каждая конфигурация проекта имеет номер порта, а не имя/идентификатор базы данных. Создайте конфигурационный файл с соответствующим именем и startup script для каждого из них, чтобы вы могли получить любой экземпляр, который нужно запустить одним щелчком мыши.

Убедитесь, что вы обновили настройки сохранения в каждом файле конфигурации, а также установили порты. Несколько экземпляров, использующих один и тот же файл dump.rdb, будут работать, но приводят к некоторым довольно запутывающим ошибкам.

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

Ответ 2

Redis удаляется от нескольких баз данных, поэтому я бы рекомендовал вам начать перенос этого механизма раньше, чем позже. Это означает один экземпляр на db. Учитывая очень низкие накладные расходы на запуск Redis, это не проблема с точки зрения ресурсов.

Тем не менее, вы можете указать количество баз данных и обеспечить стандарт присвоения имен. Например, настройте redis, чтобы сказать, 60 DBS, и вы добавите 10 для тестового db. Например, db3 использует db13 для тестирования.

Похоже, что ваши среды разработчика, теста и prod довольно привязаны друг к другу. Если это так, я предлагаю отказаться от этого. Использование отдельных экземпляров - самый простой путь к этому, и обеспечивает защиту от перекрестного загрязнения. Между этим и будущим redis будет один-db на экземпляр, отдельные экземпляры - лучший маршрут.