1

Rails で低レベルのキャッシング (たとえば、memcached を使用) を行い、アプリのどこかで 1 つの呼び出しだけを行いたいとします。

Rails.cache.fetch('books', expires_in: 1.day) do
  Book.offset(offset)
      .limit(limit)
      .select('title, author, number_of_pages')
      .all
end

...アプリの起動時にキャッシュをウォームアップして、次のような単純な呼び出しを使用できるようにします...

Rails.cache.read('books')

...アプリ全体 (ビュー、コントローラー、ヘルパーなど) のどこからでも何度でも、この「本」コレクションにアクセスできます。

それを機能させるには、最初の「フェッチ」呼び出しをどこに配置する必要がありますか?

4

2 に答える 2

2

あなたのコメントの後、いくつかのことを明確にしたいと思います。

fetch結果を返す必要がある場合は、常に使用する必要があります。Book簡単にアクセスできるように、内部のクラス メソッドで呼び出しをラップします。

class Book
  def self.cached_books 
    Rails.cache.fetch < ... > 
  end
end

キャッシュを強制的に再作成する別の方法を使用できます。

def self.write_book_cache
     Rails.cache.write < ... > 
   end
end

次に、イニシャライザまたは rake タスクで、次のことを実行できます。

Book.write_book_cache

これは、コードの残りの部分でキャッシュへの簡潔な呼び出しを維持しながら、私にはより保守しやすいようです。

于 2013-05-07T17:42:37.323 に答える
1

私の最初の考えは、それをイニシャライザに入れることです-おそらく、特に目的のためのものです(/config/initializers/init_cache.rbまたは同様のもの)。

アプリの起動時に (initializers フォルダーにあるため) 自動的に実行される必要があります。

于 2013-05-07T17:25:42.873 に答える