Sie sind auf Seite 1von 16

MEMCACHED: WHAT IS IT

AND WHAT DOES IT DO?


Brian Moon
dealnews.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?
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.
• 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

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:
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: http://dealnews.com/developers/

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

Das könnte Ihnen auch gefallen