私はこのアイデアを思いついたので、RedisやMySQLに精通している人に実行してもらいたいので、これを検討しても愚かだと言えます。
永続化されたオブジェクトを読み取り用にRedisに保存し、Redisキーが存在しない場合はデータベースデータにフォールバックすると、どのような影響があるのでしょうか。簡潔にするために、これが私が念頭に置いていることの(非常に)簡単な例です:
class ActiveRecord::Base
def self.cache_or_query(id)
Rails.cache.fetch("#{self.name}:#{id}") || begin
record = self.find(id)
Rails.cache.write("#{record.class}:#{record.id}", record)
record
end
end
end
person = Person.create(name: "Tom Hanks", email: "thanks@gmail.com")
Person.cache_or_query(person.id) #=> query database, cache gets written, get Person object
Person.cache_or_query(person.id) #=> query Redis, get Person object
そして、CMSでは、レコードを保存すると、キャッシュが期限切れになるだけです(または、新しいデータで上書きされる可能性があります)。
だから、私の質問は次のとおりです。適切なサーバー条件が与えられた場合、RedisはMySQL(または任意のデータベース)よりも優れたパフォーマンスを発揮できますか?私の目標は、すべてのページで実行されるSQLクエリの数を減らすことです。私の希望は、データの取得がより高速であると信じているRedisに委任できることです。回答に関係なくベンチマークを行いますが、とにかく他の人の意見を聞きたいと思っています。さらに重要なことに、このセットアップは、本番環境のアクティブなWebサイトでは完全に失敗します。
私は確かにMySQLやRedisの内部の専門家ではないので、洞察に満ちた答えを得たいと思っています。
ありがとう!
更新ベンチマークの結果は、パフォーマンスの向上はごくわずかであるように思われることです。10,000クエリあたり1秒未満:https ://gist.github.com/3844026
その価値はありますか?