Aug
1

Sử dụng cache trong CakePHP

Author admin    Category Manual, Tutorial     Tags

Kỹ thuật cache có tác dụng lớn trong việc tối ưu hóa tốc độ ứng dụng nếu như chúng ta biết tận dụng. Bài viết này sẽ hướng dẫn các bạn sử dụng thư viện Cache mà CakePHP đã xây dựng sẵn

Để hiểu về cache, chúng ta xét một ví dụ đơn giản như sau:

- Bạn có một trang hiển thị danh sách sản phẩm, thông thường, trang sản phẩm này bạn sẽ cập nhật mỗi tuần một lần. Cứ một người nào đó vào xem trang sản phẩm này, ứng dụng của chúng ta lại kết nối vào CSDL để lấy thông tin lên. Vì bạn dự tính rằng mỗi tuần mình mới cập nhật sản phẩm một lần (ở đây tôi chỉ nói tới các thông tin cơ bản của sản phẩm như: tên, giá, hình ảnh, mô tả… Còn phần đếm lượt người xem, bình chọn… đương nhiên sẽ phải update thường xuyên), cho nên, trong khoảng 1 tuần đó, có bao nhiêu người xem đi chăng nữa thì các thông tin cơ bản của sản phẩm cũng như nhau. Cứ mỗi lần có ai đó xem ta lại kết nối csdl để lấy thông tin lên trong khi thông tin đó không thay đổi trong một khoảng thời gian nào đó, như vậy sẽ tốn tài nguyên vô ích.

- Để tối ưu việc truy xuất dữ liệu, ta dùng cache. Nghĩa là ta chỉ lấy thông tin từ csdl lên 1 lần, lưu tạm vào đâu đó (vào file chẳng hạn), khi người khác vào xem thì ứng dụng đọc thông tin từ file tạm lên, không phải vào csdl để lấy. Tất nhiên ta phải định thời gian hết hiệu lực của dữ liệu tạm này, hoặc mỗi khi update sản phẩm ta xóa dữ liệu tạm này đi. Khi đó ứng dụng kiểm tra dữ liệu tạm hết hiệu lực hoặc không tồn tại thì nó sẽ kết nối vào csdl để lấy thông tin và ta có thông tin mới!

Thư viện Cache của CakePHP có một số phương thức chính sau đây:

1. Cache::read($key, $config = null)

- Đọc dữ liệu đã được cache thông qua key

Ví dụ: đọc dữ liệu sản phẩm được cache với key là sanpham

$sanpham = Cache::read('sanpham');
 
if ($sanpham !== false) {
	return $sanpham;
}

2. Cache::write($key, $value, $config = null)

- Ghi dữ liệu vào cache thông qua key

Ví dụ: Kiểm tra nếu chưa có cache nào có key là posts thì lưu dữ liệu của $posts vào cache

if (($posts = Cache::read('posts')) === false) {
		$posts = $this->Post->find('all');
		Cache::write('posts', $posts);
	}

3. Cache::delete($key, $config = null)

- Xóa cache thông qua key

4. Cache::config()

- Tạo các cấu hình cho cache
- Cấu hình này được dùng cho các phương thức read và write
- Ví dụ: ta có 2 cấu hình cache như sau:

Cache::config('short', array(  
    'engine' => 'File',  
    'duration'=> '+1 hours',  
    'path' => CACHE,  
    'prefix' => 'cake_short_'
));
 
// long  
Cache::config('long', array(  
    'engine' => 'File',  
    'duration'=> '+1 week',  
    'probability'=> 100,  
    'path' => CACHE . 'long' . DS,  
));

Theo code trên thì thông tin 2 cấu hình như sau:

- Cấu hình 1 có tên là short, thời gian hiệu lực là 1 tiếng, lưu trong đường dẫn mặc định (CACHE = app/tmp/cache/)
- Cấu hình 2 có tên là long, thời gian hiệu lực là 1 tuần, lưu trong đường dẫn app/tmp/cache/long/

Bạn có thể đặt code trên trong core.php

Khi read, write, delete, nếu không truyền vào tham số $config thì mặc định cấu hình default sẽ được dùng. Bạn xem trong core.php sẽ có cấu hình default này:

Cache::config('default', array('engine' => 'File'));

Bạn chú ý khi write cache ở cấu hình nào thì phải read cache (hoặc delete cache) ở cấu hình đó, nếu không sẽ xảy ra tình trạng lưu ở 1 nơi còn đọc (xóa) 1 nẻo thì sẽ không đọc (xóa) được!

5. Cache::set()

- Cho phép bạn thiết lập đè các thông số của một cấu hình nào đó (xem mục 4)

Cache::set(array('duration' => '+30 days'));
Cache::write('results', $data);
 
Cache::set(array('duration' => '+30 days'));
$results = Cache::read('results');

Post comment

Follow us on Twitter! Follow us on Twitter!
Diễn đàn CakePHP cho người Việt Nam

Bài viết mới

Thảo luận mới

TAG

Calendar

August 2010
M T W T F S S
« Jul   Sep »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Lưu trữ

Blogroll

Thống kê

5 khách