Dưới đây là hướng dẫn chi tiết cách sử dụng Memcached trong CodeIgniter 3 (CI3), bao gồm:
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
memcached
trong CodeIgniter 3application/config/cache.php
Tìm dòng:
$config['cache_path'] = '';
memcached
:$config['adapter'] = 'memcached';
$config['backup'] = 'file'; // fallback nếu Memcached lỗi
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ủ đó.
$this->load->driver('cache');
$this->cache->save('key_ten_bien', $du_lieu, 300); // 300 giây
$data = $this->cache->get('key_ten_bien');
if ($data === FALSE) {
// Cache chưa có hoặc đã hết hạn
}
$this->cache->delete('key_ten_bien');
$this->cache->clean();
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);
}
}
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';
}
}
$memcached = new Memcached();
$memcached->addServer('127.0.0.1', 11211);
print_r($memcached->getStats());
$cache_key = 'news_' . $category_id;
Ưu điểm | Mô tả |
---|---|
Rất nhanh | Chạy trên RAM |
Dễ dùng với CI3 | Có driver sẵn |
Giảm truy vấn MySQL | Cache kết quả phức tạp |
Có thể scale nhiều node | Phù hợp khi load lớn, nhiều server |
$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: