Cache là kỹ thuật lưu trữ dữ liệu tạm thời để truy xuất nhanh hơn. Thay vì tính toán lại từ đầu mỗi lần có request, hệ thống lấy kết quả đã lưu sẵn. Bài viết này giải thích chi tiết về các tầng cache và cách triển khai.

Cache là gì?

Cache là lớp lưu trữ trung gian, nằm giữa nguồn dữ liệu gốc (database, file) và người dùng.

Không có Cache: Mỗi request phải chạy lại PHP, truy vấn database, render HTML. 100 người truy cập = 100 lần xử lý giống nhau.

Có Cache: Lần đầu xử lý xong, lưu kết quả. 99 người sau chỉ nhận kết quả đã lưu, không cần xử lý lại.

Tại sao Cache quan trọng?

  • Tăng tốc: TTFB giảm từ vài giây xuống vài chục ms.
  • Giảm tải Server: CPU, RAM, Database không bị quá tải.
  • Tốt cho SEO: Google ưu tiên website nhanh trong xếp hạng.
  • Tiết kiệm chi phí: Server nhỏ hơn vẫn chịu được nhiều traffic.

Kết hợp với Caching Strategies để tối ưu toàn diện.

4 Tầng Cache trong hệ thống

1. Browser Cache

Cache nằm trên thiết bị người dùng: điện thoại, laptop, máy tính.

  • Lưu file tĩnh: HTML, CSS, JS, hình ảnh.
  • Điều khiển bởi HTTP headers: Cache-Control, ETag, Expires.
# Cấu hình Cache-Control trong Nginx
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

# Hoặc trong Apache .htaccess

    Header set Cache-Control "max-age=2592000, public"

2. CDN / Edge Cache

Lưu bản sao website tại các máy chủ gần người dùng nhất.

  • Cloudflare: Phổ biến nhất, có free plan.
  • AWS CloudFront: Tích hợp với AWS ecosystem.
  • Vercel/Netlify: Tự động cache cho static sites.
# Cloudflare Cache Rules
# Rule: Cache everything for 1 week
if (http.request.uri.path contains "/static/") {
    set cache.cacheControl max-age: 604800
}

# Purge cache khi cần
# Settings → Caching → Overview → Purge Everything

3. Page Cache

Lưu toàn bộ trang HTML đã render, loại bỏ độ trễ PHP.

  • LiteSpeed Cache: Phổ biến trên WordPress.
  • WP-Rocket: Dễ setup, hiệu quả cao.
  • Nginx FastCGI Cache: Native, không cần plugin.
  • Varnish: Reverse proxy cache, mạnh nhất.
# Nginx FastCGI Cache
fastcgi_cache_path /var/cache/nginx levels=1:2
    keys_zone=WORDPRESS:100m inactive=60m;

server {
    # Enable cache
    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_use_stale error timeout updating;
    add_header X-Cache-Status $upstream_cache_status;
}
# Varnish VCL
sub vcl_backend_response {
    if (beresp.ttl > 0s) {
        unset beresp.http.Set-Cookie;
    }
    set beresp.ttl = 1h;
}

4. Object Cache

Cache kết quả truy vấn database và object PHP vào RAM.

  • Redis: Phổ biến nhất, hỗ trợ nhiều data types.
  • Memcached: Đơn giản, chỉ cache key-value.
# Redis cache example trong PHP
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$key = "user:123:profile";
$cache = $redis->get($key);

if ($cache) {
    $data = unserialize($cache);
} else {
    $data = $db->query("SELECT * FROM users WHERE id = 123");
    $redis->setex($key, 3600, serialize($data));
}

Lộ trình xử lý Request

Khi có request, hệ thống kiểm tra cache từ ngoài vào trong:

Bước 1: Browser Cache
→ Có sẵn? → Trả về ngay (0ms)

Bước 2: CDN Cache
→ Có bản lưu? → Trả về từ edge gần nhất

Bước 3: Page Cache (Nginx/Varnish)
→ Có file HTML? → Trả về HTML tĩnh

Bước 4: Object Cache (Redis)
→ Query đã cache? → Lấy từ RAM

Bước 5: Database (MySQL)
→ Cache Miss hoàn toàn → Truy vấn từ đầu

Cache Headers

# Các HTTP Headers quan trọng

Cache-Control: max-age=3600, public
# max-age: thời gian cache (giây)
# public/private: ai được cache

ETag: "abc123"
# Hash của content, trình duyệt tự so sánh

Expires: Sat, 01 Jan 2027 00:00:00 GMT
# Ngày hết hạn cụ thể

Last-Modified: Thu, 01 Jan 2026 12:00:00 GMT
# Ngày sửa cuối cùng

# Kiểm tra trong Chrome DevTools
# Network tab → Headers → Response Headers

WordPress Cache Plugins

LiteSpeed Cache

# Cài đặt LiteSpeed Cache
1. Cài plugin từ WordPress dashboard
2. Dashboard → LiteSpeed Cache → Cache
3. Bật: Page Cache, Object Cache, Browser Cache
4. Purge All khi cần

WP-Rocket

  • Tự động tạo page cache.
  • Minify CSS, JS.
  • Lazy load images.
  • Integration với Cloudflare, Redis.

Xóa Cache (Purge)

# Nginx: xóa FastCGI cache
rm -rf /var/cache/nginx/*

# Varnish: purge URL
varnishadm "purge url ^/page-abc$"

# Redis: flush all
redis-cli FLUSHALL

# WordPress: WP-CLI
wp cache flush

# Cloudflare API
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
  -H "Authorization: Bearer API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"files":["https://example.com/*"]}'

Cache Invalidation

Cache invalidation là cách xóa cache khi dữ liệu thay đổi. Có 3 chiến lược:

  • TTL-based: Hết hạn sau thời gian nhất định.
  • Manual: Xóa thủ công khi cập nhật nội dung.
  • Event-based: Tự động xóa khi có thay đổi trong CMS.
# TTL example
# Cache có hiệu lực trong 1 giờ
SET key value EX 3600

# Event-based purge trong WordPress
add_action('save_post', function($post_id) {
    // Purge cache khi bài viết được cập nhật
    do_action('litespeed_purge', 'post', $post_id);
});

Monitoring Cache Performance

# Nginx X-Cache-Status header
# HIT: từ cache
# MISS: không có trong cache
# STALE: dùng cache cũ trong khi refresh

# Redis monitoring
redis-cli info stats | grep hit_rate

# Varnish stats
varnishstat -1 | grep cache_hit

# Cloudflare Analytics
# Dashboard → Analytics

Common Issues

Stale Content

  • Người dùng thấy nội dung cũ.
  • Fix: Purge cache sau khi cập nhật.

Cache Miss率高

  • Server vẫn phải xử lý nhiều.
  • Fix: Tăng cache TTL, tối ưu cache key.

Memory đầy

  • Redis/Memcached hết RAM.
  • Fix: Đặt maxmemory, dùng eviction policy.
# Redis eviction policy
# redis.conf
maxmemory 256mb
maxmemory-policy allkeys-lru
# Xóa least recently used key khi đầy

Kết Luận

Cache là kỹ thuật thiết yếu để tối ưu performance. 4 tầng cache hoạt động cùng nhau:

  • Browser Cache: File tĩnh trên thiết bị user.
  • CDN Cache: Cache ở edge servers gần user.
  • Page Cache: HTML tĩnh, loại bỏ PHP.
  • Object Cache: Query results trong RAM.

Triển khai đúng cách sẽ giảm TTFB từ vài giây xuống vài chục ms, giảm tải server đáng kể.

Chào các bạn mình là Quốc Hùng , mình sinh ra thuộc cung song tử ,song tử luôn khẳng định chính mình ,luôn luôn phấn đấu vượt lên phía trước ,mình sinh ra và lớn lên tại vùng đất võ cổ truyền ,đam mê của mình là coder ,ngày đi học tối về viết blog ...