Memcached: What is it and what does it do? (PHP Version)
-
Upload
brian-moon -
Category
Technology
-
view
15.497 -
download
0
description
Transcript of Memcached: What is it and what does it do? (PHP Version)
MEMCACHED: WHAT IS IT AND WHAT DOES IT DO?
Brian Moondealnews.com
http://brian.moonspot.net/
Wednesday, September 30, 2009
@BRIANLMOON
• Senior Web Engineer for dealnews.com
• Survived a 2006 Yahoo front page link
• Founder and lead developer of Phorum
• Memcached community member
• Gearmand contributor
• PHP internals contributor
• I used PHP/FI
Wednesday, September 30, 2009
WHAT IS MEMCACHED?
• 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 clients
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.
Wednesday, September 30, 2009
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
SIMPLE PHP EXAMPLE$MEMCACHE = new Memcache();$MEMCACHE->addServer(“192.168.0.1”);$MEMCACHE->addServer(“192.168.0.2”);
$mydata = $MEMCACHE->get(“mydata”);
if($mydata === false){ $mydata = generate_mydata(); $MEMCACHE->set(“mydata”, $mydata, MEMCACHE_COMPRESSED, 86400);}echo $mydata;
Wednesday, September 30, 2009
WHERE IS MY DATA?
• The client (not server) uses a hashing algorithm to determine the storage server
• Data is sent to only one server
• Servers do not share data
• Data is not replicated
• Two hashing algorithms possible:
• Traditional
• “Consistent”
Wednesday, September 30, 2009
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 of slots and a key is hashed and to a number. The closest slot to that number is the server.
• Adding/removing servers from the list results in less key reassignment.
Wednesday, September 30, 2009
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. Stick with letters, numbers, _ and you are pretty safe.
• PECL/memcache will convert keys for you.
• PECL/memcached will returns false and an additional method must be used to find out why the set failed.
Wednesday, September 30, 2009
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
EVICTION AND EXPIRATION
• Expiration time can be expressed as seconds from now or as an absolute epoch time.
• Values > 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
HOW WELL IS IT WORKING?
• Graph stats from memcached using Cacti/Ganglia, etc.
• Key stats:
• Hits/Misses
• Gets/Sets
• Evictions
• Cacti Templates: http://dealnews.com/developers/
STAT cmd_get 4507207STAT cmd_set 1098829STAT get_hits 3221599STAT get_misses 1285608STAT evictions 0
Wednesday, September 30, 2009
HOW DO I SEE THE CACHE?
• You have no way to see the cached data.
• You probably don’t need to see it.
• For memcached to tell you, it would freeze your entire caching system
• There are debug ways to see.
• DO NOT COMPILE PRODUCTION WITH DEBUG BECAUSE YOU ARE A CONTROL FREAK!
Wednesday, September 30, 2009
HOW DO I BACK IT UP?
•You don’t!• If you application requires that, you are using it wrong
• It is a cache, not a data storage system
Wednesday, September 30, 2009
NAMESPACES & TAGGING
• There is no concept of namespaces or tagging built in to 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 in memcached
Wednesday, September 30, 2009
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 + memcached
Wednesday, September 30, 2009
REFERENCES
• http://code.google.com/p/memcached/
• http://pecl.php.net/package/memcache
• http://pecl.php.net/package/memcached
• http://brian.moonspot.net/
• http://dealnews.com/developers/
Wednesday, September 30, 2009