Top Banner
Caching Data For Performance Dave Ross West Suburban Chicago PHP Meetup February 7, 2008
16

Caching Data For Performance

Jan 13, 2015

Download

Technology

Dave Ross

Information on how PHP developers can implement data caching to improve performance and scalability. Presented at the West Suburban Chicago PHP Meetup on February 7, 2008.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Caching Data For Performance

Caching Data For Performance

Dave RossWest Suburban Chicago PHP Meetup

February 7, 2008

Page 2: Caching Data For Performance

Caching

It's faster to get informationfrom somewhere close...

Page 3: Caching Data For Performance

Caching

Than somewherefar away.

Page 4: Caching Data For Performance

It's all about scalability.

(seriously)

Page 5: Caching Data For Performance

Where?

Generally speaking...

Local Database faster than Shared DatabaseLocal Disk faster than Database

RAM faster than Disk

Page 6: Caching Data For Performance

What?

Anything you don't want tofetch or compute

every time your code runs.

Anything that isn't going to changevery often.

Page 7: Caching Data For Performance

Everybody's Doing It!

WP-Cache (Wordpress)

Drupal has it built-in

memcached (LiveJournal, Slashdot, WikiPedia)

Page 8: Caching Data For Performance

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

Page 9: Caching Data For Performance

A Few Things I Cached Recently

Access Control List

Page metadata

Entire CMS pages

Page 10: Caching Data For Performance

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));

Page 11: Caching Data For Performance

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.

Page 12: Caching Data For Performance

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.”

Page 13: Caching Data For Performance

memcached

(It's a big array that doesn't go away when your PHP program ends.)

Page 14: Caching Data For Performance

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);

?>

Page 15: Caching Data For Performance

Caveats

Be careful caching anything where security matters.

Don't cache credit card info (PCI compliance)

Keep cache up-to-date (when data changes)

Page 16: Caching Data For Performance

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/