Transcript
Page 1: 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

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

@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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Top Related