28
A
回答
27
ActiveSupport::Cache::MemoryStore沒有提供直接訪問商店密鑰的方法(其父類ActiveSupport::Cache::Store也不提供)。
內部MemoryStore的保持一切都在一個叫做@data
哈希,但是,這樣您就可以猴子補丁或繼承它拿到鑰匙,例如:
class InspectableMemoryStore < ActiveSupport::Cache::MemoryStore
def keys
@data.keys
end
end
ActionController::Base.cache_store = InspectableMemoryStore.new
Rails.cache.keys # => [ "foo", ... ]
這都與通常的警告,但是: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
這是一個非常幼稚的實現,當然保持鍵在一個額外的結構佔用一些記憶,但你得到的主旨。
1
如果您不需要動態訪問密鑰,更簡單的方法是找到緩存存儲的目錄。爲每個條目創建一個文件。
在此我的情況是,在「APP_ROOT的/ tmp /緩存」,但是你可以很容易地將軌道控制檯,輸入找到它
1.8.7 :030 > Rails.cache.clear
=> ["path_to_rails_app/tmp/cache/6D5"]
+5
但是你的解決方案只在文件緩存中起作用。如果我使用memcached作爲後端緩存,這是行不通的。 – qichunren 2013-04-07 08:07:42
53
相關問題
- 1. Ruby on Rails - 類緩存?
- 2. Android的密鑰存儲提供商 - 如何存儲密鑰
- 3. Ruby on Rails中的文件存儲庫
- 4. Ruby on Rails的 - 從緩存DIV
- 5. 存儲密鑰
- 6. 解密存儲Java密鑰存儲
- 7. Ruby on Rails的會話存儲問題
- 8. Ruby on Rails的 - 存儲PARAMS數據庫
- 9. 如何同時使用Memcache和Ruby On Rails默認的內存存儲?
- 10. 在Android上存儲密鑰
- 11. 保存Ruby on Rails
- 12. 用Ruby on Rails緩存登錄表單
- 13. Ruby on Rails計數器緩存錯誤
- 14. Ruby on Rails的內存泄漏
- 15. SSL中使用的信任存儲和密鑰存儲如何?
- 16. 如何創建第二個Rails內存存儲緩存?
- 17. ECDSA密鑰存儲
- 18. 如何保存在Ruby on Rails的
- 19. 存儲AES密鑰
- 20. 如何存儲和比較:ActiveRecord中的符號(Ruby on Rails)
- 21. Maven Jarsigning使用密鑰存儲區
- 22. Rails的:如何緩存陣列中的
- 23. ruby on rails AWS-S3存儲桶中的列表文件
- 24. 上傳私鑰到rundeck密鑰存儲
- 25. Ruby on Rails與存儲庫模式?
- 26. Ruby on Rails:存儲採摘結果
- 27. Ruby on rails存儲用戶信息
- 28. 使用Ruby On Rails存儲文檔
- 29. rails碎片緩存存儲
- 30. 將全局散列存儲在Ruby on Rails上
我只是想確認鍵的名稱。這將做的伎倆,非常感謝! – Nerian 2012-03-07 18:09:33
什麼是我設置'ActionController :: Base.cache_store = InspectableMemoryStore.new'的文件? – Paul 2014-10-27 13:27:44
@Paul在您的環境文件中,例如'配置/環境/ development.rb'。如果它在'Rails.application.configure do ... end'塊內,那麼它就是'config.cache_store = InspectableMemoryStore.new'。 – jwadsack 2016-01-10 21:06:21