Есть ли общий api такой, что если я переключаюсь между Redis или Memcached, мне не нужно менять свой код, просто настройку конфигурации?
Rails и кеширование, легко ли переключаться между memcache и redis?
Ответ 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, редактирования, а затем повторного сериализации.
Это будет сделано в рубиновом коде в пользовательском фильтре, а также в базовом кэше.