0% found this document useful (0 votes)
45 views35 pages

Caching For Cash - Caching: Scott Macvicar PHP - Works 2008

This document discusses various caching options for PHP applications to improve performance. It covers caching flat files, using RAM disks, Memcache, and APC. Memcache stores key-value pairs in memory for fast access across servers. It is used by large sites like Facebook. APC caches compiled PHP scripts in shared memory for faster execution. The document recommends layering different caches like caching database queries in Memcache and APC to optimize performance.

Uploaded by

joaofgf
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views35 pages

Caching For Cash - Caching: Scott Macvicar PHP - Works 2008

This document discusses various caching options for PHP applications to improve performance. It covers caching flat files, using RAM disks, Memcache, and APC. Memcache stores key-value pairs in memory for fast access across servers. It is used by large sites like Facebook. APC caches compiled PHP scripts in shared memory for faster execution. The document recommends layering different caches like caching database queries in Memcache and APC to optimize performance.

Uploaded by

joaofgf
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 35

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 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
QUESTIONS?

You might also like