Один сервер Redis на приложение Rails? - PullRequest
4 голосов
/ 04 октября 2011

На моем сервере установлено приложение rails, которое должно использовать Redis в качестве механизма кэширования.

Должен ли я запускать по одному экземпляру Redis для каждого моего приложения, или Redis поддерживает область видимости?

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

Я, например, НЕ хочу, чтобы это произошло.

Приложение 1
Rails.cache.write("key", "value")

Приложение 2
Rails.cache.read("key") => "value"

Приложение 3
Rails.cache.delete("key")

Приложение 1
Rails.cache.read("key") => nil

Ответы [ 3 ]

5 голосов
/ 06 октября 2011

Я предлагаю запустить сервер для каждого приложения.Каждый дополнительный экземпляр Redis использует только на 1 мегабайт больше памяти, когда он пуст, поэтому накладные расходы невелики, и вполне допустимо запускать десятки серверов в одном экземпляре.Также неиспользуемый сервер Redis будет использовать минимальный объем памяти.

Таким образом, запустив несколько серверов, вы не тратите ресурсы впустую, а вместо этого набираете скорость, поскольку вы используете все свои процессоры или ядра ЦП, учитываячто Redis является однопоточным.

2 голосов
/ 09 октября 2011

Решением было использование redis-store с пространством имен параметр.

Вот мой файл config/production.rb.

# App 1
config.cache_store = :redis_store, {path: "/tmp/redis.sock", db:1, namespace: "app1"}

# App 2
config.cache_store = :redis_store, {path: "/tmp/redis.sock", db:2, namespace: "app2"}
2 голосов
/ 05 октября 2011

Обычный метод для этого - одна из двух вещей:

  • Префикс ваших ключей с каким-то идентификатором типа, например app1:key, app2:key.
  • Используйте отдельные БД для каждого, используя SELECT.По умолчанию соединения начинаются с БД 0. Если вы выполните SELECT 1 для app1, SELECT 2 для app2 и т. Д., Вам гарантировано, что никакое другое приложение не будет засорять эти данные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...