2009-05-09 7 views
14

私たちのアプリでのデータベースの変換がますます時間がかかっているので、私たちはmemcachedを使用してMySQLに渡されるクエリの量を減らしました。Railsでmemcachedを使用するためのベストプラクティス?

すべてでは、正常に動作し、実際には多くの時間が節約されます。

しかし、キャッシュがアプリに多くのジュースを与えることを回避策として、「静かに現れた」として、私たちのモデルの多くは、今、このようなコードが含まれています。これは、充填として、より多くの痛みを取得している

def self.all_cached 

    Rails.cache.fetch('object_name') { 

    find(

     :all, 
     :include => [associations]) 

    } 

end 

キャッシュをフラッシュすることは、アプリケーションのいくつかのクラスで発生します。

ここで、memcachedロジックを抽象化して、必要なすべてのモデルでより強力で使いやすいようにするより良い方法があるのだろうかと思いましたか?

私は、必要なすべてのモジュールに含まれているmemcached-moduleというものを考えていました。

しかし、周りにプレイする前に、私は考えた:のは、専門家に聞いてみよう最初:-)

おかげ

マット

答えて

13

私は既存のプラグインをチェックアウトすることをお勧めします.2つの大きなものはcache_fucache 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 } 

キャッシュマネーと本当に大きな勝利をするときということです:あなたはキャッシュのうちその団体とモデルをロードしたいあなたのユースケースのために私は強くあなたが、ほぼ自動的にそれをしないキャッシュお金を、試すことをお勧めしますデータベースの複製の遅れが問題になる点までスケールアップし、キャッシュを介して書き込むことであなたのお尻が節約されます。これは、レプリケーションの遅延が容易に500のエラーを引き起こし、一般的にあなたが持ちたくない悪夢です。

5

はい、あなたはあなたがそれを必要とするすべてのモデルに含まmemcachedのモジュールを持ちます私は最高の解決策だと思う。あなたの考えは素晴らしいです:)

+1

ありがとうございます。 – Matt

+3

あなたは1つを推薦することができますか?この回答は完全ではないようです –

関連する問題