How to selectively clear cache (using tags or other option) with Memchached backend and Zend Framework

970 Views Asked by At

We use Memcached and Zend Framework in our web project. Now, we need to clean cache selectively using tags as specified in Zend_Cache API.

Unfortunately, memcached doesn't support tags.

I have found these workarounds:

  • Memcached-tag project. Has anybody tested it? How to implement it with Zend?
  • Use wildchards like in this question, but it seems a bit confusing, less transparent and harder to implement with Zend.
  • Use this implementation or this one, for supporting tags in Memcached, beeing aware of the drawbacks.
  • Any other option?

Thanks in advance

1

There are 1 best solutions below

0
letanthang On

You're right. Memcache don't support tags.

You can use another key-value to implement tag for memcache.

EX :

$this->objCache->save($arrResults, $strKey,array($strMyTag),$intCacheTime) // note : array($strMyTag) don't work for Memcache

MemcacheTag::setTag($strKey, $strMyTag) // our work around

About setTag Method & MemcacheTag:

function setTag($strKey,$strTag){

    $arrKey  = $cacheOjb->get($strTag);

    $arrKey[]= $strKey; 

}

function deleteCacheWithTag($strTag){

    $arrKey  = $cacheOjb->get($strTag);

    foreach ($arrKey as $strKey){

       $objCache->delete($strKey);

    }

}

This work around is quite simple and it works for my projects.

*Note: these codes need some modification, sorry for posting in a hurry