Give Your Site A Boost
With Memcache


Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
Software Architect
          at Schematic
          Atlanta PHP Leader
          Co-author of Zend
          PHP 5 Certifi...
“A cache is a collection of data duplicating
      original values stored elsewhere or computed
      earlier, where the o...
Why cache?
             You want to reduce the number of
             retrieval queries made to the database
             ...
Caching options
             Flat file caching
             Caching data in the database
             MySQL 4.x query cach...
What is memcached?
             Distributed Memory Object Caching
             System
             Caching daemon
        ...
Is memcached fast?
             Stored in memory (RAM), not on disk
             Uses non-blocking network I/O (TCP/IP)
  ...
General usage
        1. Set up a pool of memcached servers
        2. Assign values to keys that are stored in
          ...
Memcached principles
             It’s a non-blocking server
             It is not a database
             It does not pr...
Memcached principles
             Data is not replicated across the cluster
             Works great on a small and local-...
Storing data in the pool
             Advantage is in scalability
             To fully see the advantage, use a “pool”
  ...
www 3
               memcached
                                                           memcached
       www 1




     ...
Deterministic failover
             Memcached does not provide this
             It is up to you to implement it
         ...
www 3
               memcached
                                                                   memcached
       www 1

...
The memcached protocol API
             Storage commands:
             set, add, replace, append, prepend, cas
           ...
$> telnet localhost 11211
   Trying ::1...
   Connected to localhost.
   Escape character is '^]'.
   set foobar 0 0 15
  ...
Setting it up
             http://danga.com/memcached/
             $> ./configure; make; make install
             $> mem...
Memcached clients
             Perl, Python, Ruby, Java, C#
             C (libmemcached)
             PostgreSQL (access ...
pecl/memcache
             The PHP client for connecting to
             memcached and managing a pool of
             mem...
Give Your Site A Boost With Memcache
Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
Features of pecl/memcache
             memcache.allow_failover
             memcache.hash_strategy
             memcache.h...
Key hashing
             Keys longer than 250 characters are
             truncated without warning
             Good prac...
Object serialization
             Objects are serialized before being stored
             to memcache:
             get ke...
Redundancy and failover
             memcache.redundancy &
             memcache.session_redundancy
             Implement...
Extending MemcachePool
             Implement global values vs. page-
             specific values
             Ensure a s...
Database techniques
             Create a wrapper for mysql_query() that
             checks the cache first and returns a...
Database techniques
             For large datasets, run a scheduled
             query once an hour and store it to the
 ...
Session storage
             As of 2.1.1, you can set the session save
             handler as “memcache” and all will wor...
www 3
               memcached
                                                            memcached
       www 1


      ...
For more information...
             http://danga.com/memcached/
             http://pecl.php.net/package/memcache
       ...
Upcoming SlideShare
Loading in...5
×

Give Your Site A Boost With Memcache

9,674

Published on

Today's high-traffic websites must implement performance-boosting measures that cut down 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
0 Comments
17 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,674
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
326
Comments
0
Likes
17
Embeds 0
No embeds

No notes for slide

Transcript of "Give Your Site A Boost With Memcache"

  1. 1. Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  2. 2. Software Architect at Schematic Atlanta PHP Leader Co-author of Zend PHP 5 Certification Study Guide Chatter on #phpc Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  3. 3. “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.” — Wikipedia Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  4. 4. 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 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  5. 5. Caching options Flat file caching Caching data in the database MySQL 4.x query caching Shared memory (APC) RAM disk memcached Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  6. 6. 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/value pairs Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  7. 7. 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 fragmented and allocations are guaranteed O(1) Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  8. 8. 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 value from the memcached server on which it was stored 5. Values time out after the specified TTL Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  9. 9. 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 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  10. 10. 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 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  11. 11. 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 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  12. 12. www 3 memcached memcached www 1 memcached www 2 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  13. 13. Deterministic failover Memcached does not provide this It is up to you to implement it If you can’t find the data in memcache, eat the look-up cost and retrieve from your data source again, storing it back to the cache Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  14. 14. www 3 memcached memcached www 1 Data inaccessible! memcached www 2 Recreate data; Store back to memcache Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  15. 15. The memcached protocol API Storage commands: set, add, replace, append, prepend, cas Retrieval command: get, gets Deletion command: delete Increment/decrement: incr, decr Other commands: stats, flush_all, version, verbosity, quit Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  16. 16. $> 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. END quit Connection closed by foreign host. $> Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  17. 17. 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 http://www.splinedancer.com/memcached-win32/ Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  18. 18. Memcached clients Perl, Python, Ruby, Java, C# C (libmemcached) PostgreSQL (access memcached from procs and triggers) MySQL (adds memcache_engine storage engine) PHP (pecl/memcache) Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  19. 19. 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 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  20. 20. Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  21. 21. Features of pecl/memcache memcache.allow_failover memcache.hash_strategy memcache.hash_function memcache.protocol memcache.redundancy memcache.session_redundancy Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  22. 22. 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” Use something to uniquely identify keys, e.g. a method signature or an SQL statement Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  23. 23. Object serialization Objects are serialized before being stored to memcache: get key VALUE key 1 59 O:8:quot;stdClassquot;:2:{s:3:quot;fooquot;;s:3:quot;barquot;;s:3:quot;bazquot;;s:3:quot;quzquot;;} END Extension unserializes them before returning the object Only objects that can be serialized safely can be stored to memcache, i.e. problems with DOM, SimpleXML, etc. Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  24. 24. Redundancy and failover memcache.redundancy & memcache.session_redundancy Implement redundancy at the userland level? Again, memcache is not a database Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  25. 25. 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 Add all of your servers upon object instantiation Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  26. 26. 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 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  27. 27. 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 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  28. 28. 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 = quot;tcp://192.168.1.10:11211,tcp:// 192.168.1.11:11211,tcp://192.168.1.12:11211quot; Store sessions to both the database and memcache Write your own session handler that stores to the database and memcache Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  29. 29. www 3 memcached memcached www 1 Session inaccessible! Need to memcached recreate the session! www 2 Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  30. 30. For more information... http://danga.com/memcached/ http://pecl.php.net/package/memcache http://www.socialtext.net/memcached/ My blog: http://benramsey.com/ Give Your Site A Boost With Memcache Ben Ramsey ■ DC PHP Conference ■ 3 June 2008
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×