我希望在我的Rails应用中使用Redis进行低级别的缓存。
在控制器中,我通常使用以下代码来获取所有图书:
class BooksController < ApplicationController
def index
@books = Book.order(:title)
end
end
这个视图对此进行迭代:
<ul>
- @books.each do |book|
<li>= "#{book.title} - #{book.author}"</li>
</ul>
现在我希望得到完全相同的结果,但是要进行缓存。我已经设置并运行了Redis。所以我应该在控制器中使用一个cached_books
方法,像这样:
@books = Book.cached_books.order(:title)
保留视图不变,或在视图中使用book.cached_title
和book.cached_author
,并保留控制器不变?
Book
模型中的cached_books
方法会是什么样子?
class Book < ActiveRecord::Base
...
def cached_books
Rails.cache.fetch([self, "books"]) { books.to_a }
end
end
出于简化的目的,我现在不考虑过期策略,但显然它们是必须存在的。