2012-08-17 20 views
44

¿Es posible ejecutar de alguna manera Rails.cache.clear y solo borrar teclas con un cierto nombre/cadena?Rails.cache.clear ciertos nombres clave?

No quiero borrar todo el caché ... solo las claves con el string blog/post en el nombre (es decir, blog/post/1, blog/post/2).

Estoy usando dalli con memcached para mi caché y ejecutando Rails 3.0.6.

Respuesta

10

Para responder a mi propia pregunta ... parece que dado que estoy usando memcached, en realidad no puedo usar delete_if o delete_matched porque memcached no admite enumerar o consultar claves por patrón (1).

+9

Entonces, ¿cuál es la solución durante el uso de Memcache? –

69

Esto es cómo se puede escribir en la memoria caché -

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

y con el fin de eliminar de la memoria caché puede utilizar delete acción -

Rails.cache.delete('key') 

Eliminar varias teclas -

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

Bien, pero necesito eliminar todas las claves que contienen una cierta cadena en su nombre. Por ejemplo, todas las claves que tienen 'blog/post' en el nombre de la clave. – Shpigford

+1

@Shpigford 'Rails.cache' es solo un' hash' ... busque la documentación hash para eliminar varias claves :) –

+0

@Shpigford ver la respuesta actualizada :) –

1

Puede usar la gema https://github.com/Phobos98/dalli-delete-matched que agrega una implementación simple del método delete_matched para dalli store con memcached.

+0

¿Funciona en un entorno de servidores múltiples? La gema parece que almacena las claves en el servidor de caché sin ningún tipo de protección para evitar múltiples escritores –

+0

¿Cómo funciona esto? – Abram

Cuestiones relacionadas