是否可以指定具有片段缓存的缓存或确定特定调用的缓存命中/未命中率

is it possible to specify a cache with fragment caching or determine cache hit / miss ratio for a specific call

我们有一个 Rails 4.2 应用程序,目前正在多个应用程序之间使用共享缓存。我们的 memcached 未命中率非常高(例如 85% 的命中率和 15% 的未命中率),但由于多个应用程序共享同一个 memcached 实例这一事实使情况变得复杂。因此,我们可能会发现几个关键缓存进程的未命中率很高(我们的 DataDog 数据会支持这一点)。

是否可以在碎片缓存调用中指定缓存存储,例如:

cache(order, OrderCache) do
  # whatever
end 

我认为这可以通过对象缓存来实现,方法如下:

OrderCache =  ActiveSupport::Cache::MemCacheStore.new

是否有其他方法可以解决特定缓存操作的命中/未命中率问题?

也许这是一个复杂的想法,但我认为如果我正确理解您的问题,您可以制作自己的缓存存储包装器来决定使用哪个缓存存储。

调用缓存方法时,它最终会调用控制器 https://apidock.com/rails/AbstractController/Caching/Fragments/read_fragment 上的 read_fragmentwrite_fragment,这些方法会调用 cache_store.readcache_store.write

然后您可以使用自定义 readwrite 方法创建自定义缓存存储 class,根据选项,将读取和写入委托给真正的缓存存储。

class MyCacheStore < ...
  def initialize
    @my_catchall_store = ActiveSupport::Cache::MemCacheStore.new
    @my_order_store = ActiveSupport::Cache::MemCacheStore.new
  end

  def read(key, options)
    case options[:store]
    when :order_store then @my_order_store.read(key, options)
    else
      @my_catchall_store.read(key, options)
    end
  end

  # similar for .write

然后你就可以像...

cache(:order, store: :order_store) do
  # some code
end

cache(:something_else) do
  # some code
end

抱歉,我不确定你问的是不是这个。