如何清除 Ruby 中的内存缓存?

How to clear memory cache in Ruby?

我是 Ruby 的新手。我有一个 rails 应用程序,我将站点配置(如站点名称)保存在数据库中。我已经设置了一个助手,所以我可以调用:site_param 'site_name'。助手将数据存储在一个变量中,这样应用程序就不会在每次调用时都访问数据库,如下所示:

模块 SiteHelper
  class 网站
    def self.get(参数)
      @params = {} 除非@params.kind_of?(哈希)

      如果@params[param].nil?
        new_param = Site.find(参数)
        @参数[参数] = new_param
      结尾

      @参数[参数]
    结尾
  结尾
结尾

现在的问题是,一旦 @params 存储了一个值,它就不会在下一次请求时刷新。来自 php 背景,这种单例在每次请求时都会刷新,所以如果我在数据库上编辑一个值,它会毫无问题地刷新。在 ruby 中,@params 被缓存并保持相同的值,直到我重新启动服务器。有没有一种方法可以仅在请求生命周期内保留 @params 并在下一个生命周期内刷新?

您的代码的问题是您在 class 的上下文中使用实例变量,因此只要进程是 运行。

,它就会持续存在

您需要将#get 转换为实例方法,并重用Site class 的实例。你在Ruby中写的绝对不是一个类似单例的实现。

module SiteHelper
  def site
    @site ||= Site.new
  end

  class Site
    def get(param)
      @params = {} unless @params.kind_of?(Hash)

      if @params[param].nil?
        new_param = Site.find(param)
        @params[param] = new_param
      end

      @params[param]
    end
  end
end

# In the view
site.get("whatever")

您的代码也可以改进为更 ruby 风格。注意 #get 的实现,利用 ||= 和 return 值。

module SiteHelper
  def site
    @site ||= Site.new
  end

  class Site
    def get(param)
      @params ||= {}
      @params[param] ||= Site.find(param)
    end
  end
end