Cache trong php - cách viết code cache trong php

 Một trang php cơ bản thông thường khôgn cần cache nhưng nếu một trang có lưu lượng truy cập lớn hoặc một CMS mã nguồn nào cũng ứng dụng cache , sau đây mình sẽ chỉ cho các bạn cách cache đơn giản nhất giúp tăng khả năng của server và tăng tốc trang của bạn.

Client sẽ gửi request tới server, thường thì chỉ là một url, lên tại bước này thì không tốn thời gian. Tiếp đó server sẽ parse request, gửi tới DB, và lấy dữ liệu từ DB trả về, parse dữ liệu và trả lại cho Browser, việc query tới DB sẽ tốn rất nhiều thời gian, thêm nữa dữ liệu response thường lớn, đây chính là nguyên nhân làm cho ứng dụng của ta chậm đi.

Tạo cache sẽ giúp cho site chạy nhanh và giảm truy cập trực tiếp vào database, với php việc tạo cache chỉ ở mức genarate ra file, thường là html. Đây là giải pháp rất hay nếu làm tốt, có thể tăng tốc độ lướt web lên hàng chục lần. Tuỳ vào mục đích của ứng dụng để cache, cũng như kết hợp các phương pháp cho hiệu quả:

1. Cache toàn bộ page: Nguyên cả page ứng với url nhất định được lưu vào cache, các truy cập tiếp theo đến cùng url này sẽ include ngay lập tức file cache được tạo ra trước đó, do đó sẽ giảm tối đa về thời gian do server không phải xử lý gì cả (kể cả truy cập DB). Cách này đơn giản nhưng không linh hoạt, và khó thực thi vì dữ liệu trên các trang là dynamic.

2. Cache từng phần của page: Ta sẽ chỉ cache một phần của page mà tại đó dữ liệu ít bị thay đổi. Điều này đảm bảo client sẽ nhận được dữ liệu trả về là chính xác mà không phải dữ liệu cũ từ file cache.

3. Cache SQL: Khi cùng câu lệnh SQL được gọi đi gọi lại, thì chỉ lệnh đầu tiên được gửi đến DB server, trong các Framework đều có cache SQL.

Để bắt đầu thì ta phải tạo một thư mục cache để chứa các file cache cho ứng dụng của ta, không lên để các file cache lung tung vì để có thể cache file ta cần chmod cho thư mục phải có quyền ghi và đọc, do đó để dễ chmod và bảo mật ta cần tạo riêng thư mục cache, việc đặt cache key cũng cần chú ý để dễ phân biệt. Sau đây là một ví dụ đơn giản cache dữ liệu:

CODE

$cacheFile = 'cache/name_file_cache.php';
if ( (file_exists($cacheFile)) && ((fileatime($cacheFile) + 600) > time()) ){
$content = file_get_contents($cacheFile);
echo $content;
} else{
ob_start();
echo '

Hello world to cache

';
$content = ob_get_contents();
ob_end_clean();
file_put_contents($cacheFile,$content);
echo $content;
}
?>


SQL cache:

CODE

$file = 'sql_cache.txt';
$expire = 86400; // 24 hours
if (file_exists($file) &&
filemtime($file) > (time() - $expire)) {
$records = unserialize(file_get_contents($file));
} else {
$link = mysql_connect('localhost','username','password')
or die (mysql_error());
mysql_select_db('shop')
or die (mysql_error());
/* form SQL query */
$query = "SELECT * FROM categories";
$result = mysql_query($query)
or die (mysql_error());
while ($record = mysql_fetch_array($result) ) {
$records[] = $record;
}
$OUTPUT = serialize($records);
$fp = fopen($file,"w");
fputs($fp, $OUTPUT);
fclose($fp);
} // end else

// Query results are in $records array
foreach ($records as $id=>$row) {
if ($row['category_id'] == $_REQUEST['category_id']) {
// category selected - print bold
print ''.$row['category_name'].'
';
} else {
// other category - print regular
print $row['category_name'].'
';
}
} // end foreach


Dữ liệu out put sẽ chứa kiểu và size, có dạng:

CODE

a:1:{i:0;a:6:{i:0;s:1:"1";s:11:"category_id";s:1:"1";i:1;s:9:"Computers";s:13:"category_name";s:9:
"Computers" ;i:2;s:25:"Description for computers";s:20:"category_description"
;s:25:"Description for computers";}}


Chúc các bạn thành công !