Cache trong CakePHP

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 21 tháng 1, 2025

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

  1. Kiểm Soát Dữ Liệu Cache: Đảm bảo không lưu dữ liệu nhạy cảm.
  2. 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.
  3. Dọn Dẹp Cache: Xóa cache khi dữ liệu liên quan thay đổi.
  4. 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.

Website Logo

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.

Bình luận

Website Logo

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

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ