【问题标题】:how many octets are read from the cache?从缓存中读取了多少个八位字节?
【发布时间】:2012-09-22 17:35:33
【问题描述】:

我正在尝试做一个简单的基准测试来了解从我的 Rails 站点的每个页面的缓存中读取了多少个八位字节。我说的是从 Rails.cache 中检索数据。

我想在页面底部显示123Ko/145Ko 之类的内容。

是否存在执行此任务的 gem,或者 ruby​​ 标准库中是否包含某些内容?

【问题讨论】:

  • 你说的是哪个缓存?有很多!
  • 我说的是 Rails.cache。我更新了问题!
  • @JohnMcKey 您配置使用哪个缓存? (什么是Rails.cache.class?)
  • ActiveSupport::Cache::FileStore。但是(如果可能的话)我更喜欢与每个 ActiveSupport::Cache 一起工作的东西。

标签: ruby-on-rails ruby caching


【解决方案1】:

一种选择是对您正在使用的商店进行子类化,并扩展在ActiveSupport::Cache::Store 中声明的受保护的read_entry 方法,FileStore 和其他缓存自己的子类。

FileStoreWithReadTracking < ActiveSupport::Cache::FileStore
  def start_page
    @octets_read = 0
  end

  def octets_read
    @octets_read
  end

  protected

    def read_entry(key, options)
      entry = super(key, options)
      @octets_read += entry.size if entry
      entry
    end
end

开始页面时,您可以调用start_page 将八位字节计数清零。由于read_entry 是每次缓存尝试执行读取时使用的低级方法,因此您可以拦截任何读取的数据并在返回之前获取其大小。您可能需要将 size 转换为八位字节。

要将其设置为您的自定义缓存存储,请将config.cache_store = FileStoreWithReadTracking.new('/path/to/file/store') 添加到您的环境中。我认为您可以通过这种方式对所有商店进行子类化。

【讨论】:

  • 毕竟这很容易!感谢您为我指出解决方案!
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
相关资源
最近更新 更多