gpt4 book ai didi

ruby-on-rails-3 - 如何在rails中使用多个缓存? (真的)

转载 作者:行者123 更新时间:2023-12-03 20:05:41 25 4
gpt4 key购买 nike

我想使用 2 个缓存——内存中的默认一个和一个 memcache 一个,尽管抽象地说(我认为)哪两个并不重要。

内存中的默认值是我想要加载小且很少更改的数据的地方。到目前为止,我一直在使用内存。我从数据库中保留了一堆“域数据”类型的东西,我还有一些来自外部来源的小数据,我每 15 分钟到 1 小时刷新一次。

我最近添加了 memcache,因为我现在提供一些更大的 Assets 。我如何进入这个有点复杂,但这些更大〜千字节,数量相对较少(数百),并且高度可缓存 - 它们会改变,但每小时刷新一次可能太多了。这个集合可能会增长,但它在所有主机之间共享。刷新很贵。

第一组数据使用默认内存缓存有一段时间了,一直表现良好。 Memcache 非常适合第二组数据。

我已经调整了 memcache,它对第二组数据非常有效。问题是,由于我现有的代码“认为”它是在本地内存中完成的,因此每个请求我都会多次访问 memcache,这增加了我的延迟。

所以,我想使用 2 个缓存。想法?

(注意:memcache 运行在与我的服务器不同的机器上。即使我在本地运行它,我也有一组主机,所以它不会对所有人都是本地的。另外,我想避免需要变得更大即使我可能可以通过增大内存并仅使用内存来解决这个问题(数据真的没那么大),但这并不能解决我扩展的问题,所以它只会踢能够。)

最佳答案

在初始化程序中,您可以输入:

MyMemoryCache = ActiveSupport::Cache::MemoryStore.new

然后你可以像这样使用它:

MyMemoryCache.fetch('my-key', 'my-value')

等等。

请注意,如果它只是为了性能优化(并且取决于时间到期),那么在您的测试环境中禁用它可能不是一个坏主意,如下所示:
if Rails.env.test?
MyMemoryCache = ActiveSupport::Cache::NullStore.new
else
MyMemoryCache = ActiveSupport::Cache::MemoryStore.new
end

Rails 已经通过允许您设置不同的值来提供此功能 config.cache_store在您的环境初始化程序中。

关于ruby-on-rails-3 - 如何在rails中使用多个缓存? (真的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898994/

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