6

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

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

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

任何帮助都会很棒。

如果记忆是一种选择,我如何记忆对象?连接仍然需要时间,所以如何存储结果集。

4

3 回答 3

1

memoization 仅适用于单个请求。不能在多个请求中使用。

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

于 2010-03-10T13:03:56.990 回答
1

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

可以memoize一个方法,将结果存储在实例变量中,下次调用时,返回实例变量值,而不是重新计算方法。如果您想进一步研究,这里有大量的资源。

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

于 2010-03-10T13:06:23.060 回答
1

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

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

还有一个选项可以使用 memcached 之类的东西。尽管您必须知道重新启动它会丢弃所有数据。

取决于您需要实现什么以及您需要如何处理数据。

于 2010-03-10T12:21:38.607 回答