tags:

views:

501

answers:

2

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.

+3  A: 

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) $memcache->set("foo_namespace_key", rand(1, 10000));
// 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");
Eric Petroelje
thanks for that.
GivP
This solution is so cool. But why on earth would memcached planners overlook such a (seemingly) integral features as deleting by wildcard? I'm guessing some sort of performance reason. Does anyone know?
mattalexx
A: 

Create a memcache entry for "1234" and within it store an array of the associated keys. On your delete routine read and iterate through those keys to delete.

Paul Vernon