Add a method the memcached_object that lets it cache query results
This commit is contained in:
parent
e2869fcf0a
commit
8c79646e53
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user