Rails и кеширование, легко ли переключаться между memcache и redis? - PullRequest
26 голосов
/ 19 ноября 2010

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

Ответы [ 3 ]

42 голосов
/ 19 ноября 2010

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

config.cache_store = :memcached_store

до

config.cache_store = :redis_store

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

38 голосов
/ 03 декабря 2010

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

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

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

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

2 голосов
/ 23 сентября 2013

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

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

Это будет сделано в коде ruby ​​в пользовательском фильтре по сравнению с базовым кешем rails.

...