Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Give Your Site A Boost With Memcache
Ben Ramsey
September 25, 2009
Why cache?
             2
To make it faster.
                     3
“A cache is a collection of data duplicating original
values stored elsewhere or computed earlier,
where the original data...
Why cache?
 You want to reduce the number of retrieval
 queries made to the database
 You want to reduce the number of ext...
Caching options
 Flat file caching
 Caching data in the database
 MySQL 4.x query caching
 Shared memory (APC)
 RAM disk
  ...
What is memcached?
 Distributed Memory Object Caching System
 Caching daemon
 Developed by Danga Interactive for
 LiveJour...
Is memcached fast?
 Stored in memory (RAM), not on disk
 Uses non-blocking network I/O (TCP/IP)
 Uses libevent to scale to...
General usage
1.Set up a pool of memcached servers
2.Assign values to keys that are stored in the
  cluster
3.The memcache...
Memcached principles
 Itʼs a non-blocking server
 It is not a database
 It does not provide redundancy
 It doesn't handle ...
Memcached principles
 Data is not replicated across the cluster
 Works great on a small and local-area
 network
 A single ...
Storing data in the pool
 Advantage is in scalability
 To fully see the advantage, use a “pool”
 memcached itself doesn't ...
www 3
   memcached

www 1                          memcached




                                           13


         ...
Deterministic failover
 When one server goes down, the system fails
 over to another server in the pool
 Memcached does no...
www 3
   memcached

www 1                                  memcached



                                  Data inaccessibl...
The memcached protocol API
 Storage commands:
 set, add, replace, append, prepend, cas

 Retrieval command: get, gets
 Del...
$> telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set foobar 0 0 15
This is a test...
Setting it up
 http://danga.com/memcached/
 $> ./configure; make; make install
 $> memcached -d -m 2048 -p 11211

 Done!
 ...
Memcached clients
 Perl, Python, Ruby, Java, C#
 C (libmemcached)
 PostgreSQL (access memcached from procs
 and triggers)
...
pecl/memcache
 The PHP client for connecting to memcached
 and managing a pool of memcached servers
 http://pecl.php.net/p...
21
Features of pecl/memcache
 memcache.allow_failover
 memcache.hash_strategy
 memcache.hash_function
 memcache.protocol
 mem...
pecl/memcache interface
 MemcachePool::connect()
 MemcachePool::addServer()
 MemcachePool::setServerParams()
 MemcachePool...
pecl/memcache interface
 MemcachePool::append()
 MemcachePool::prepend()
 MemcachePool::delete()
 MemcachePool::increment(...
Key hashing
 Keys longer than 250 characters are
 truncated without warning
 Good practice to hash your key (with MD5 or
 ...
Object serialization
 Objects are serialized before being stored to
 memcache:
 get key
 VALUE key 1 59
 O:8:"stdClass":2:...
Redundancy and failover
 memcache.redundancy &
 memcache.session_redundancy
 Implement redundancy at the userland level?
 ...
Extending MemcachePool
 Implement global values vs. page-specific
 values
 Ensure a single instance of the
 MemcachePool ob...
Database techniques
 Create a wrapper for mysql_query() that
 checks the cache first and returns an array of
 database resu...
Database techniques
 For large datasets, run a scheduled query
 once an hour and store it to the cache
 Please note: memca...
Session storage
 As of 2.1.1, you can set the session save
 handler as “memcache” and all will work
 automagically
 sessio...
www 3
    memcached

 www 1                           memcached



                                 Session
              ...
For more information...
http://danga.com/memcached/
http://pecl.php.net/package/memcache
http://pecl.php.net/package/memca...
Thank You
Slides available for download at benramsey.com.
Ben Ramsey
                                                  34
...
Upcoming SlideShare
Loading in …5
×

Give Your Site a Boost with Memcache

6,266 views

Published on

Today's high-traffic websites must implement performance-boosting measures that reduce data processing and reduce load on the database, while increasing the speed of content delivery. One such method is the use of a cache to temporarily store whole pages, database recordsets, large objects, and sessions. While many caching mechanisms exist, memcached provides one of the fastest and easiest-to-use caching servers. This talk will cover memcached and the memcache extension for PHP from setting up a memcached server to using it to provide a variety of caching solutions, including the use of memcached as a session data store.

Published in: Technology
  • Be the first to comment

Give Your Site a Boost with Memcache

  1. 1. Give Your Site A Boost With Memcache Ben Ramsey September 25, 2009
  2. 2. Why cache? 2
  3. 3. To make it faster. 3
  4. 4. “A cache is a collection of data duplicating original values stored elsewhere or computed earlier, where the original data is expensive to fetch (owing to longer access time) or to compute, compared to the cost of reading the cache. In other words, a cache is a temporary storage area where frequently accessed data can be stored for rapid access.” 4 — Wikipedia
  5. 5. Why cache? You want to reduce the number of retrieval queries made to the database You want to reduce the number of external requests (retrieving data from other web services) You want to cut down on filesystem access 5
  6. 6. Caching options Flat file caching Caching data in the database MySQL 4.x query caching Shared memory (APC) RAM disk 6 memcached
  7. 7. What is memcached? Distributed Memory Object Caching System Caching daemon Developed by Danga Interactive for LiveJournal.com Uses RAM for storage Acts as a dictionary of stored data with key/ 7 value pairs
  8. 8. Is memcached fast? Stored in memory (RAM), not on disk Uses non-blocking network I/O (TCP/IP) Uses libevent to scale to any number of open connections Uses its own slab allocator and hash table to ensure virtual memory never gets externally 8 fragmented and allocations are guaranteed O(1)
  9. 9. General usage 1.Set up a pool of memcached servers 2.Assign values to keys that are stored in the cluster 3.The memcache client hashes the key to a particular machine in the cluster 4.Subsequent requests for that key retrieve the 9 value from the memcached server on which it was stored 5.Values time out after the specified TTL
  10. 10. Memcached principles Itʼs a non-blocking server It is not a database It does not provide redundancy It doesn't handle failover It does not provide authentication 10
  11. 11. Memcached principles Data is not replicated across the cluster Works great on a small and local-area network A single value cannot contain more than 1MB of data Keys are strings limited to 250 characters 11
  12. 12. Storing data in the pool Advantage is in scalability To fully see the advantage, use a “pool” memcached itself doesn't know about the pool The pool is created by and managed from the client library 12
  13. 13. www 3 memcached www 1 memcached 13 memcached www 2
  14. 14. Deterministic failover When one server goes down, the system fails over to another server in the pool Memcached does not provide this Some memcache clients provide failover If you canʼt find the data in memcache, eat the look-up cost and retrieve from your data 14 source again, storing it back to the cache
  15. 15. www 3 memcached www 1 memcached Data inaccessible! 15 memcached www 2 Recreate data; Store back to memcache
  16. 16. The memcached protocol API Storage commands: set, add, replace, append, prepend, cas Retrieval command: get, gets Deletion command: delete Increment/decrement: incr, decr 16 Other commands: stats, flush_all, version, verbosity, quit
  17. 17. $> telnet localhost 11211 Trying ::1... Connected to localhost. Escape character is '^]'. set foobar 0 0 15 This is a test. STORED get foobar VALUE foobar 0 15 This is a test. 17 END quit Connection closed by foreign host. $>
  18. 18. Setting it up http://danga.com/memcached/ $> ./configure; make; make install $> memcached -d -m 2048 -p 11211 Done! Windows port of v1.2.4 at 18 http://www.splinedancer.com/memcached-win32/
  19. 19. Memcached clients Perl, Python, Ruby, Java, C# C (libmemcached) PostgreSQL (access memcached from procs and triggers) MySQL (adds memcache_engine storage engine) 19 PHP (pecl/memcache or pecl/memcached)
  20. 20. pecl/memcache The PHP client for connecting to memcached and managing a pool of memcached servers http://pecl.php.net/package/memcache $> pecl install memcache Stable: 2.2.3 Beta: 3.0.1 20
  21. 21. 21
  22. 22. Features of pecl/memcache memcache.allow_failover memcache.hash_strategy memcache.hash_function memcache.protocol memcache.redundancy 22 memcache.session_redundancy
  23. 23. pecl/memcache interface MemcachePool::connect() MemcachePool::addServer() MemcachePool::setServerParams() MemcachePool::get() MemcachePool::add() 23 MemcachePool::set() MemcachePool::replace() MemcachePool::cas()
  24. 24. pecl/memcache interface MemcachePool::append() MemcachePool::prepend() MemcachePool::delete() MemcachePool::increment() MemcachePool::decrement() 24 MemcachePool::setFailureCallback()
  25. 25. Key hashing Keys longer than 250 characters are truncated without warning Good practice to hash your key (with MD5 or SHA) at the userland level to ensure long keys donʼt get truncated Keys are “global” 25 Use something to uniquely identify keys, e.g. a method signature or an SQL statement
  26. 26. Object serialization Objects are serialized before being stored to memcache: get key VALUE key 1 59 O:8:"stdClass":2:{s:3:"foo";s:3:"bar";s: 3:"baz";s:3:"quz";} END Extension unserializes them before returning 26 the object Only objects that can be serialized safely can be stored to memcache, i.e. problems with DOM, SimpleXML, etc.
  27. 27. Redundancy and failover memcache.redundancy & memcache.session_redundancy Implement redundancy at the userland level? Again, memcache is not a database 27
  28. 28. Extending MemcachePool Implement global values vs. page-specific values Ensure a single instance of the MemcachePool object Do complex key hashing, if you so choose Set a default expiration for all your data 28 Add all of your servers upon object instantiation
  29. 29. Database techniques Create a wrapper for mysql_query() that checks the cache first and returns an array of database results Extend PDO to store results to the cache and get them when you execute a statement 29
  30. 30. Database techniques For large datasets, run a scheduled query once an hour and store it to the cache Please note: memcached can store arrays, objects, etc., but it cannot store a resource, which some database functions (e.g. mysql_query()) return 30
  31. 31. Session storage As of 2.1.1, you can set the session save handler as “memcache” and all will work automagically session.save_handler = memcache session.save_path = "tcp:// 192.168.1.10:11211,tcp:// 192.168.1.11:11211,tcp://192.168.1.12:11211" Store sessions to both the database and 31 memcache Write your own session handler that stores to the database and memcache
  32. 32. www 3 memcached www 1 memcached Session inaccessible! 32 Need to memcached recreate the session! www 2
  33. 33. For more information... http://danga.com/memcached/ http://pecl.php.net/package/memcache http://pecl.php.net/package/memcached http://www.socialtext.net/memcached/ 33
  34. 34. Thank You Slides available for download at benramsey.com. Ben Ramsey 34 Senior Software Architect Schematic http://www.schematic.com/

×