Your SlideShare is downloading. ×
0
Caching with
Memcached & APC
                Ben Ramsey
        TEK·X • May 21, 2010
Hi, I’m Ben.
benramsey.com
@ramsey
joind.in/1599
What is a cache?
“A cache is a collection of data
duplicating original values stored
elsewhere or computed earlier, where
the original data...
“A cache is a temporary storage area
where frequently accessed data can
be stored for rapid access.”
Why use a cache?
• To reduce the number or retrieval queries
  made to a database
• To reduce the number of requests made
  to external ser...
Types of caches
• File system
• Database
• Shared memory
• RAM disk
• Object cache (memcached and APC)
• Opcode cache (APC)
Memcached
What is memcached?

   • Distributed memory object caching
   • Acts as a simple key/value dictionary
   • Runs as a daemo...
Who uses memcached?


   • Facebook
   • Digg
   • Youtube
   • Wikipedia
   • Us (Moontoast)
   • Many others...
Memcached principles



   • Fast asynchronous network I/O
   • Not a persistent data store
   • It does not provide redun...
Memcached principles


   • Daemons are not aware of each other
   • It does not provide authentication
   • Works great o...
Basic concepts and usage

   1. Set up a pool of memcached servers
   2. Assign values to keys that are stored in
      th...
memcached


www

                      www

              memcached




memcached

        www
memcached


www

                      www

              memcached




memcached

        www
A very simple protocol


   • Storage commands:
     set, add, replace, append, prepend, cas

   • Retrieval command: get,...
$> telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set foobar 0 0 15
This is a test...
Let’s see that with
some code.
$memcache = new Memcached();
$memcache->addServers(array(
    array('10.35.24.1', '11211'),
    array('10.35.24.2', '11211...
$book = $memcache->get('0764596349');

if ($book === false)
{
  if ($memcache->getResultCode()
      == Memcached::RES_NOT...
Memcached limits



   • Key size has a 250 byte limit
   • Value can not be larger than 1 MB
   • Memory limits for 32bit...
pecl/memcached
pecl/memcached basics



   • PHP extension based on the
     libmemcached C client library
   • Andrei Zmievski authored ...
Settings and configuration



   • Memcached::OPT_COMPRESSION
   • Memcached::OPT_DISTRIBUTION
   • Memcached::OPT_LIBKETA...
Memcached methods

   •   add()             •   getResultMessage()

   •   addServer()       •   getServerList()

   •   a...
Alternative PHP
Cache (APC)
apc


www

                    www

              apc




  apc

        www
What is APC?

   • Opcode cache
   • Provides object caching (also referred to
     in places as “APC user variables”)
   ...
Basic concepts and usage


   • For opcode caching, just install the
     extension and turn it on: apc.enabled=1
   • For...
Settings and configuration

   •   apc.shm_size – Determines how much
       memory is allocated to APC
   •   apc.stat – ...
How does opcode
caching work?
example.com/                          index.php




                public/index.php
                library/Zend/Applicat...
example.com/                          index.php




                public/index.php
                library/Zend/Applicat...
/welcome



           Magic!
                    language    key    translation
                      en       HELLO     ...
Even better:
store the array to
APC with apc_store()!
APC object storage
if (($book = apc_fetch('0764596349')) === false)
{
  $book = Book::getByIsbn('0764596349');
  apc_store($book->getCacheKey...
APC functions

 •   apc_cache_info()         •   apc_load_constants()

 •   apc_clear_cache()        •   apc_add()

 •   a...
Advanced APC



   • apc_compile_file()
   • apc_bin_dump()
   • apc_bin_load()
   • apc_bin_dumpfile()
   • apc_bin_loadf...
Memcached
vs. APC
When should you use memcached?




   • When requests aren’t guaranteed to
     always go to the same machine
   • Data is...
When should you use APC?


   • Application settings
   • Configuration
   • Data that is the same for each user
   • Requ...
Why not use both?



   • Create a caching adapter for a uniform
     caching interface and decide where to
     store at ...
Questions?
Thank you!
Ben Ramsey
benramsey.com
@ramsey
joind.in/1599
Upcoming SlideShare
Loading in...5
×

Caching with Memcached and APC

22,093

Published on

Today's high-traffic web sites 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. Coupling memcached with the alternative PHP cache (APC) can greatly improve performance by reducing data processing time. In this talk, Ben Ramsey covers memcached and the pecl/memcached and pecl/apc extensions for PHP, exploring caching strategies, a variety of configuration options to fine-tune your caching solution, and discusses when it may be appropriate to use memcached vs. APC to cache objects or data.

Published in: Technology
3 Comments
27 Likes
Statistics
Notes
No Downloads
Views
Total Views
22,093
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
471
Comments
3
Likes
27
Embeds 0
No embeds

No notes for slide

Transcript of "Caching with Memcached and APC"

  1. 1. Caching with Memcached & APC Ben Ramsey TEK·X • May 21, 2010
  2. 2. Hi, I’m Ben. benramsey.com @ramsey joind.in/1599
  3. 3. What is a cache?
  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.” –Wikipedia
  5. 5. “A cache is a temporary storage area where frequently accessed data can be stored for rapid access.”
  6. 6. Why use a cache?
  7. 7. • To reduce the number or retrieval queries made to a database • To reduce the number of requests made to external services • To reduce the time spent computing data • To reduce filesystem access
  8. 8. Types of caches
  9. 9. • File system • Database • Shared memory • RAM disk • Object cache (memcached and APC) • Opcode cache (APC)
  10. 10. Memcached
  11. 11. What is memcached? • Distributed memory object caching • Acts as a simple key/value dictionary • Runs as a daemon • Has a simple protocol for client access over TCP and UDP • Can be run in a pool, but individual daemons are not aware of the pool • Clients/applications manage the pool • Not an opcode cache
  12. 12. Who uses memcached? • Facebook • Digg • Youtube • Wikipedia • Us (Moontoast) • Many others...
  13. 13. Memcached principles • Fast asynchronous network I/O • Not a persistent data store • It does not provide redundancy • Data is not replicated across the cluster • It doesn’t handle failover
  14. 14. Memcached principles • Daemons are not aware of each other • It does not provide authentication • 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
  15. 15. Basic concepts and usage 1. Set up a pool of memcached servers 2. Assign values to keys that are stored in the cluster 3. The 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
  16. 16. memcached www www memcached memcached www
  17. 17. memcached www www memcached memcached www
  18. 18. A very simple protocol • 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
  19. 19. $> 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. $>
  20. 20. Let’s see that with some code.
  21. 21. $memcache = new Memcached(); $memcache->addServers(array( array('10.35.24.1', '11211'), array('10.35.24.2', '11211'), array('10.35.24.3', '11211'), ));
  22. 22. $book = $memcache->get('0764596349'); if ($book === false) { if ($memcache->getResultCode() == Memcached::RES_NOTFOUND) { $book = Book::getByIsbn('0764596349'); $memcache->set($book->getCacheKey(), $book); } }
  23. 23. Memcached limits • Key size has a 250 byte limit • Value can not be larger than 1 MB • Memory limits for 32bit/64bit systems • Replication not built-in; dependent on the client
  24. 24. pecl/memcached
  25. 25. pecl/memcached basics • PHP extension based on the libmemcached C client library • Andrei Zmievski authored the extension • Now at a stable version 1.0.2 • http://php.net/memcached
  26. 26. Settings and configuration • Memcached::OPT_COMPRESSION • Memcached::OPT_DISTRIBUTION • Memcached::OPT_LIBKETAMA_COMPATIBLE • Memcached::OPT_BINARY_PROTOCOL • Memcached::OPT_NO_BLOCK
  27. 27. Memcached methods • add() • getResultMessage() • addServer() • getServerList() • append() • getStats() • cas() • increment() • decrement() • prepend() • delete() • replace() • get() • set() • getMulti() • setMulti() • getResultCode() • ... and more!
  28. 28. Alternative PHP Cache (APC)
  29. 29. apc www www apc apc www
  30. 30. What is APC? • Opcode cache • Provides object caching (also referred to in places as “APC user variables”) • Gives information about file upload progress • Stores to local, shared memory • Not distributed • http://php.net/apc
  31. 31. Basic concepts and usage • For opcode caching, just install the extension and turn it on: apc.enabled=1 • For memory allocation, change apc.shm_size; by default, it’s 30 MB • To speed things up even more, turn off apc.stat (set to 0) • “Set and forget” … but it also does object storage
  32. 32. Settings and configuration • apc.shm_size – Determines how much memory is allocated to APC • apc.stat – Determines whether APC will check if a file has been modified on every request • apc.ttl – Leaving at zero means APC could potentially fill up with stale entries while newer ones won’t be cached; if greater than zero, APC will attempt to remove expired entries
  33. 33. How does opcode caching work?
  34. 34. example.com/ index.php public/index.php library/Zend/Application.php library/Zend/Loader/Autoloader.php library/Zend/Loader.php library/Zend/Config/Ini.php library/Zend/Config.php application/Bootstrap.php library/Zend/Application/Bootstrap/Bootstrap.php APC library/Zend/Application/Bootstrap/BootstrapAbstract.php library/Zend/Application/Bootstrap/Bootstrapper.php library/Zend/Application/Bootstrap/ ResourceBootstrapper.php library/Zend/Application/Module/Autoloader.php library/Zend/Loader/Autoloader/Resource.php library/Zend/Loader/Autoloader/Interface.php library/Zend/Loader/PluginLoader.php ... 48 more files ...
  35. 35. example.com/ index.php public/index.php library/Zend/Application.php library/Zend/Loader/Autoloader.php library/Zend/Loader.php library/Zend/Config/Ini.php library/Zend/Config.php application/Bootstrap.php library/Zend/Application/Bootstrap/Bootstrap.php APC library/Zend/Application/Bootstrap/BootstrapAbstract.php library/Zend/Application/Bootstrap/Bootstrapper.php library/Zend/Application/Bootstrap/ ResourceBootstrapper.php library/Zend/Application/Module/Autoloader.php library/Zend/Loader/Autoloader/Resource.php library/Zend/Loader/Autoloader/Interface.php library/Zend/Loader/PluginLoader.php ... 48 more files ...
  36. 36. /welcome Magic! language key translation en HELLO Hello fr HELLO Bonjour es HELLO Hola en.php de HELLO Hallo nl HELLO Hallo fi HELLO Hei ga HELLO Dia duit pt HELLO Olá ... ... ... ... ... ... ... ... ... background data process base
  37. 37. Even better: store the array to APC with apc_store()!
  38. 38. APC object storage
  39. 39. if (($book = apc_fetch('0764596349')) === false) { $book = Book::getByIsbn('0764596349'); apc_store($book->getCacheKey(), $book); }
  40. 40. APC functions • apc_cache_info() • apc_load_constants() • apc_clear_cache() • apc_add() • apc_sma_info() • apc_inc() • apc_store() • apc_dec() • apc_fetch() • apc_cas() • apc_delete() • apc_bin_dump() • apc_delete_file() • apc_bin_load() • apc_compile_file() • apc_bin_dumpfile() • apc_define_constants() • apc_bin_loadfile()
  41. 41. Advanced APC • apc_compile_file() • apc_bin_dump() • apc_bin_load() • apc_bin_dumpfile() • apc_bin_loadfile()
  42. 42. Memcached vs. APC
  43. 43. When should you use memcached? • When requests aren’t guaranteed to always go to the same machine • Data is specific or targeted to a user • User sessions
  44. 44. When should you use APC? • Application settings • Configuration • Data that is the same for each user • Requests are guaranteed to go to the same machine (i.e. sticky sessions) • File upload progress & sessions (if using sticky sessions)
  45. 45. Why not use both? • Create a caching adapter for a uniform caching interface and decide where to store at the app level or even dynamically at runtime • Use APC for things it’s good at and memcached for things it’s good at
  46. 46. Questions?
  47. 47. Thank you! Ben Ramsey benramsey.com @ramsey joind.in/1599
  1. A particular slide catching your eye?

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

×