WHAT TO CACHE?
External resources
Large result sets
Static data
Sessions
FLAT FILE CACHE
Write data out to a local file
Config files from Database or XML
Remote resources store locally
Output buffering to local file
CACHING FILES
PEAR::Cache_Lite
Zend_Cache in Zend Framework
var_export in PHP
RAM DISK
Mount some memory as disk space
Used when IO actions can’t be avoided
Non resizable on the fly
LIGHTTPD + PHP
Lua is a scripting language in lighttpd
Use PHP to write out file to disk
Have Lua look at the modified time of the file, if
within the limit serve else execute PHP
MEMCACHE
Origins within Livejournal
Used by Facebook, Youtube, Wikipedia and digg
Caching daemon, no persistence
Stores key / value pairs
FACEBOOK EXAMPLE
200 dedicated memcache servers
Each 16GB quad-core amd64
3TB memcache data
MEMCACHE
Slab Allocator
Libevent based (non-blocking)
Simple Protocol
Server is just a hash table
No authentication or self awareness
MEMCACHE CLIENT
Clients provide key and value
Responsible for serialising any value
Compress data
SERVER PROTOCOL
set/replace/add
get
append/prepend
increment/decrement
compare and swap
HASHING
Key is hashed into a value
Modulous then applied which is the number of the
servers
Server is then picked and stored
If one server drops out you only lose a fraction of the
keys
MEMCACHE LIMITS
Key Size is 250 bytes
Data Size is 1 megabyte
32bit/64bit memory limit
No Replication across cluster
MEMCACHE CLEANING UP
Uses Least Recently Used Algorithm
Looks for the oldest item and removes
TTL also applies to key / value pairs
SIMPLE USAGE
Fetch from memcache
If there return
Else calculate, store in cache and return
WHERE TO RUN?
Any server works
No need for matching size
Low CPU usage
MEMCACHE + PHP
PECL extension using custom connection
pecl install memcache
Provides MemcachePool and Memcache
INI settings to change hash strategy, function and
protocol.
MEMCACHE SAMPLE
MEMCACHE ACTIONS
Add - only if the key doesn’t exist
Set - will add or update key
Replace - only if the key already exists
MEMCACHE TASK
Open Terminal in VMWare Image and run
sudo service memcached start
Try using memcache to set, get and add values
Try setting a value using the Time To Live parameter
Ask questions :-)
MEMCACHEDB
Persistent key/value storage system
BDB used for persitence
Compatible with Memcache protocol
MEMCACHEDB CAVEATS
No expiration
Isn’t a replacement for memcache
APC
Provides OPCode caching in PHP
Shared memory for storage
APC is only on the local server
No network overhead from TCP/IP
APC
Input
Tokenizer
Parser APC
Compiler
Store Opcodes
Executor
APC SAMPLE
CACHE LAYERING
Disk /
APC Memcache
Database
Fetch from APC locally
Fetch from Memcache, add to APC
Finally fetch from the original source and store back
in Memcache
APC USE CASES
Should always use it to cache opcode of files
Small but frequently accessed things
You only have one server
APC TASK
Try storing classes or arrays in APC
Use the Time To Live
APC supports an array for keys in apc_get, fetch
multiple values
SQLITE
Local node storage of filesystem
Cache result sets from remote database
In memory database
DATABASE QUERY CACHING
Rely on MySQL to do the query caching
Doesn’t quite work though :-(
Invalidation of cache happens easily
ALTERNATIVE DATABASE
CACHING
Store the result set from the database using another
caching software
Hash query as a key value
Extend your DB layer to add this transparently?
CACHING TIPS
Pre-heat the cache
Use multiple levels of cache
Cache even dynamic data for short times
serialize() is slow
0 comments
Post a comment