Server cache là kỹ thuật lưu kết quả tính toán hoặc render ở phía server để các request sau đó trả lại nhanh, không phải tính lại từ đầu. Trên WordPress, server cache chia làm 4 loại độc lập: page cache (HTML), opcode cache (PHP bytecode), object cache (query DB), fragment cache (template partial). Mỗi loại tối ưu một tầng riêng — kết hợp đủ 4 mới đạt được TTFB < 200ms ổn định.
Định nghĩa và phân biệt với browser cache
Cache có 2 phía: client-side (browser cache, service worker) và server-side. Browser cache lưu file ở máy user (asset CSS/JS/image) — chỉ benefit user lặp lại visit. Server cache nằm ở phía server, benefit mọi user, bao gồm user lần đầu.
Server cache giải quyết 3 bottleneck phổ biến của một WordPress request:
- PHP compile cùng file lặp đi lặp lại (opcode cache fix).
- Database query lặp với cùng tham số (object cache fix).
- Cùng URL render cho nhiều user khác nhau với cùng kết quả (page cache fix).
4 loại server cache trong stack WordPress
1. Page cache — lưu HTML output
Page cache là loại có impact lớn nhất trên TTFB. Plugin (LiteSpeed Cache, WP Rocket, W3 Total Cache) intercept request ở giai đoạn early — nếu URL có trong cache, plugin trả HTML từ file (.html static) hoặc memory store mà không gọi PHP/DB.
- Hosting có LiteSpeed: dùng LiteSpeed Cache plugin (free, native với LSWS, hiệu năng cao nhất).
- Hosting Apache/Nginx: dùng WP Rocket (commercial, $59/year/site) hoặc W3 Total Cache (free).
- VPS tự quản: Nginx FastCGI cache, cấu hình ở server level — hiệu năng cao nhất nhưng cần root access.
Tham khảo page cache warm-up để pre-populate cache cho lần truy cập đầu tiên không bị cold.
2. Opcode cache — PHP OPcache
Mỗi request, PHP đọc file .php, parse syntax, compile thành bytecode rồi execute. Bước parse + compile chiếm 20-40% tổng thời gian execute. OPcache (built-in từ PHP 5.5) cache bytecode trong shared memory — request thứ 2 trở đi đọc thẳng từ cache, bỏ qua parse + compile.
Cấu hình php.ini baseline cho WordPress production:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0 # tắt khi production, file ko đổi
opcache.revalidate_freq=0
Trên môi trường dev (file đổi liên tục), set validate_timestamps=1 với revalidate_freq=2.
3. Object cache — Redis hoặc Memcached
WordPress core làm hàng trăm DB query mỗi request: get options, load user, query posts, render menu. WP_Object_Cache mặc định cache trong-request (hết khi response trả về). Khi có persistent object cache (Redis/Memcached) thì cache tồn tại giữa các request — query DB chỉ chạy lần đầu, lần sau lấy từ in-memory store.
- Redis: ổn định, hỗ trợ persistence (lưu disk khi restart), data structure phong phú. Dùng plugin “Redis Object Cache” hoặc “WP Redis”.
- Memcached: đơn giản hơn, chỉ key-value flat. Plugin “Memcached Object Cache”.
Đo impact: site có 200 query/request giảm xuống 5-15 query khi Redis hot. DB load giảm rõ rệt khi traffic spike — vốn là điểm yếu của shared hosting. Liên quan: TTFB là gì và cách cải thiện.
4. Fragment cache — WP Transient API
Fragment cache lưu một phần template (vd “danh sách 5 bài mới nhất” trong sidebar) thay vì toàn bộ HTML page. Dùng khi page có phần dynamic (login user, cart count) không cache được full, nhưng phần khác (sidebar, footer) cache được riêng.
// pseudo-code
$cached = get_transient('homepage_recent_posts');
if (!$cached) {
$cached = render_recent_posts(); // expensive query
set_transient('homepage_recent_posts', $cached, HOUR_IN_SECONDS);
}
echo $cached;
Transient lưu trong wp_options table mặc định, hoặc Redis/Memcached nếu có persistent object cache.
Request flow khi cache hit và miss
Đo cache hit qua HTTP header response:
X-LiteSpeed-Cache: hit— LiteSpeed page cache HIT.X-Cache-Status: HIT— Nginx FastCGI cache HIT.x-rocket-cache: HIT— WP Rocket HIT.CF-Cache-Status: HIT— Cloudflare CDN HIT (edge cache, không phải server).
Curl test: curl -I https://example.com/ | grep -i cache.
Cấu hình baseline cho WordPress trên LiteSpeed + Redis
- Cài LiteSpeed Cache plugin.
LiteSpeed Cache → Cache → bật Enable Cache. TTL 86400s (24h). - Bật ESI (Edge Side Includes) cho phần dynamic — login, cart icon — cache phần còn lại đầy đủ.
- Cài Redis Object Cache plugin (hoặc tương đương). Cấu hình
wp-config.php:define('WP_REDIS_HOST', '127.0.0.1');+define('WP_CACHE', true);. - Bật OPcache trong php.ini với cấu hình ở §2 trên.
- Exclude URL không cache:
/cart/,/checkout/,/my-account/,/wp-admin/, URL có query?nocache=1. - Auto-purge khi update bài — plugin tự lo qua hook
save_post.
Sai lầm thường gặp khi triển khai
- Cache trang đã login. Nếu cache cả khi user login thì user A có thể thấy nội dung user B (privacy leak nghiêm trọng). Plugin tốt mặc định bypass cache khi có
wp_logged_incookie. - Cache trang động không nên cache. Search result (URL
/?s=...), filter sản phẩm (?filter_color=red), cart, checkout — không cache. - TTL quá dài cho content thay đổi liên tục. News site mà set TTL 7 ngày → bài mới publish 5 phút sau user vẫn thấy bản cũ vì cache chưa hết hạn (trừ khi auto-purge work).
- Conflict giữa nhiều plugin cache. WP Rocket + W3 Total Cache cùng bật → cache file ghi đè nhau, đôi khi serve broken HTML. Chỉ chạy 1 page cache plugin.
- Quên flush cache khi deploy. CSS/JS hash đổi mà cache HTML giữ link cũ → user load không thấy style mới. CI/CD pipeline cần step
wp cache flushsau deploy. - Object cache không bật persistent. Cài Redis nhưng quên thêm
WP_CACHE=truetrong wp-config → object cache vẫn in-memory request scope, không persistent. Verify quawp redis status(WP-CLI).
So sánh server cache vs CDN cache
- Server cache nằm ở origin (server hosting WordPress). Phục vụ user trực tiếp khi không có CDN.
- CDN cache (Cloudflare, Fastly, BunnyCDN) nằm ở edge node gần user. Cache asset (CSS/JS/image) mặc định free, cache HTML cần config thêm (Cloudflare APO, Cache Rules).
Stack tối ưu: CDN cache asset + Server cache HTML + Object cache DB. Liên quan: cách tối ưu PageSpeed cho website chi phí thấp, Technical SEO.
Câu hỏi thường gặp về server cache
Site nhỏ dưới 100 visit/ngày có cần server cache không?
Có. Cache không chỉ giảm load server (vốn không phải vấn đề khi traffic thấp) mà chủ yếu giảm TTFB cho user — ảnh hưởng trực tiếp tới Core Web Vitals và xếp hạng SEO. WordPress mặc định không cache, page render mất 600-1500ms trên hosting shared. Bật page cache miễn phí (LiteSpeed Cache) là baseline.
Object cache Redis có cần khi đã có page cache?
Cần khi có URL không cache được (cart, account, search). Page cache miss thì PHP+DB chạy đầy đủ — Redis lúc này giúp giảm DB query. Site e-commerce có nhiều page dynamic thì impact của Redis càng rõ.
Cache thế nào với multilingual (Polylang/WPML)?
Plugin cache hỗ trợ vary by language — cache riêng /en/ và /vi/ và /fr/ độc lập. Verify bằng cách check URL cache file: /cache/example.com/vi/page-name/ và /cache/example.com/en/page-name/ phải tồn tại riêng.
Có cần manual purge cache khi update theme/plugin?
Có. Code đổi nhưng HTML cache cũ vẫn serve nội dung dùng template cũ → user thấy outdated. Sau mọi update theme/plugin, vào plugin cache → bấm Purge All. Hoặc qua WP-CLI: wp cache flush.
Cache có ảnh hưởng tới Google Search Console không?
Không trực tiếp. Googlebot crawl URL như user thường — nếu cache phục vụ HTML đúng thì index không khác biệt. Vấn đề phát sinh khi cache phục vụ HTML lỗi (vd missing canonical, sai hreflang) → cần verify bằng Google Search Console URL Inspection để xem snapshot Google nhận. Tham khảo canonical tag.
Khi audit performance hoặc setup server cache đầy đủ cho WordPress production, tham khảo dịch vụ tối ưu hiệu năng của Web22 hoặc bảng giá dịch vụ.


