2009-09-13 13 views

Respuesta

41

Puede establecer la caducidad de la clave en una fecha, proporcionando una marca de tiempo Unix en lugar de un número de días. Esta fecha puede durar más de 30 días en el futuro:

Los tiempos de caducidad se especifican en segundos enteros sin signo. Se pueden configurar desde 0, lo que significa "nunca caducar", a 30 días (60 * 60 * 24 * 30). Cualquier tiempo superior a 30 días se interpreta como una fecha de marca de tiempo de Unix. Si desea caducar un objeto el 1 de enero del próximo año, así es como lo hace.

https://github.com/memcached/memcached/wiki/Programming#expiration

Pero, as you say, si está configurando caducidad de la clave para una cantidad de tiempo en lugar de una fecha, el máximo es 2592000 segundos, o 30 días.

+2

OMG, Tuvimos numerosos casos en Rails of: expires_in => 1.month. Cambie a 1.month.from_now para usar una fecha. –

+2

El enlace al que se hace referencia está muerto :( – marcgg

+1

@marcgg: aha sí, bien visto, gracias. Reparado –

15

Si usted no provee de caducidad y la memoria caché se llena entonces los valores clave más antiguas se cumplan primero:

memoria también se recupera cuando es el momento para almacenar un nuevo elemento. Si no hay trozos libres, y no hay páginas libres en la clase de losa apropiada, memcached verá el final de la LRU para que un artículo lo "reclame". Buscará los últimos elementos en la cola de uno que ya ha caducado y, por lo tanto, está libre para su reutilización. Sin embargo, si no puede encontrar un artículo caducado, "desalojará" uno que aún no ha expirado. Esto se indica a continuación en varios contadores estadísticos

https://github.com/memcached/memcached/wiki/UserInternals#when-are-items-evicted

+2

¿está 100% seguro de esto? –

+1

Sí, @DeeJay ', acabo de encontrar este artículo: http://code.google.com/p/memcached/wiki/NewUserInternals – Brett

+2

'La memoria también se recupera cuando es el momento de almacenar un nuevo elemento. Si no hay trozos libres, y no hay páginas libres en la clase de losa apropiada, memcached verá el final de la LRU para que un artículo lo "reclame". Buscará los últimos elementos en la cola de uno que ya ha caducado y, por lo tanto, está libre para su reutilización. Sin embargo, si no puede encontrar un artículo caducado, "desalojará" uno que aún no ha expirado. Esto se observa en varios contadores de estadísticas. – Brett

0

bien, descubrí que el número de segundos que no podrá exceder de 2592000 (30 días). Por lo tanto, el tiempo máximo de caducidad es de 30 días.

+11

No, eso no es cierto. La cantidad de segundos en una * duración * no puede exceder los 30 días. Puede especificar una caducidad de tres meses si lo desea como tiempo absoluto. También puede especificar 0 para no tener una caducidad. – Dustin

+2

También descubrí que si proporciona un tiempo de vencimiento demasiado largo, el valor no se almacena en absoluto. – Datageek

+1

He encontrado que 30 días no funcionan (no escribe el caché) pero 29 días funcionan. – Zubin

9

No, no hay límite. El límite de 30 días es si le das la cantidad de segundos que debería permanecer allí, pero si le das una marca de tiempo, solo existe el valor máximo largo o int en la máquina, que puede ser un límite.

->set('key', 'value', time() + 24*60*60*365) hará que la clave permanezca allí durante un año, por ejemplo, pero sí, si la memoria caché se llena o se reinicia en el medio, este valor se puede eliminar.

0

En laravel config.session.lifetime ajuste que si se define para ser un equivalente de 30 días anterior, se considerará como una marca de tiempo (esto dará un error de token mismatch cada vez suponiendo que se utiliza memcached).

Para responder, la caducidad de memcached se puede establecer en cualquier momento. (La configuración predeterminada de Laravel (en v5.0) lo establecerá en una marca de tiempo ya caducada). Si no lo configuró, se usará el defualt.

0

Parece que algunas respuestas ya no son válidas.

Descubrí que una tecla no se ajusta cuando el TTL es demasiado alto. Por ejemplo 2992553564.

probado con el siguiente código PHP:

var_dump($memcached->set($id, "hello", 2992553564); // true 
var_dump($memcached->get($id));      // empty! 

var_dump($memcached->set($id, "hello", 500); // true 
var_dump($memcached->get($id));    // "hello" 

versión es memcached 1.4.14-0ubuntu9.

Cuestiones relacionadas