Cache trong CakePHP
Cache (bộ nhớ đệm) là một kỹ thuật quan trọng để tăng hiệu suất ứng dụng bằng cách lưu trữ dữ liệu thường xuyên truy cập để sử dụng lại, thay vì truy xuất từ cơ sở dữ liệu hoặc thực hiện xử lý phức tạp mỗi lần. Trong CakePHP, cache được tích hợp sẵn và dễ dàng cấu hình, quản lý.

1. Tại Sao Phải Sử Dụng Cache?
- Tăng tốc ứng dụng: Giảm thời gian truy xuất dữ liệu.
- Giảm tải cơ sở dữ liệu: Truy vấn ít hơn khi dữ liệu đã được lưu trong cache.
- Tối ưu hiệu suất: Tăng khả năng đáp ứng của ứng dụng khi xử lý nhiều yêu cầu cùng lúc.
2. Các Loại Cache Hỗ Trợ Trong CakePHP
CakePHP hỗ trợ nhiều hệ thống lưu trữ cache khác nhau:
- File: Lưu cache dưới dạng file trên hệ thống.
- Database: Lưu cache trong cơ sở dữ liệu.
- APC: Cache trên bộ nhớ của máy chủ (yêu cầu cài đặt APCu).
- Redis: Hệ thống lưu trữ dữ liệu nhanh trong bộ nhớ.
- Memcached: Giống Redis, thường dùng cho ứng dụng lớn.
3. Cấu Hình Cache Trong CakePHP
Tất cả cấu hình cache được quản lý trong tệp cấu hình config/app.php
.
a. Cấu Hình Mặc Định
Phần cấu hình cache mặc định trong app.php
:
'Cache' => [
'default' => [
'className' => 'File',
'path' => CACHE,
'duration' => '+1 hours',
'prefix' => 'myapp_',
],
'short' => [
'className' => 'File',
'path' => CACHE . 'short/',
'duration' => '+5 minutes',
'prefix' => 'myapp_short_',
],
'long' => [
'className' => 'File',
'path' => CACHE . 'long/',
'duration' => '+1 week',
'prefix' => 'myapp_long_',
],
],
b. Cấu Hình Redis Cache
Redis là lựa chọn tốt cho ứng dụng yêu cầu hiệu năng cao.
'Cache' => [
'default' => [
'className' => 'Redis',
'duration' => '+1 hours',
'prefix' => 'myapp_',
'host' => '127.0.0.1',
'port' => 6379,
'persistent' => false,
'password' => null,
'database' => 0,
],
],
c. Cấu Hình APC Cache
Đảm bảo máy chủ cài đặt APCu trước khi sử dụng.
'Cache' => [
'default' => [
'className' => 'Apc',
'duration' => '+2 hours',
'prefix' => 'myapp_',
],
],
4. Sử Dụng Cache Trong CakePHP
a. Đọc và Ghi Dữ Liệu Vào Cache
CakePHP cung cấp các hàm tiện lợi để thao tác với cache.
use Cake\Cache\Cache;
// Lưu dữ liệu vào cache
Cache::write('key_name', 'Giá trị cần lưu');
// Đọc dữ liệu từ cache
$value = Cache::read('key_name');
if ($value) {
echo "Dữ liệu từ cache: " . $value;
} else {
echo "Không tìm thấy dữ liệu trong cache.";
}
b. Xóa Dữ Liệu Trong Cache
Xóa dữ liệu với một khóa cụ thể:
Cache::delete('key_name');
Xóa toàn bộ cache:
Cache::clear();
c. Cache Với Thời Gian Hết Hạn (Expiration)
Khi lưu dữ liệu, có thể chỉ định thời gian hết hạn:
Cache::write('key_name', 'Giá trị này chỉ tồn tại 10 phút', '+10 minutes');
5. Cache Trong Controller
CakePHP hỗ trợ caching response trực tiếp trong Controller.
a. Caching Response
namespace App\Controller;
use Cake\Controller\Controller;
class ArticlesController extends Controller
{
public function index()
{
$this->response = $this->response->withCache('+1 hour'); // Lưu cache 1 giờ
$articles = $this->Articles->find('all');
$this->set(compact('articles'));
}
}
b. Caching View
CakePHP cho phép cache toàn bộ view. Cấu hình trong app.php
:
'Cache' => [
'view' => [
'className' => 'File',
'path' => CACHE . 'views/',
'duration' => '+1 day',
'prefix' => 'view_',
],
],
Trong view file, sử dụng:
$this->cache('view_name', '+1 day');
6. Sử Dụng Cache Trong ORM
CakePHP ORM có thể cache kết quả truy vấn, giảm tải cơ sở dữ liệu.
$query = $this->Articles->find('all')
->where(['published' => true])
->cache('published_articles', 'long');
$articles = $query->all();
7. Lưu Ý Khi Sử Dụng Cache
- Kiểm Soát Dữ Liệu Cache: Đảm bảo không lưu dữ liệu nhạy cảm.
- Xác Định Chiến Lược Cache: Quyết định những dữ liệu nào cần cache để tối ưu hiệu suất.
- Dọn Dẹp Cache: Xóa cache khi dữ liệu liên quan thay đổi.
- Sử Dụng TTL Hợp Lý: Tránh lưu cache quá lâu để dữ liệu không bị lỗi thời.
Kết Luận
Việc sử dụng cache trong CakePHP không chỉ giúp tối ưu hiệu suất mà còn giảm tải cho máy chủ. Với các công cụ và cấu hình linh hoạt, CakePHP cho phép bạn triển khai caching hiệu quả cho nhiều loại dữ liệu và mục đích khác nhau.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com