Prazos de Expiração

Alguns comandos de armazenamento envolvem o envio de um valor de expiração (relativo a um item ou a uma operação solicitada pelo cliente) para o servidor. Em todos esses casos, o valor real enviado pode ser o tempo Unix (número de segundos desde 1º de janeiro de 1970, como um número inteiro) ou um número de segundos a partir do horário atual. Neste último caso, este número de segundos não pode ultrapassar 60*60*24*30 (número de segundos em 30 dias); se o valor de expiração for maior que isso, o servidor o considerará como um valor de tempo real do Unix, em vez de um deslocamento do horário atual.

Se o valor de validade for 0 (o padrão), o item nunca expira (embora possa ser excluído do servidor para dar lugar a outros itens).

add a note add a note

User Contributed Notes 2 notes

up
4
valugi at gmail dot com
7 years ago
The fact that one sets an expiration time does not mean that the keys will expire at that particular time. I'm not sure what is happening in the background, if there is a process like a garbage collector that expire keys, but some function do not activate the expiration check and return the key as valid, for example `getAllKeys` is not atomic and returns even expired keys.

$memcached = new Memcached();
$memcached->set('key','value',10);
//waiting more than 10 sec
sleep(20);
$data = $memcached->getAllKeys();
var_dump($data); // key will still be listed
$key = $memcached->get('key'); // will trigger the expiration
up
-2
i dot caught dot air at gmail dot com
7 years ago
A TTL of n seconds will expire between n and n-1 seconds as memcache doesn't use a high-resolution clock internally.

This is important to consider if you're working with very short TTLs.

See https://github.com/memcached/memcached/issues/307
To Top