Caching for Cash: Caching
Upcoming SlideShare
Loading in...5

Caching for Cash: Caching






Total Views
Slideshare-icon Views on SlideShare
Embed Views



1 Embed 4 4



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Caching for Cash: Caching Caching for Cash: Caching Presentation Transcript

    • CACHING FOR CASH - CACHING Scott MacVicar php|works 2008
    • WHY CACHE? Reduce memory usage Reduce processing time Reduce network traffic Reduce disk access
    • CACHING OPTIONS Flat file RAM disk Database Memcache APC Script level
    • 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 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
    • 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