memcache and wildcards

GivP picture GivP · Oct 20, 2009 · Viewed 27.3k times · Source

I'm just wondering if there is a way to clear memcache using wildcards for key values.

So say I have a cache with the key "1234~foo" and another "1234~foo~bar".

Is there any way I can say clear the cache by using something like clear("1234*") and have it clear both from above?

I hope that makes sense.

Thanks.

Answer

Eric Petroelje picture Eric Petroelje · Oct 20, 2009

No, there isn't a direct easy way to do this. The FAQ addresses this, and provides a kind of workaround:

Deleting by Namespace

While memcached does not support any type of wildcard deleting or deletion by namespace (since there are not namespaces), there are some tricks that can be used to simulate this. They do require extra trips to the memcached servers however.

Example, in PHP, for using a namespace called foo:

$ns_key = $memcache->get("foo_namespace_key");
// if not set, initialize it
if($ns_key===false) {
    $ns_key=rand(1, 10000);
    $memcache->set("foo_namespace_key", $ns_key);
}
// cleverly use the ns_key
$my_key = "foo_".$ns_key."_12345";
$my_val = $memcache->get($my_key);

//To clear the namespace do:
$memcache->increment("foo_namespace_key");