2013-03-12 5 views
5
select * from Foo where id = 200 

特定のidで常に選択呼び出しが行われていることがわかるため、idで検索オブジェクトをキャッシュする方法です。我々は将来的に任意のキャッシュストアを切り替えることができるようにどのように我々は、非目障りな方法でレールでこれを有効にする必要があります(memcachedのか、Redisの言う)idでキャッシュの検索オブジェクトはどのようにするのですか

EDIT:

たベースのキャッシュ戦略org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITEを休止するために多くの類似しましたJava EEのすべてのEntityクラスに適用されます。

+2

キャッシュに対するRailsのアプローチは、Hibernateのアプローチとは少し異なります。どのように動作するかの概要については、http://guides.rubyonrails.org/caching_with_rails.htmlとhttp://broadcastingadam.com/2012/07/advanced_caching_revised/をご覧ください。あなたの質問を理解することは、各リクエストでデータベースからオブジェクトを取得することを避けたいということです。そうですね。いくつかのコードを投稿すると役立つかもしれません。 –

+0

アレックスが言うように、ここでは十分な情報がありません。これは何ですか?それはどこから来たのですか? Hibernateを呼び出すことからget/load?このHibernateはまったくですか?あるいはルビー・オン・レール? –

+0

@AlexGhiculescu私は、同じIDの各リクエストでデータベースからオブジェクトを取得したくありません。 – Joe

答えて

2

したいとあなたの好みに有効期限を設定何てことはでき簡単な使用レールの内蔵キャッシュ

Rails.cache.fetch :cache_id_here, :expires_in => 1.days do 
    Model.find(id) 
end 

変更:cache_id_hereをサポートしている場合、私は知りません。このキャッシングは、memcachedなどの任意の代替キャッシュストアで使用できます。アプリケーションの設定でこれを設定するだけです。

UPDATE

私は鉄道の.findと.SAVE方法とキャッシュ結果を拡張することによってこの問題を解決して宝石に取り組んでいます。これはスーパーベータ版であり、まだプロダクションではテストされていませんが、試してみる場合は、のレポを見て、あなたの考えを教えてください。

Post.find(3)を呼び出すと、自動的に保存キーまたはタッチ時に自動的に更新されるPost 3のキャッシュキーを持つキャッシュバージョンが検索されて作成されます。私が言ったように、それはベータですが、それは問題を解決します。

あなたはおそらく例えば、 config.cache_store = :memory_store linkアレックスGhiculescuはリンクで良い情報を持っていて、あなたの config/application.rbファイル内 config.cache_store=を呼び出すことにより、アプリケーションのデフォルトのキャッシュストアを設定し、この

class Foo < ActiveRecord::Base 

    def self.find_some_foo(foo_id) 
    Rails.cache.fetch("foo_#{foo_id}", expires_in: 7.days) do 
     begin 
     self.where(:id => foo_id) 
     rescue Exception => e 
     logger.info "Exception fetching Foo ID: #{e.to_s}" 
     nil 
     end 
    end 
    end 

end 

のようなものを、欲しいあなたのFooモデルで

+0

宝石はどのようにライトスルーシナリオを処理しますか?また、あなたの宝石はhttps://github.com/orslumen/record-cacheとどう違うのですか? –

+0

@johnkohtはすぐにあなたの宝石を試着します – Joe

1

続き宝石がライトスルーキャッシュ機能を提供します。

record-cache

はRailsの3が積極的に開発をサポートします。今、コミュニティによって維持ツイッターによって建てられ

cache_money

、。それはRailsの3

3

セクション2.1。

cache_storeに存在しないキーを取得しようとすると、レールキャッシュストアが自動的に読み込まれます。このため、キーの命名規則を整えることが重要です。基本を確立したら、適切な変更をconfig/application.rbにすることで、異なるキャッシュストア間を簡単に切り替えることができます。選択の一部はmemory store,file store,memcache、またはキャッシュストアの任意の組み合わせです。

レールメモリ内のキャッシュをフラッシュするには、レールサーバーを再起動します。ファイルキャッシュをフラッシュするには、rake tmp:clearと入力します。memcacheをフラッシュするには、linkを参照してください。まだベータカントーでhttp://api.rubyonrails.org/classes/ActiveRecord/IdentityMap.html

そののため、注意して使用します。

+0

ヒント:#whereは実際のオブジェクトではなくリレーションを返します。 #firstを呼び出す必要があります。 –

0

アイデンティティ・マップは助けることができます。また、関連を追跡しません。

関連する問題