Memcached: What is it and what does it do? (PHP Version)

  • Published on

  • View

  • Download


Memcached has become the de facto standard for caching web applications. But, many users jump in feet first without understanding what it does or perhaps more importantly what it does not do. Once you understand memcached, you may come to realize that it is what it does not do that makes it so good. Memcached is a distributed memory based caching system. But, what does that mean for you? This session willcover the basics of memcached. What are all the components needed? Where is your data cached? What happens when there is a system failure? Is my data stored in more than one place? How do I know what isin my cache? All these questions and more will be answered.


<ul><li> 1. MEMCACHED: WHAT IS IT AND WHAT DOES IT DO? Brian Wednesday, September 30, 2009 </li></ul> <p> 2. @BRIANLMOON Senior Web Engineer for Survived a 2006 Yahoo front page link Founder and lead developer of Phorum Memcached community member Gearmand contributor PHP internals contributor I used PHP/FIWednesday, September 30, 2009 3. WHAT IS MEMCACHED?memcached is a high-performance, distributedmemory object caching system, generic in nature, butintended for use in speeding up dynamic webapplications by alleviating database load. Dumb daemon It is a generic key/data storage system Uses libevent and epoll/kqueue Caches data in memory Cache is distributed by the smart clientsWednesday, September 30, 2009 4. PHP OPTIONS PECL/memcache Mature Standalone More hand holding PECL/memcached Built on libmemcached More of a raw API Has more features Wednesday, September 30, 2009 5. SIMPLE PHP EXAMPLE$MEMCACHE = new Memcache();$MEMCACHE-&gt;addServer(;$MEMCACHE-&gt;addServer(; $mydata = $MEMCACHE-&gt;get(mydata); if($mydata === false){$mydata = generate_mydata();$MEMCACHE-&gt;set(mydata, $mydata,MEMCACHE_COMPRESSED,86400);}echo $mydata;Wednesday, September 30, 2009 6. WHERE IS MY DATA? The client (not server) uses a hashing algorithm todetermine the storage server Data is sent to only one server Servers do not share data Data is not replicated Two hashing algorithms possible: Traditional ConsistentWednesday, September 30, 2009 7. WHERE IS MY DATA? Both hash the key and use the result to choose a server. Traditional hashing uses the forumla: hash % num_servers Resulting number determines the server used. In Consistent hashing, each server is allocated LOTS ofslots and a key is hashed and to a number. The closestslot to that number is the server. Adding/removing servers from the list results in less key reassignment.Wednesday, September 30, 2009 8. WHAT CAN I STORE? Server stores blobs of data up to 1MB PHP extensions will serialize non-scalar data Keys are limited to 250 bytes in length Keys can not contain spaces or high characters. Stickwith letters, numbers, _ and you are pretty safe. PECL/memcache will convert keys for you. PECL/memcached will returns false and an additionalmethod must be used to nd out why the set failed. Wednesday, September 30, 2009 9. DATA SIZE MATTERS Maximum size for one item is 1MB Both clients support compression, neither by default Data is stored in slabs based on size Lots of items of the same size is not optimal Slab size can be customized May not be able to store items when it appears there is free memory Data can be evicted sooner than expected.Wednesday, September 30, 2009 10. EVICTION AND EXPIRATION Expiration time can be expressed as seconds from nowor as an absolute epoch time. Values &gt; 30 days are assumed to be an absolute time Items are not removed from memory when they expire Items are evicted when newer items need to be stored Least Recenty Used (LRU) determines what is evicted Eviction is done per slab Wednesday, September 30, 2009 11. HOW WELL IS IT WORKING? Graph stats from memcached using Cacti/Ganglia, etc. Key stats:STAT cmd_get 4507207 Hits/Misses STAT cmd_set 1098829 STAT get_hits 3221599 Gets/Sets STAT get_misses 1285608 STAT evictions 0 Evictions Cacti Templates:, September 30, 2009 12. HOW DO I SEE THE CACHE? You have no way to see the cached data. You probably dont need to see it. For memcached to tell you, it would freeze your entirecaching system There are debug ways to see. DO NOT COMPILE PRODUCTION WITH DEBUGBECAUSE YOU ARE A CONTROL FREAK!Wednesday, September 30, 2009 13. HOW DO I BACK IT UP? You dont! If you application requires that, you are using it wrong It is a cache, not a data storage system Wednesday, September 30, 2009 14. NAMESPACES &amp; TAGGING There is no concept of namespaces or tagging built into memcached You can simulate them with an extra key storage See the FAQ for an example of simulated namespaces This of course means there is no mass delete inmemcachedWednesday, September 30, 2009 15. ADVANCED TIPS Use multi-gets to increase performance PECL/memcache takes an array of keys to get() PECL/memcached has a separate method Use the binary protocol in PECL/memcached Group keys with a master key Use a cache hierarchy GLOBALS + APC + memcachedWednesday, September 30, 2009 16. REFERENCES Wednesday, September 30, 2009 </p>