【问题标题】:How to cache objects store them for multiple requests?如何缓存对象为多个请求存储它们?
【发布时间】:2011-01-25 21:08:25
【问题描述】:

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

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

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

任何帮助都会很棒。

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

【问题讨论】:

    标签: ruby-on-rails caching memoization


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2021-10-13
          • 1970-01-01
          • 1970-01-01
          • 2020-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-08
          相关资源
          最近更新 更多