【问题标题】:How to check cache hits/misses with jsonapi-rails如何使用 jsonapi-rails 检查缓存命中/未命中
【发布时间】:2022-02-03 20:38:33
【问题描述】:

目前使用 jsonapi-rails 渲染序列化对象,同时利用一些隔离缓存。

JSON.generate JSONAPI::Rails::SuccessRenderer.new.render(
  all_data,
    {
      include: %w(attr_1 attr_2),
      meta: {
        total: all_data.size
      },
      expose: {
        url_helpers: ::Rails.application.routes.url_helpers,
        language: language,
      },
      cache: SerializedObjectsCache.instance
    },
  controller
)
# SerializedObjectsCache
def self.instance
    @instance ||=
      begin
        cache = ActiveSupport::Cache::RedisCacheStore.new(
          redis: Redis.current,
          compress: COMPRESS,
          namespace: 'serialized_objects',
          expires_in: EXPIRES_IN
        )
        new(cache)
      end
  end

我想弄清楚我们丢失/命中缓存的频率。每个序列化对象都有一个 jsonapi_cache_key 方法来为每个对象返回一个唯一键,但我不确定如何查看缓存命中/未命中率。

【问题讨论】:

    标签: ruby-on-rails ruby json-api jsonapi-rails


    【解决方案1】:

    只是一个建议,我不能 100% 确定我理解你的目标。

    您的代码使用已检测的ActiveSupport::Cache::RedisCacheStore。更准确地说,它会在调用read_multi 时发布cache_read_multi.active_support 通知(渲染器调用的fetch_multi 在后台执行此操作)。通知负载包括hits 数据(相当肮脏的基本示例):

    pry(main)> c = ActiveSupport::Cache::RedisCacheStore.new
    pry(main)> ActiveSupport::Notifications.subscribe("cache_read_multi.active_support") { |_, _, _, _, p| puts p.inspect }
    pry(main)> c.fetch_multi(:foo) { "default foo" }
    "cache_read_multi.active_support"
    ["cache_read_multi.active_support", "2022-02-03T13:34:12.522+01:00", "2022-02-03T13:34:12.531+01:00", "c4372c000b2f8d1dc867", {:key=>[:foo], :namespace=>nil, :compress=>true, :compress_threshold=>1024, :expires_in=>nil, :race_condition_ttl=>nil, :hits=>[:foo], :super_operation=>:fetch_multi}]
    {:key=>[:foo], :namespace=>nil, :compress=>true, :compress_threshold=>1024, :expires_in=>nil, :race_condition_ttl=>nil, :hits=>[:foo], :super_operation=>:fetch_multi}
    => {:foo=>"default foo"}
    

    因此,手头有命中,您应该能够计算未命中/命中率 - 但需要一些额外的样板来汇总特定时期的数据。

    这里最大的问题是添加这种额外的机制来累积命中统计数据可能会扼杀缓存本身的性能提升。

    【讨论】:

    • 甜蜜!我尝试使用它并能够检索命中值,但我尝试做的下一步是使用该信息将其记录到新的遗物中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多