2012-08-17 7 views
44

Czy można w jakiś sposób uruchomić Rails.cache.clear i czyścić tylko klucze o określonej nazwie/ciągu znaków?Rails.cache.clear niektóre kluczowe nazwy?

Nie chcę wyczyścić całej pamięci podręcznej ... tylko klucze z ciągiem blog/post w nazwie (np. blog/post/1, blog/post/2).

Używam memcached do mojej pamięci podręcznej i uruchamiania Rails 3.0.6.

Odpowiedz

10

Aby odpowiedzieć na własne pytanie ... wydaje się, że biorąc pod uwagę, że używam memcached, faktycznie nie mogę używać delete_if lub delete_matched ponieważ memcached nie obsługuje wyliczania lub kwerendy kluczy według wzoru (1).

+9

Co to jest rozwiązanie podczas korzystania z memcache? –

69

ten sposób można napisać do cache -

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

i aby usunąć z pamięci podręcznej można użyć delete działania -

Rails.cache.delete('key') 

Usuwanie wielu kluczy -

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

Dobrze, ale muszę usunąć wszystkie klucze, które zawierają pewien ciąg znaków w nazwie. Na przykład wszystkie klucze, które mają 'blog/post' w nazwie klucza. – Shpigford

+1

@Shpigford 'Rails.cache' jest po prostu' hash' .. przeszukaj dokumentację hashową w celu usunięcia wielu kluczy :) –

+0

@Shpigford zobacz zaktualizowaną odpowiedź :) –

1

Możesz użyć klejnotu https://github.com/Phobos98/dalli-delete-matched, który dodaje prostą implementację metody delete_matched dla sklepu dalli z memcached.

+0

Czy to działa w środowisku z wieloma serwerami? Klejnot wygląda tak, jakby przechował klucze na serwerze pamięci podręcznej bez żadnych osłon, aby zapobiec wielu pisarzom. –

+0

Jak to działa? – Abram