memcached FTW!
Because performance does matter

       BarCamp Brighton 2 - March 16 2008
            Marco van Hylckama V...
memcached
• memcached is used by very large, high
  profile websites such as Livejournal,
  Wikipedia and Facebook
• Genera...
Universal
• memcached can be used with just about
  any programming language
• Runs on almost any box
• Multiple boxes can...
How does it work?

• Store anything that can be serialised
• Store with unique key
• Fetch back with this unique key
• Exp...
Usage pattern
• Store items with key and expire time
• Request item :
 • found? return it!
 • not found? produce item and ...
Limitations
• Can’t dump contents of the cache
• Cache is not persistent
• Not redundant
• No security
• Max 1MB - 42 byte...
What to cache?
• SQL resultsets
• Whole pages
• XSLT Transformation results
• Generated HTML fragments
• Images (thumbnail...
PHP and memcache
• memcached daemon
• PHP memcache PECL extension (not
  installed by default)
• procedural and OO interfa...
running the daemon


• memcached -d -m 1024 -p 11211
Basic usage
// create Memcache object

$objMem = new Memcache;

// Store something

$objMem->set( $key, $value, $compress,...
Memcache singleton
<?php
require_once(quot;constants.phpquot;);

class memSingleton extends Memcache {

     private funct...
SQL Caching function
function cachedSQL($sSQL, $nExpire) {
    try {
        if($aResultSet = memSingleton::getMem()->get(...
STOP!!!




 demo time
Resources

• http://www.danga.com/memcached/
• http://www.php.net/memcache
• http://www.i-marco.nl/weblog/
Upcoming SlideShare
Loading in …5
×

Memcached FTW

5,825 views

Published on

An introduction to dramatically improving your website's performance by using memcached.

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,825
On SlideShare
0
From Embeds
0
Number of Embeds
1,109
Actions
Shares
0
Downloads
120
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

Memcached FTW

  1. memcached FTW! Because performance does matter BarCamp Brighton 2 - March 16 2008 Marco van Hylckama Vlieg marco@i-marco.nl http://www.i-marco.nl/weblog/
  2. memcached • memcached is used by very large, high profile websites such as Livejournal, Wikipedia and Facebook • General purpose, scalable caching solution • Extremely fast • Extremely easy to use
  3. Universal • memcached can be used with just about any programming language • Runs on almost any box • Multiple boxes can be deployed • Can be used with PHP, Python, Perl, Java, C#, Ruby, ...
  4. How does it work? • Store anything that can be serialised • Store with unique key • Fetch back with this unique key • Expire time can be set
  5. Usage pattern • Store items with key and expire time • Request item : • found? return it! • not found? produce item and store in cache • If needed, create own expiration mechanism
  6. Limitations • Can’t dump contents of the cache • Cache is not persistent • Not redundant • No security • Max 1MB - 42 bytes cached object size (can be increased at compile time)
  7. What to cache? • SQL resultsets • Whole pages • XSLT Transformation results • Generated HTML fragments • Images (thumbnails) • Anything ‘expensive’
  8. PHP and memcache • memcached daemon • PHP memcache PECL extension (not installed by default) • procedural and OO interfaces available
  9. running the daemon • memcached -d -m 1024 -p 11211
  10. Basic usage // create Memcache object $objMem = new Memcache; // Store something $objMem->set( $key, $value, $compress, $expire ); // Retrieve something $retrievedItem = $objMem->get( $key ); // Manual expire / delete $objMem->delete( $key, [$timeout] );
  11. Memcache singleton <?php require_once(quot;constants.phpquot;); class memSingleton extends Memcache { private function __construct() {} private function __clone() {} static private $objMem = NULL; public static function getMem() { if (self::$objMem == NULL) { self::$objMem = new Memcache; if(!@self::$objMem->connect(__MEMHOST, __MEMPORT)) { throw new Exception('FAIL! ZOMG! Memcache server not available.'); } } return self::$objMem; } } ?>
  12. SQL Caching function function cachedSQL($sSQL, $nExpire) { try { if($aResultSet = memSingleton::getMem()->get(MD5($sSQL))) { echo '<p>CACHE HIT!</p>'; return $aResultSet; } } catch(Exception $e) {} // manually retrieving uncached item try { $objResultSet = PDOSingleton::getInstance()->query($sSQL); // Store the resultset in the cache $aResultSet = Array(); foreach($objResultSet as $row) { $aResultSet[] = $row; } if(!@memSingleton::getMem()->set(MD5($sSQL), $aResultSet, true, $nExpire)) { echo '<p><strong>CAUTION</strong>: CACHE IS DEAD! Serving uncached data.</p>'; return $aResultSet; } echo '<p>CACHE MISS!</p>'; return $aResultSet; } catch(PDOException $e) { die(quot;TEH DATABASE HAS FAIL. It cried: quot; . $e->getMessage()); } }
  13. STOP!!! demo time
  14. Resources • http://www.danga.com/memcached/ • http://www.php.net/memcache • http://www.i-marco.nl/weblog/

×