×

Hướng dẫn viết class để lưu trữ cache vào file trong PHP

Giới thiệu

Trong phát triển ứng dụng web, việc tối ưu hiệu suất là một yếu tố cực kỳ quan trọng. Một trong những cách hiệu quả nhất để cải thiện tốc độ tải trang và giảm tải cho server là sử dụng cơ chế cache. Khi dữ liệu được lưu trữ tạm thời, ứng dụng của bạn có thể phục vụ người dùng nhanh chóng hơn mà không cần truy xuất cơ sở dữ liệu liên tục. Trong bài viết này, chúng ta sẽ hướng dẫn bạn cách viết một class trong PHP để lưu trữ cache vào file, giúp cải thiện hiệu suất ứng dụng của bạn một cách đơn giản và hiệu quả.

Tại sao nên sử dụng cache?

Cache giúp lưu trữ các dữ liệu mà bạn thường xuyên cần truy cập. Thay vì phải truy xuất dữ liệu từ cơ sở dữ liệu hoặc thực hiện các phép tính phức tạp mỗi khi có yêu cầu, bạn có thể lấy dữ liệu từ cache. Điều này không chỉ giúp giảm thời gian phản hồi mà còn tiết kiệm tài nguyên của máy chủ.

Lợi ích của việc sử dụng file làm cache

Sử dụng file để lưu trữ cache có một số lợi ích:

  • Đơn giản và dễ quản lý: Bạn có thể dễ dàng kiểm tra hoặc chỉnh sửa các file cache.
  • Không yêu cầu cấu hình phức tạp: Không cần máy chủ Redis hay Memcached, chỉ cần một thư mục để lưu trữ file.
  • Có thể phục vụ cho nhiều ứng dụng: Dữ liệu cache được lưu trữ dưới dạng file có thể được tái sử dụng bởi nhiều ứng dụng khác nhau.

Thiết kế class Cache

Trước khi bắt đầu viết code, chúng ta sẽ thiết kế một class có tên là FileCache. Class này sẽ có những chức năng chính như:

  • Lưu trữ dữ liệu vào file.
  • Lấy dữ liệu từ file.
  • Kiểm tra xem dữ liệu có còn hợp lệ hay không.
  • Xóa cache khi cần thiết.

Dưới đây là phần mô tả chi tiết về class FileCache.

Cấu trúc class

class FileCache {
    private $cacheDir;
    private $cacheTime;

    public function __construct($cacheDir = 'cache', $cacheTime = 3600) {
        $this->cacheDir = $cacheDir;
        $this->cacheTime = $cacheTime;

        if (!is_dir($cacheDir)) {
            mkdir($cacheDir, 0777, true);
        }
    }

    private function getCacheFile($key) {
        return $this->cacheDir . '/' . md5($key) . '.cache';
    }

    public function set($key, $data) {
        $cacheFile = $this->getCacheFile($key);
        $expireTime = time() + $this->cacheTime;

        $dataToCache = [
            'expire' => $expireTime,
            'data' => $data
        ];

        file_put_contents($cacheFile, serialize($dataToCache));
    }

    public function get($key) {
        $cacheFile = $this->getCacheFile($key);

        if (!file_exists($cacheFile)) {
            return false;
        }

        $data = unserialize(file_get_contents($cacheFile));

        if (time() > $data['expire']) {
            unlink($cacheFile);
            return false;
        }

        return $data['data'];
    }

    public function clear($key) {
        $cacheFile = $this->getCacheFile($key);

        if (file_exists($cacheFile)) {
            unlink($cacheFile);
        }
    }

    public function clearAll() {
        $files = glob($this->cacheDir . '/*.cache');

        foreach ($files as $file) {
            unlink($file);
        }
    }
}

Hàm khởi tạo và cấu trúc

Hàm khởi tạo __construct cho phép bạn chỉ định thư mục lưu trữ cache và thời gian sống của cache (theo giây) khi tạo một đối tượng của class FileCache. Nếu thư mục không tồn tại, chúng ta sẽ tạo nó mới.

Phương thức lấy và lưu cache

  • set: Phương thức set nhận vào một khóa và dữ liệu, tạo một file cache tương ứng. Nội dung file cache sẽ bao gồm thời gian hết hạn và dữ liệu.

  • get: Phương thức get nhận vào một khóa và trả về dữ liệu từ cache nếu nó chưa hết hạn, ngược lại sẽ xóa file cache và trả về false.

Xóa cache

  • clear: Phương thức clear cho phép bạn xóa một file cache theo khóa.

  • clearAll: Phương thức clearAll cho phép bạn xóa toàn bộ file cache trong thư mục.

Ví dụ sử dụng class FileCache

Sau khi đã tạo class FileCache, dưới đây là ví dụ về cách sử dụng nó:

$cache = new FileCache('cache', 3600);

// Lưu dữ liệu vào cache
$data = ['name' => 'John', 'age' => 30];
$cache->set('user_data', $data);

// Lấy dữ liệu từ cache
$cachedData = $cache->get('user_data');

if ($cachedData === false) {
    echo "Cache đã hết hạn hoặc không tồn tại.";
} else {
    print_r($cachedData);
}

// Xóa cache
$cache->clear('user_data');

// Xóa toàn bộ cache
$cache->clearAll();

Kết luận

Việc sử dụng class để lưu trữ cache vào file trong PHP là một giải pháp dễ dàng và hiệu quả để cải thiện hiệu suất ứng dụng web của bạn. Với class FileCache mà chúng ta đã xây dựng, bạn có thể dễ dàng lưu trữ và quản lý cache mà không cần phải phụ thuộc vào bất kỳ hệ thống cache phức tạp nào khác. Bằng cách này, bạn không chỉ giảm tải cho server mà còn mang lại trải nghiệm tốt hơn cho người dùng của mình. Hãy thử áp dụng ngay hôm nay để tối ưu hóa ứng dụng của bạn!

Comments