Novi MySQLnd Query Cache Plugin for PHP ne menja API PHP funkcija ali dodaje klijentsko keširanje MySQL upita. MySQL od izdanja 4.0.1 ima serversko keširanje rezultata. To grubo znači da će MySQL optimizer da prepozna iste SELECT upite i, ako u međuvremenu nije bilo izmena poslati keširani odgovor bez ponovnog izvršavanja upita. Međutim zahtev i podaci i dalje putuju do MySQL servera i nazad.
Klijentsko keširanje do sada je uglavnom imalo sledeći obrazac koristeći memcached server i PECL/memcache klijent:
...
$sql = 'SELECT * FROM ... LEFT JOIN ... LEFT JOIN ... WHERE ...';
$key = md5('mysql_'.$sql);
if(!$large_result = $memcache->get($key)) {
// nije keširano ili je keš istekao
$r = $mysqli->query($sql);
$large_result = $r->fetch_all();
$r->free();
// keširaj 60 sekundi
$memcache->set($key, $large_result, MEMCACHE_COMPRESSED, 60);
}
Mysqlnd qc dodatak spušta ovaj kod nivo ispod svih mysqli poziva. Komentar - savet ⁄*qc=on*⁄ u upitu kaže dodatku da kešira ovaj upit
$large_result = $r->fetch_all();
$r->free();

Za samo smeštanje podataka dodatak može da koristi memoriju procesa, memcached, APC,... a moguće je i napisati novi handler koji određuje prostor i strategiju. Taman dok se malo ne stabilizuje razvoj, biće zanimljivo isprobati ovo u narednom projektu.
prezentacije, legalno bez troškova licenciranja