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

21,637 views 16 slides Sep 30, 2009
Slide 1
Slide 1 of 16
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16

About This Presentation

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....


Slide Content

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?
•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 4507207
STAT cmd_set 1098829
STAT get_hits 3221599
STAT get_misses 1285608
STAT 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