如何缓存对象存储多个请求?

时间:2010-03-10 12:14:55

标签: ruby-on-rails caching memoization

我正在使用Ruby on Rails,我需要存储通过连接到另一台服务器获得的搜索结果集。问题是我不想将结果集存储在会话中,我想要一些可以将结果集对象存储在多个请求中的东西。

查询需要时间,所以我不想重复它。有没有办法存储对象或缓存对象,这样我就不必一次又一次地查询它?

可以使用某种对象存储吗?

任何帮助都会很棒。

如果记忆是一个选项,我该如何记忆对象?连接仍然需要时间,以便如何存储结果集。

3 个答案:

答案 0 :(得分:1)

如果您不想将其存储在会话中,显然您可以在此处选择。

您可以暂时存储在您的数据库中(我假设查询数据库比从另一台服务器重新获取更快:))。

还有一个选项可以使用像memcached这样的东西。虽然您必须知道重新启动它会丢弃所有数据。

取决于您需要实现的目标以及处理数据的方式。

答案 1 :(得分:1)

备忘录仅适用于单个请求。不能在多个请求中使用。

所有请求都包含Memcache或BDD等所有存储资源。如果您使用ActiveSupport::Cache::MemCacheStore。您可以在所有请求中推送和获取所有对象。

答案 2 :(得分:1)

如果您需要在请求之间存储数据,那么memoization可能不是您想要的。当您在单个请求中重复调用相同的方法时,通常在Ruby / Rails中使用Memoization,并且该方法很昂贵(CPU密集型,多个DB请求等)。

您可以记住将结果存储在实例变量中的方法,并在下次调用时返回实例变量值,而不是重新评估方法。如果你想进一步研究它,那里有大量的资源。

对于需要跨会话持久化的数据,可能需要在不同用户之间共享,我强烈建议使用memcached。 Rails有一些内置支持,因此挖掘一些好的资源应该不会太难。