Есть ли способ, чтобы одно приложение Rails 3.x использовало два разных хранилища кеша? - PullRequest
4 голосов
/ 01 апреля 2012

В Rails 3.1 я могу указать механизм кэширования в config/environments/*.yml. Теперь, например, установка :file_store является хорошим способом кэширования изображений Dragonfly, но, конечно, все остальное будет также кэшироваться как файлы (действия, фрагменты и т. Д.).

Теперь, есть ли способ заставить одно приложение использовать два разных хранилища кеша - например, все, что делает Dragonfly, хранится в :file_store, а все остальное идет в Memcache?

1 Ответ

2 голосов
/ 17 июня 2012

Одним словом, да.

Rack::Cache разделяет записи кэша на a MetaStore и EntityStore.

Использование памятиНастоятельно рекомендуется использовать реализацию хранилища на основе (кучи или memcached) для MetaStore, в то время как реализация хранилища на основе дисков (файл) часто является удовлетворительной для EntityStore и использует намного меньше памяти.

Ниже предлагаетсяконфигурация memcached через dalli gem .

config.cache_store = :dalli_store
config.action_dispatch.rack_cache = {
  :metastore    => Dalli::Client.new,
  :entitystore  => URI.encode("file:#{Rails.root}/tmp/cache/rack/body"),
  :allow_reload => false
}

Альтернативное хранилище памяти - Redis , которое можно настроить с помощью @ jodosha redis-store .


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

Эта функция предоставляется *1034* каскадным хранилищем * jj , которое является еще одним кеш-хранилищем пользовательских рельсов .Пример Rails:

config.cache_store = [:cascade_store, :stores => [
  [:memory_store, :size => 5.megabytes, :expires_in => 15.minutes],
  [:mem_cache_store, 'localhost:11211'],
]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...