caching basics in php

Post on 10-May-2015

30.172 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Very basics things about caching in PHP. Just what it is, how to do, where to cache etc. A little details about APC.

TRANSCRIPT

Caching Basics in PHP

Presented at

The beauty of WebphpXperts seminar 2010

What is Caching?

“A cache is a temporary storage area where frequently accessed data can be stored for rapid access.”

Why do we need it?

● 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

A basic example

● A Post

● 23 comments

● Sidebar Contents

● Navigations

● Categories

● Much more...

We have to load -

1. Check if already cached if(the resource is cached) {

Just display it.}

// TOP of your script$cachefile = 'cache/'.basename($_SERVER['SCRIPT_URI']);

// Serve from the cache if existif (file_exists($cachefile)) { include($cachefile); exit;}

2. Generate content and cacheelse{

Get the resource, Display it and Cache.}

ob_start(); // start the output buffer

// – Your normal PHP script and HTML content here –

// BOTTOM of your script

// save the contents of output buffer to the file$fp = fopen($cachefile, 'w');fwrite($fp, ob_get_contents()); fclose($fp);

ob_end_flush(); // Send the output to the browser

3. Expire the cache

● Event/Trigger

● Setting a time

if(new comment || post edited) {Expire cache for this post

}

$cachetime = 120 * 60; // 2 hours

// Serve from the cache if it is younger than $cachetimeif (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) { include($cachefile); Exit; }

So, It was simple. right?

Request

Output

CacheCompute

Miss

Hit

Store

1

2

3

4

Request

Your question is ...

My pages always have an ever changing content and cannot be cached in their entirety

Different Caching Approaches

● Full page caching● Granular page caching● Content pre­generation● Opcode caching● SQL query caching● Browser caching● Object/Variable caching 

Everybody is doing it!

● Zend Framework● CakePHP● Kohana● Symfony● ...

● Drupal (modules)

● Wordpress (wp­cache)

● Joomla (modules)

● PhpBB● Magento● ...

Frameworks                CMSs

What to cache?

Anything that...● you don't want to fetch or compute every time your code runs.● isn't going to change very often

To find them, monitor ­● Queries● Page loads● Web Analytics

Where to Cache?

● Local Database faster than Remote Database *● Local Disk faster than Database*● RAM faster than Disk*

* Some conditions apply

APC

● APC: Alternative PHP Cache● Free, Open Source Opcode Cache● Content / Object caching● Simple installation● Stores to local, shared memory● Going to be released as part of PHP6

Installation

Basic PECL (http://pecl.php.net)

pecl install apc

Ubuntu/LinuxMintapt­get install php5­apc

Windows(http://pecl4win.php.net )

extension=php_apc.dll

A Quick BenchmarkPHP Native PHP w/APC

Concurrency Level 10

Time taken for tests 60 seconds

Complete requests 298 914

Total transferred 643,149 bytes 1,962,675 bytes

HTML transferred 516,971 bytes 1,582,035 bytes

Requests per second 4.91 [#/sec] 15.21 [#/sec]

Time per request 2035.405 [ms] 657.623 [ms]

Time per request(mean, across all concurrent requests)

203.541 [ms] 65.762 [ms]

Transfer rate 10.35 [KB/s] received 31.88 [KB/s] received

How? Opcode caching

Scanning Lexing Parsing Compilation

Object caching

● apc_add() / apc_store() ­ Cache a variable● apc_fetch() ­ Fetch a stored variable from the cache ● apc_delete() ­ Removes a stored variable from the cache

Monitor apc.php

I am...http://ajaxray.com | http://www.facebook.com/ajaxray | http://twitter.com/ajaxray

Anis uddin AhmadCo­Founder, WNeeds

http://ajaxray.com | anisniit@gmail.com 

Thank you!

?APC Developers

● George Schlossnagle

● Daniel Cowgill

● Rasmus Lerdorf

● Gopal Vijayaraghavan

● Edin Kadribasic

● Ilia Alshanetsky

● Marcus Börger

● Sara Golemon

top related