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.
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. “A cache is a temporary storage area
where frequently accessed data can
be stored for rapid access.”
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
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. Who uses memcached?
• Facebook
• Digg
• Youtube
• Wikipedia
• Us (Moontoast)
• Many others...
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. 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. 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
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. $> 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.
$>
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
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
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. 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. 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
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
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. 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. 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