小智 88
Rails.cache.instance_variable_get(:@data).keys
Run Code Online (Sandbox Code Playgroud)
Jor*_*ing 32
ActiveSupport :: Cache :: MemoryStore没有提供直接访问商店密钥的方法(它的父类ActiveSupport :: Cache :: Store也没有).
在内部,MemoryStore会将所有内容保存在一个Hash @data中,因此,您可以对其进行修补或子类化以获取密钥,例如:
class InspectableMemoryStore < ActiveSupport::Cache::MemoryStore
def keys
@data.keys
end
end
ActionController::Base.cache_store = InspectableMemoryStore.new
Rails.cache.keys # => [ "foo", ... ]
Run Code Online (Sandbox Code Playgroud)
然而,这通常需要注意:MemoryStore的内部实现可能随时发生变化,@data可能会消失或被更改为不会发生变化的内容respond_to? :keys.更智能的实现可能是覆盖write和delete方法(因为,作为公共API的一部分,它们不太可能意外地改变)来保留自己的密钥列表,例如:
class InspectableMemoryStore < ActiveSupport::Cache::MemoryStore
def write *args
super
@inspectable_keys[ args[0] ] = true
end
def delete *args
super
@inspectable_keys.delete args[0]
end
def keys
@inspectable_keys.keys
end
end
Run Code Online (Sandbox Code Playgroud)
这是一个非常天真的实现,当然将密钥保存在一个额外的结构中占用了一些内存,但你得到了要点.
| 归档时间: |
|
| 查看次数: |
29485 次 |
| 最近记录: |