Caching Data For Performance
-
Upload
dave-ross -
Category
Technology
-
view
6.351 -
download
2
description
Transcript of Caching Data For Performance
Caching Data For Performance
Dave RossWest Suburban Chicago PHP Meetup
February 7, 2008
Caching
It's faster to get informationfrom somewhere close...
Caching
Than somewherefar away.
It's all about scalability.
(seriously)
Where?
Generally speaking...
Local Database faster than Shared DatabaseLocal Disk faster than Database
RAM faster than Disk
What?
Anything you don't want tofetch or compute
every time your code runs.
Anything that isn't going to changevery often.
Everybody's Doing It!
WP-Cache (Wordpress)
Drupal has it built-in
memcached (LiveJournal, Slashdot, WikiPedia)
Even PHP Itself Is Getting Cached
PHP opcode caches compile your scripts and run these pre-parsed versions instead.
Zend Optimizer APC (Alternative PHP Cache) Xcache eAccelerator ionCube
A Few Things I Cached Recently
Access Control List
Page metadata
Entire CMS pages
Caching On Disk
Make a big array of the data you need.
// At the start of your script$array = unserialize(file_get_contents($fileName));
// If the data isn't already there, put it thereif(array_key_exists('key', $array)){ $value = $array['key'];}else{ // Retrieve or compute $value $value = “Hello, World!”; $array['key'] = $value;}
// At the end of your scriptfile_put_contents($fileName, serialize($array));
Of Course, the OS Caches Files
Modern operating systems use all your free RAM as a disk cache.
If you read the same file over & over, it's probably being read out of RAM the second time on.
So, it's usually ok to read a small file over & over.
memcached
“memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web
applications by alleviating database load.”
memcached
(It's a big array that doesn't go away when your PHP program ends.)
memcached
<?php
$memcache = new Memcache;$memcache->connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();echo "Server's version: ".$version."<br/>\n";
$tmp_object = new stdClass;$tmp_object->str_attr = 'test';$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");echo "Store data in the cache (data will expire in 10 seconds)<br/>\n";
$get_result = $memcache->get('key');echo "Data from the cache:<br/>\n";
var_dump($get_result);
?>
Caveats
Be careful caching anything where security matters.
Don't cache credit card info (PCI compliance)
Keep cache up-to-date (when data changes)
For More Information
Caching In General http://en.wikipedia.org/wiki/Cache
PHP Accelerators/Opcode Caches http://en.wikipedia.org/wiki/PHP_accelerator http://www.zend.com/en/products/guard/optimizer
memcached http://www.danga.com/memcached/