Rails и кеширование, легко ли переключаться между memcache и redis?

Есть ли общий api такой, что если я переключаюсь между Redis или Memcached, мне не нужно менять свой код, просто настройку конфигурации?

Ответ 1

Пока вы не инициализируете клиента Memcached самостоятельно, но полагаетесь на общий API Rails.cache, переход с Memcached на Redis - это вопрос установки redis-store и изменение конфигурации из

config.cache_store = :memcached_store

к

config.cache_store = :redis_store

Подробнее информация о Rails.cache.

Ответ 2

Я ненавижу общаться с вашими целями, но я бы посоветовал не использовать redis для memcached для общего кэширования рельсов.

Я использую redis и многократно resque в большом приложении rails, и я подумал, что было бы неплохо объединить кэширование, raw redis и resque в один. Я столкнулся с несколькими серьезными проблемами:

  • Прежде всего, это было медленнее. Это могло быть полностью моим конкретным использованием, библиотекой redis-store или самой redis. Я не собираюсь ничего плохого делать, и ваш пробег может отличаться, но он сосать, чтобы свалить много времени, переходя к redis, когда memcached "просто работает".
  • Memcached хорош, потому что очень легко добавлять серверы и использовать согласованное хеширование для достижения ваших целей. У Redis тоже есть это, но по моему опыту было трудно одновременно рассматривать redis как монолитное хранилище данных в некоторых частях моего приложения, так и в других частях рассматривают его как распределенные, последовательно хэшированные капли кэширования.

Удачи вам в вашем проекте. Я обожаю redis AND memcached и использую их во всех моих проектах, но я позволяю ему делать это как сервер структуры данных kick-ass и позволять другому удалять задницу при кешировании.

Ответ 3

Чистые части Redis включают кеширование "на основе списка" вещей - нажатие/высказывание вещей из этого списка, как они происходят в вашем приложении.

Вместо де-сериализации большого значения из memcached, редактирования, а затем повторного сериализации.

Это будет сделано в рубиновом коде в пользовательском фильтре, а также в базовом кэше.