2012-08-17 36 views
44

是否有可能以某種方式運行Rails.cache.clear,並且只能使用某個名稱/字符串清除鍵?Rails.cache.clear某些鍵名?

我不想清除整個緩存......只需鍵入名稱中的字符串blog/post(即,blog/post/1,blog/post/2)。

我使用dalli與memcached爲我的緩存和運行Rails 3.0.6。

回答

10

要回答我自己的問題......看來,鑑於我使用memcached,我實際上不能使用delete_ifdelete_matched,因爲memcached不支持按模式枚舉或查詢密鑰(1)。

+9

那麼,使用memcache時的解決方案是什麼? – 2015-08-03 10:41:57

69

這是你如何寫高速緩存 -

Rails.cache.write('key', 'value', :time_to_idle => 60.seconds, :timeToLive => 600.seconds) 

,爲了從緩存中刪除,你可以使用delete行動 -

Rails.cache.delete('key') 

刪除多個鍵 -

Rails.cache.delete_if {|k, v| k =~ 'key' } 
+0

沒錯,但我需要刪除其名稱中包含某個字符串的所有鍵。例如,鑰匙名稱中包含'blog/post'的所有鑰匙。 – Shpigford 2012-08-17 13:22:53

+1

@Shpigford'Rails.cache'只是一個'哈希'..查看哈希文檔以刪除多個鍵:) – 2012-08-17 14:32:45

+0

@Shpigford查看更新的答案:) – 2012-08-17 14:34:58

1

您可以使用https://github.com/Phobos98/dalli-delete-matched gem,它爲memcached的dalli存儲添加了一個簡單的delete_matched方法實現。

+0

這是否適用於多服務器環境?寶石看起來像它存儲在緩存服務器上的密鑰沒有任何警衛,以防止多個作家 – 2017-03-23 19:52:02

+0

這是如何工作的? – Abram 2017-05-25 16:40:16