gpt4 book ai didi

mysql - 将持久对象委托(delegate)给 Redis,使用 MySQL 回退

转载 作者:IT王子 更新时间:2023-10-29 06:10:18 27 4
gpt4 key购买 nike

我有这个想法,我想让一些了解 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 查询的数量,我希望我可以委托(delegate)给 Redis,我认为它可以更快地检索数据。无论回应如何,我都会对此进行基准测试,但无论如何我都很想听听其他人的意见,更重要的是,这种设置在生产中的高事件网站上会完全失败怎么办。

我承认我不是 MySQL 或 Redis 内部专家,所以我希望得到一些有见地的答案。

谢谢!

更新 Benchmark 的结果是,性能提升似乎可以忽略不计:每 10,000 次查询不到 1 秒:https://gist.github.com/3844026

值得吗?

最佳答案

MySQL 在内存中已经有了它的工作集。当您使用过滤器等进行复杂的选择时,您不会从 Redis 获得任何东西。您只会将 Redis 用于单个对象。

此外,ActiveRecord 已经缓存了现有对象的关联....

这完全不值得。

关于mysql - 将持久对象委托(delegate)给 Redis,使用 MySQL 回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12756888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com