2012-01-13 15 views
8

Tengo una aplicación de rieles, en la que estoy usando caché de rieles simples. Mi prueba es el siguiente:Caché de rieles caduque

Rails.cache.write('temp',Date.today,:expires_in => 60.seconds) 

puedo leerlo a través Rails.cache.read('temp') y Rails.cache.fetch('temp').

El problema es que no caduca. Todavía estará vivo después de 60 segundos. ¿Puede alguien decirme qué falta aquí?

FYI: Yo he declarado en mi development.rb de la siguiente manera:

config.action_controller.perform_caching = true 

config.cache_store = :memory_store 

¿Hay algo que me perdí? Quiero caducar mi caché.

Respuesta

9

Después de una búsqueda, he encontrado una posible razón por la que la caché no se limpia después de 60 segundos.

  1. Llama al Rails.cache.write que está documentado here.
  2. Llama a write_entry(namespaced_key(name, options), entry, options), donde su opción :expires_in es una parte del argumento options.
  3. El implementation of write_entry tiene la siguiente condición:

    if expires_in > 0 && !options[:raw] 
        # Set the memcache expire a few minutes in the future to support race condition ttls on read 
        expires_in += 5.minutes 
    end 
    

Así que hay 5 minutos añadidos a sus 60 segundos. 2 soluciones posibles:

  • simplemente vivir con él :-)
  • tratar de incluir la opción :raw => true, tal vez esto se saltará la condición, por lo que su caducidad funciona como se sospechaba.
+0

Gracias por su repetición .... déjame intentarlo y le hará saber – palani

+0

Sí mliebelt derecha, también es una buena doc carriles de caché se puede encontrar aquí http://guides.rubyonrails.org/caching_with_rails.html –

5

La opción :expires_in solo funciona con tiendas compatibles (por ejemplo, memcached) - no memoria.

De http://guides.rubyonrails.org/caching_with_rails.html:

Por último, si está utilizando memcached o Ehcache, también puede pasar : expires_in. De hecho, todos los parámetros no utilizados por caches_action son enviados a la memoria caché subyacente.

Cuestiones relacionadas