Dưới đây là hướng dẫn chi tiết cách sử dụng Memcached trong CodeIgniter 3 (CI3), bao gồm:

  • Cấu hình Memcached
  • Sử dụng get/set/delete cache
  • Cách kiểm tra Memcached có hoạt động không
  • Xử lý trường hợp fallback nếu Memcached tạm thời lỗi

✅ 1. Cài đặt Memcached

Ubuntu/Debian:

sudo apt update
sudo apt install memcached php-memcached
sudo systemctl enable memcached
sudo systemctl start memcached

Kiểm tra Memcached chạy chưa:

ps aux | grep memcached

✅ 2. Kích hoạt driver memcached trong CodeIgniter 3

Bước 1: Mở file application/config/cache.php

Tìm dòng:

$config['cache_path'] = '';

Bước 2: Đảm bảo driver là memcached:

$config['adapter'] = 'memcached';
$config['backup'] = 'file'; // fallback nếu Memcached lỗi

✅ 3. Cấu hình server Memcached

Mở file application/config/memcached.php. Nếu chưa có, bạn tạo mới file và thêm:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$config = [
    [
        'host' => '127.0.0.1',
        'port' => 11211,
        'weight' => 1
    ]
];

Nếu chạy Memcached ở server khác, thay 127.0.0.1 bằng IP máy chủ đó.


✅ 4. Sử dụng Memcached trong Controller / Model

Nạp thư viện:

$this->load->driver('cache');

Set cache:

$this->cache->save('key_ten_bien', $du_lieu, 300); // 300 giây

Get cache:

$data = $this->cache->get('key_ten_bien');
if ($data === FALSE) {
    // Cache chưa có hoặc đã hết hạn
}

Xóa cache:

$this->cache->delete('key_ten_bien');

Xóa toàn bộ cache:

$this->cache->clean();

✅ 5. Ví dụ thực tế trong Controller

class News extends CI_Controller {

    public function index() {
        $this->load->driver('cache');

        $cache_key = 'latest_news';

        $data['news'] = $this->cache->get($cache_key);

        if ($data['news'] === FALSE) {
            // Cache chưa có => query DB
            $this->load->model('News_model');
            $data['news'] = $this->News_model->get_latest_news();

            // Lưu cache 5 phút
            $this->cache->save($cache_key, $data['news'], 300);
        }

        $this->load->view('news/index', $data);
    }
}

✅ 6. Kiểm tra Memcached hoạt động không?

Tạo một controller kiểm tra:

class Testcache extends CI_Controller {
    public function index() {
        $this->load->driver('cache');
        $this->cache->save('test_key', '123456', 60);
        $data = $this->cache->get('test_key');
        echo $data ? 'Memcached OK: ' . $data : 'Memcached NOT working';
    }
}

✅ 7. Kiểm tra thông tin server Memcached

$memcached = new Memcached();
$memcached->addServer('127.0.0.1', 11211);
print_r($memcached->getStats());

✅ 8. Gợi ý: Dùng cache theo key động

$cache_key = 'news_' . $category_id;

✅ 9. Ưu điểm Memcached trong CI3

Ưu điểmMô tả
Rất nhanhChạy trên RAM
Dễ dùng với CI3Có driver sẵn
Giảm truy vấn MySQLCache kết quả phức tạp
Có thể scale nhiều nodePhù hợp khi load lớn, nhiều server

✅ 10. Nếu bạn muốn lưu HTML (full page cache)

$cache_key = 'page_' . md5($_SERVER['REQUEST_URI']);
$html = $this->cache->get($cache_key);

if ($html) {
    echo $html;
    exit;
}

// chạy controller xử lý như thường
ob_start();
// ... render view
$this->load->view('page', $data);
$html = ob_get_clean();

// lưu cache
$this->cache->save($cache_key, $html, 300);

echo $html;

Nếu bạn cần: