Add a method the memcached_object that lets it cache query results

This commit is contained in:
Evan Prodromou 2009-01-22 19:13:26 +01:00
parent e2869fcf0a
commit 8c79646e53

View File

@ -201,4 +201,33 @@ class Memcached_DataObject extends DB_DataObject
}
return $search_engine;
}
static function cachedQuery($cls, $qry, $expiry=3600)
{
$c = Memcached_DataObject::memcache();
if (!$c) {
$inst = new $cls();
$inst->query($qry);
return $cls;
}
$key_part = common_keyize($cls).':'.md5($qry);
$ckey = common_cache_key($key_part);
$stored = $c->get($ckey);
if ($stored) {
return new ArrayWrapper($stored);
}
$inst = new $cls();
$result = $inst->query($qry);
if (!$result) {
return $inst;
}
$cached = array();
while ($inst->fetch()) {
$cached[] = clone($inst);
}
$inst->free();
$c->set($ckey, $cached, MEMCACHE_COMPRESSED, $expiry);
return ArrayWrapper($cached);
}
}