Рекомендации по использованию memcached в Rails?
поскольку транзакции базы данных в нашем приложении становятся все более и более трудоемкими, мы начали использовать memcached для уменьшения количества запросов, переданных MySQL.
В целом, он отлично работает и действительно экономит много времени.
Но поскольку кеширование "молчаливо появлялось" в качестве обходного пути, чтобы придать приложению больше сока, многие наши модели теперь содержат такой код:
def self.all_cached
Rails.cache.fetch('object_name') {
find(
:all,
:include => [associations])
}
end
Это становится все больнее, поскольку заполнение и очистка кеша происходит в нескольких классах по сравнению с приложением.
Теперь мне было интересно, есть ли лучший способ абстрагировать логику memcached, чтобы сделать ее более мощной и простой в использовании во всех необходимых моделях?
Я думал о наличии какого-то memcached-модуля, который включен во все необходимые модули.
Но прежде чем играть, я подумал: сначала спросите экспертов: -)
Спасибо
Matt
Ответы
Ответ 1
Я бы рекомендовал проверить существующие плагины, два больших - cache_fu и кеш-деньги. Для вашего случая использования, когда вы хотите загрузить модель со своими ассоциациями из кеша, я настоятельно рекомендую вам попробовать Cache Money, что делает это почти автоматически:
def parent < ActiveRecord::Base
has_many children
end
def child < ActiveRecord::Base
index :parent_id
end
#now you can do the following without ever hitting the DB
parents = Parent.find :all
parents.each{ |p| p.children }
Действительно большая победа с Cache Money заключается в том, что когда вы масштабируетесь до того момента, когда отставание в репликации базы данных становится проблемой, пишите через кэширование, чтобы сохранить вашу задницу. Это особенно важно в Rails, где отставание в репликации может легко вызвать 500 ошибок и, как правило, это кошмар, который вы не хотите иметь.
Ответ 2
Да, с модулем memcached, который вы включаете во все модели, которые вам нужны, я считаю лучшим решением. Ваша линия мышления превосходна:)