Sử dụng cache trong CakePHP
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)
Post comment
Bài viết mới
- CakePHP version 1.3.12
- Tạo chuỗi ngẫu nhiên với 1 dòng code
- Kỹ thuật “bit field” trong phân quyền
- Làm việc với File và Folder
- CakePHP 1.3.8
- CakePHP 1.3.7 Released
- Ajax trong CakePHP
- Tạo và load file config trong CakePHP
- Làm site đa ngôn ngữ với CakePHP (Phần 1)
- CakePHP 1.3.6 and 1.2.9 released
- CakePHP 1.3.5 released
- Type hinting trong PHP
- CakePHP ra phiên bản mới 1.3.4
- Tích hợp Zend framework vào CakePHP
- Tạo virtual host trên local
- Sử dụng Acl trong cakephp – Phần 2
- Sử dụng Acl trong cakephp – Phần 1
- Sinh code tự động với cake console
- Tự động xóa record ở bảng con khi reocord ở bảng cha bị xóa
- Xác thực người dùng với component Auth
Thảo luận mới
- admin on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- hanh on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- bich yen on Sử dụng session trong CakePHP
- admin on Sử dụng Acl trong cakephp – Phần 1
- admin on Sử dụng session trong CakePHP
- Bich Yen on Sử dụng session trong CakePHP
TAG
Calendar
Lưu trữ
- September 2011 (3)
- July 2011 (1)
- March 2011 (1)
- February 2011 (1)
- November 2010 (4)
- October 2010 (1)
- September 2010 (2)
- August 2010 (9)
- July 2010 (9)
- June 2010 (22)
Blogroll
- Bakery
- Biển đảo Việt Nam
- CakePHP
- CakePHP Google Group
- CakePHP Manual
- CakePHP Questions
- Diễn đàn CakePHP VN

admin
