2010-05-26 18 views

Respuesta

12
def _get_memcache_timeout(self, timeout): 
    """ 
    Memcached deals with long (> 30 days) timeouts in a special 
    way. Call this function to obtain a safe value for your timeout. 
    """ 
    timeout = timeout or self.default_timeout 
    if timeout > 2592000: # 60*60*24*30, 30 days 
     # See http://code.google.com/p/memcached/wiki/FAQ 
     # "You can set expire times up to 30 days in the future. After that 
     # memcached interprets it as a date, and will expire the item after 
     # said date. This is a simple (but obscure) mechanic." 
     # 
     # This means that we have to switch to absolute timestamps. 
     timeout += int(time.time()) 
    return timeout 

Y desde el FAQ:

¿Cuáles son los límites de ajuste de tiempo de expiración? (¿por qué hay un límite de 30 días?)

Puede establecer tiempos de caducidad de hasta 30 días en el futuro. Después de eso, Memcached lo interpreta como una fecha y caducará después de dicha fecha. Esta es una mecánica simple (pero oscura).

-6

Otra técnica simple es escribir el HTML generado en un archivo en el disco y usarlo como su caché. No es difícil de implementar, y funciona bastante bien como un caché basado en archivos que NUNCA caduca, es bastante transparente, etc.

No es la forma django, pero funciona bien.

+0

-1 La pregunta fue sobre Memcache, de esta manera será mucho más lento. –

+0

¡Qué dijo Viktor! – Autobyte

+1

Depende. Más lento que qué? Si está generando una página muy complicada, puede ser más rápido que regenerarla desde cero y, sin embargo, ser lo suficientemente rápida. Si está generando una página simple, esto es más lento que servirlo desde Memcache. – mlissner

9

De the docs:

Las fechas de caducidad se puede ajustar desde 0, que significa "nunca vencen", a 30 días. Cualquier tiempo superior a 30 días se interpreta como una marca de tiempo Unix fecha

Por lo tanto, para establecer una clave para que no caduque nunca, establece el tiempo de espera a 0.

+2

¿Este error es relevante? https://code.djangoproject.com/ticket/9595 – Alex

5

Soporte para memoria caché has been added in Django 1.6 que no caduca estableciendo timeout=None

+0

'Django 1.6.2',' Memcached 1.4.17'. Estaba usando 'timeout = 0' y era lo mismo que si no almacenara en caché. 'timeout = None' es el camino a seguir para el caché que no expira. – Neara

Cuestiones relacionadas