Memcached FTW

5,620 views
5,478 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,620
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
119
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/

×