16.2.2.4 Data Expiry

There are two types of data expiry within a
memcached instance. The first type is applied
at the point when you store a new key/value pair into the
memcached instance. If there is not enough
space within a suitable slab to store the value, then an
existing least recently used (LRU) object is removed (evicted)
from the cache to make room for the new item.

The LRU algorithm ensures that the object that is removed is one
that is either no longer in active use or that was used so long
ago that its data is potentially out of date or of little value.
However, in a system where the memory allocated to
memcached is smaller than the number of
regularly used objects required in the cache, a lot of expired
items could be removed from the cache even though they are in
active use. You use the statistics mechanism to get a better
idea of the level of evictions (expired objects). For more
information, see Section 16.2.4, “Getting memcached Statistics”.

You can change this eviction behavior by setting the
-M command-line option when starting
memcached. This option forces an error to be
returned when the memory has been exhausted, instead of
automatically evicting older data.

The second type of expiry system is an explicit mechanism that
you can set when a key/value pair is inserted into the cache, or
when deleting an item from the cache. Using an expiration time
can be a useful way of ensuring that the data in the cache is up
to date and in line with your application needs and
requirements.

A typical scenario for explicitly setting the expiry time might
include caching session data for a user when accessing a Web
site. memcached uses a lazy expiry mechanism
where the explicit expiry time that has been set is compared
with the current time when the object is requested. Only objects
that have not expired are returned.

You can also set the expiry time when explicitly deleting an
object from the cache. In this case, the expiry time is really a
timeout and indicates the period when any attempts to set the
value for a given key are rejected.