我有这个想法,我想由一些了解 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,我相信 Redis 可以更快地检索数据。不管反应如何,我都会对此进行基准测试,但无论如何我很想听听其他人的意见,更重要的是,如果这个设置在生产中的高活跃度网站上完全失败,该怎么办。
我承认我不是 MySQL 或 Redis 内部的专家,所以我希望得到一些有见地的答案。
谢谢!
更新Benchmark 的结果是它似乎是一个微不足道的性能提升:每 10,000 次查询不到 1 秒:https ://gist.github.com/3844026
这值得么?