2014-01-09 2 views
1

Просто после некоторого совета о том, как я могу кэшировать представление jbuilder и запрос activerecord. То, как я делаю это в настоящее время, не кажется правильным, поскольку я в основном храню две вещи в кеше. Могу ли я это как-то совместить? Мне нужно кэшировать запись SQL, чтобы база данных не попадала, а также файл представления, чтобы максимизировать скорость.Rails jbuilder caching + query

# Controller 
@posts = Rails.cache.fetch ["posts"], :expires_in => 1.hour do 
    Post.all.limit(10).order("id desc").to_a 
end 

и

# Jbuilder view 
json.cache! ["posts"], :expires_in => 1.hour do |json| 
    json.array! @posts do |post| 
     json.id post.id 
     json.title post.title 
    end 
end 

ответ

1

Я думаю, что вы overthinking это, если что ActiveRecord запрос не очень медленно. Механизм кэширования действительно умный и будет тянуть ваши объекты, чтобы проверить updated_at. Если обновлено, создайте ответ json. Если нет, используйте ранее построенные. Часто это может занять 2сек работы до 10 мс, или в любое время, когда ваш первоначальный запрос db.

Однако, если вы настаиваете, этот ответ показывает путь. https://stackoverflow.com/a/23783119/252799 Обратите внимание, что вызов activerecord находится в блоке кэша, поэтому он будет выполнен только в случае промаха в кеше.