2012-08-17 9 views
44

È possibile eseguire in qualche modo Rails.cache.clear e cancellare solo le chiavi con un determinato nome/stringa?Rails.cache.clear alcuni nomi di chiavi?

Non voglio cancellare l'intera cache ... solo chiavi con la stringa blog/post nel nome (ad esempio blog/post/1, blog/post/2).

Sto usando dalli con memcached per la mia cache ed eseguo Rails 3.0.6.

risposta

10

Per rispondere alla mia stessa domanda ... sembra che dato che sto usando memcached, in realtà non posso usare delete_if o delete_matched poiché memcached non supporta l'enumerazione o l'interrogazione di chiavi per modello (1).

+9

Quindi, qual è la soluzione durante l'utilizzo di memcache? –

69

Questo è come si può scrivere alla cache -

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

e al fine di eliminare dalla cache è possibile utilizzare delete azione -

Rails.cache.delete('key') 

Eliminare più chiavi -

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

Giusto, ma ho bisogno di cancellare tutte le chiavi che contengono una certa stringa nel loro nome. Ad esempio, tutte le chiavi che contengono "blog/post" nel nome della chiave. – Shpigford

+1

@Shpigford 'Rails.cache' è solo un' hash' ..look per la documentazione hash per eliminare più chiavi :) –

+0

@Shpigford vedere per la risposta aggiornata :) –

1

È possibile utilizzare la gemma https://github.com/Phobos98/dalli-delete-matched che aggiunge un'implementazione semplice del metodo delete_matched per il negozio dalli con memcached.

+0

Funziona in un ambiente multi-server? La gemma sembra che memorizzi le chiavi sul server cache senza alcuna protezione per impedire più scrittori –

+0

Come funziona? – Abram

Problemi correlati