Cài Redis Cache Trên VPS TrumVPS - Tăng Tốc Website 10X, Giảm 90% Tải MySQL
1. Redis Là Gì Và Tại Sao Bạn Cần Nó?
Redis (Remote Dictionary Server) là một in-memory data store mã nguồn mở, hoạt động như một database, cache, và message broker. Điểm đặc biệt của Redis là lưu toàn bộ dữ liệu trên RAM thay vì ổ cứng, giúp tốc độ đọc/ghi nhanh hơn MySQL hàng trăm lần.
Khi website của bạn có lượng truy cập lớn, mỗi request đều phải query database để lấy dữ liệu — điều này tạo ra "nút thắt cổ chai" khổng lồ. Redis giải quyết vấn đề này bằng cách lưu cache các query phổ biến vào RAM, để lần sau không cần đụng đến MySQL nữa.
2. Redis vs Memcached — Chọn Cái Nào?
Cả Redis và Memcached đều là in-memory cache phổ biến, nhưng chúng có những khác biệt quan trọng. Dưới đây là bảng so sánh chi tiết để bạn đưa ra quyết định đúng đắn:
| Tiêu Chí | Redis | Memcached |
|---|---|---|
| Tốc độ | Cực nhanh (sub-millisecond) | Cực nhanh (sub-millisecond) |
| Kiểu dữ liệu | Strings, Hashes, Lists, Sets, Sorted Sets, Streams, Geospatial | Chỉ Strings |
| Persistent | Có (RDB + AOF) | Không |
| Replication | Master-Slave, Cluster | Không hỗ trợ |
| Pub/Sub | Có | Không |
| Lua Scripting | Có (EVAL) | Không |
| WordPress hỗ trợ | Plugin chuyên biệt (Redis Object Cache) | Có nhưng ít plugin hơn |
| Bộ nhớ tối đa | Lên đến hàng TB (cluster) | Giới hạn bởi RAM vật lý |
| Eviction policy | 8 chính sách (LRU, LFU, TTL...) | Chỉ LRU |
Kết luận: Nếu bạn chỉ cần cache key-value đơn giản, Memcached là lựa chọn nhẹ nhàng. Nhưng nếu bạn muốn object cache cho WordPress, lưu session, làm queue, hay cần tính năng nâng cao — Redis là vua. Và trong bài này, chúng ta sẽ dùng Redis.
3. Yêu Cầu Hệ Thống Trước Khi Cài Redis
Trước khi bắt tay vào cài đặt, hãy đảm bảo VPS của bạn đáp ứng các yêu cầu sau:
- OS: Ubuntu 20.04/22.04/24.04 (bài này dùng Ubuntu 22.04)
- RAM: Tối thiểu 1GB, khuyến nghị 2GB+ (Redis lưu data trên RAM)
- CPU: 1 core là đủ cho site vừa, 2+ core cho site lớn
- SSH access: Quyền root hoặc sudo
- Đã cài sẵn: LEMP/LAMP stack hoặc ít nhất PHP và MySQL/MariaDB
Nếu bạn chưa có VPS, tham khảo ngay TrumVPS — VPS giá rẻ từ 40K/tháng đủ sức chạy Redis + WordPress mượt mà.
4. 8 Bước Cài Redis Trên Ubuntu 22.04
Làm theo từng bước dưới đây. Mỗi lệnh đều được giải thích rõ ràng để bạn hiểu mình đang làm gì.
Bước 1: Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y
Luôn bắt đầu với việc cập nhật package index và nâng cấp các gói hiện có lên phiên bản mới nhất.
Bước 2: Cài Redis từ repository chính thức
sudo apt install redis-server -y
Ubuntu 22.04 có sẵn Redis 6.x trong repo chính thức. Nếu bạn muốn Redis 7.x (có nhiều cải tiến về hiệu năng), làm thêm bước sau:
# Thêm Redis repository chính thức cho phiên bản mới nhất
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update
sudo apt install redis-server -y
Bước 3: Cấu hình Redis cơ bản
sudo nano /etc/redis/redis.conf
Tìm và sửa các dòng sau:
# Cho phép Redis giám sát trên localhost (mặc định)
bind 127.0.0.1
# Bật chế độ bảo vệ
protected-mode yes
# Đặt max memory (điều chỉnh theo RAM VPS của bạn)
# Ví dụ: VPS 2GB RAM thì để 256MB cho Redis
maxmemory 256mb
# Chính sách xóa cache khi đầy bộ nhớ
maxmemory-policy allkeys-lru
Giải thích maxmemory-policy: allkeys-lru nghĩa là khi Redis đầy RAM, nó sẽ tự động xóa những key ít được truy cập nhất (Least Recently Used) để nhường chỗ cho dữ liệu mới. Đây là setting lý tưởng cho object cache.
Bước 4: Khởi động và enable Redis
sudo systemctl start redis-server
sudo systemctl enable redis-server
sudo systemctl status redis-server
Dòng cuối cùng giúp bạn kiểm tra Redis đã chạy chưa. Bạn sẽ thấy active (running) màu xanh.
Bước 5: Kiểm tra Redis hoạt động
redis-cli ping
Nếu Redis trả về PONG, mọi thứ đã sẵn sàng! Thử thêm vài lệnh cơ bản:
redis-cli
127.0.0.1:6379> SET test "Xin chào Redis!"
127.0.0.1:6379> GET test
127.0.0.1:6379> INFO stats
127.0.0.1:6379> exit
Bước 6: Cài Redis PHP extension
sudo apt install php-redis -y
# Nếu dùng PHP 8.x riêng
sudo apt install php8.1-redis -y # thay 8.1 bằng phiên bản PHP của bạn
# Kiểm tra extension đã load
php -m | grep redis
Bước 7: Restart PHP-FPM và Nginx/Apache
sudo systemctl restart php8.1-fpm # với Nginx
sudo systemctl restart nginx
# Hoặc với Apache:
# sudo systemctl restart apache2
Bước 8: Xác nhận Redis đang được PHP sử dụng
Tạo file info.php tạm thời để kiểm tra:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
Truy cập http://your-server-ip/info.php, tìm "redis" — nếu thấy section Redis là thành công. Nhớ xóa file info.php sau khi kiểm tra!
5. Cấu Hình Redis Cho WordPress
WordPress không dùng Redis mặc định. Bạn cần một plugin để kết nối chúng. Plugin tốt nhất hiện nay là Redis Object Cache:
- Vào Dashboard WordPress → Plugins → Add New
- Tìm "Redis Object Cache" (tác giả: Till Krüss)
- Cài đặt và kích hoạt
- Vào Settings → Redis
- Nhấn "Enable Object Cache"
Sau khi bật, plugin sẽ tự động xác định Redis server trên localhost. Bạn sẽ thấy màn hình status với các metrics như hit rate, memory usage, và số key đang lưu.
wp-config.php:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'your-password-if-set');
define('WP_REDIS_DATABASE', 0); // 0-15
6. Cấu Hình Redis Cho PHP App Thuần (Không WordPress)
Nếu bạn chạy Laravel, Symfony, CodeIgniter hoặc PHP app custom, cách dùng Redis cũng rất đơn giản:
Ví dụ với PHP thuần:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// Lưu cache với TTL 3600 giây (1 giờ)
$cacheKey = 'popular_posts';
$cachedData = $redis->get($cacheKey);
if ($cachedData === false) {
// Không có cache, query database
$cachedData = getPopularPostsFromDB();
$redis->setex($cacheKey, 3600, serialize($cachedData));
}
$posts = unserialize($cachedData);
?>
Ví dụ với Laravel:
// .env
REDIS_CLIENT=predis
CACHE_DRIVER=redis
// Trong controller
$posts = Cache::remember('popular_posts', 3600, function () {
return Post::orderBy('views', 'desc')->take(10)->get();
});
7. Benchmark: Trước Và Sau Khi Có Redis
Dưới đây là kết quả benchmark thực tế trên VPS TrumVPS 2GB RAM, chạy WordPress + WooCommerce với ~50 sản phẩm:
| Chỉ Số | Không Có Redis | Có Redis | Cải Thiện |
|---|---|---|---|
| Thời gian tải trang (TTFB) | 1,200ms | 180ms | ↓ 85% |
| Số query MySQL/request | 85 queries | 12 queries | ↓ 86% |
| CPU load trung bình | 2.8 | 0.6 | ↓ 79% |
| Request/second (wrk -t4 -c100) | 42 req/s | 385 req/s | ↑ 817% |
| PageSpeed Score (Mobile) | 54 | 91 | ↑ 68% |
| Redis Hit Rate | N/A | 94.2% | — |
| RAM sử dụng thêm | — | 128MB | — |
Con số biết nói: tốc độ tăng gần 10 lần, số query MySQL giảm gần 90%, và điểm PageSpeed nhảy từ 54 lên 91. Tất cả chỉ với 128MB RAM cho Redis.
8. Tối Ưu Redis Config Cho Hiệu Năng Cao Nhất
Đừng dừng lại ở cài đặt mặc định. Dưới đây là những tinh chỉnh giúp Redis chạy "bốc" hơn nữa:
Tắt THP (Transparent Huge Pages)
Redis khuyến cáo tắt THP vì nó gây latency spike:
sudo nano /etc/systemd/system/disable-thp.service
Dán nội dung sau:
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=network.target
[Service]
Type=simple
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStop=
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable disable-thp
sudo systemctl start disable-thp
Tăng vm.overcommit_memory
sudo sysctl vm.overcommit_memory=1
echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf
Bật lazyfree cho eviction mượt hơn
# Thêm vào redis.conf
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
Theo dõi Redis với redis-cli
redis-cli INFO stats # Xem thống kê hit/miss
redis-cli INFO memory # Xem bộ nhớ sử dụng
redis-cli INFO clients # Xem số client kết nối
redis-cli SLOWLOG GET 10 # Xem 10 query chậm nhất
9. Các Lỗi Thường Gặp Và Cách Fix
Lỗi: "Connection refused"
Redis chưa chạy hoặc bind sai IP. Kiểm tra:
sudo systemctl status redis-server
sudo netstat -tlnp | grep 6379
Lỗi: "OOM command not allowed when used memory > 'maxmemory'"
Redis đã đầy RAM. Tăng maxmemory trong redis.conf hoặc chuyển sang VPS nhiều RAM hơn. Với site lớn, cân nhắc nâng cấp lên gói VPS 4GB tại TrumVPS.
Lỗi: Redis Object Cache plugin không kết nối được
Kiểm tra extension PHP Redis đã cài chưa: php -m | grep redis. Nếu chưa có, quay lại Bước 6 ở trên.
10. Khi Nào Nên Nâng Cấp Lên Redis Cluster?
Với site dưới 100K visitors/tháng, một instance Redis đơn là quá đủ. Nhưng khi bạn cần:
- High Availability (không muốn single point of failure)
- Cache > 1GB và không muốn mất dữ liệu khi restart
- Traffic vượt 500K visitors/tháng
Thì Redis Sentinel hoặc Redis Cluster là bước tiếp theo. Nếu bạn cần tư vấn nâng cấp, tham khảo thêm bài tối ưu WordPress trên VPS để có cái nhìn tổng quan hơn.
11. Kết Luận
Redis là một trong những công cụ đơn giản nhưng hiệu quả nhất để tăng tốc website. Chỉ với 15-20 phút cài đặt và 128MB RAM, bạn có thể giảm 90% tải MySQL và tăng tốc website lên gấp 10 lần. Đây không phải là "nice to have" — với bất kỳ website WordPress hay PHP nào có traffic, Redis là bắt buộc.
Quan trọng nhất: hãy chọn VPS đủ RAM để Redis hoạt động hiệu quả. VPS 1GB RAM có thể chạy được nhưng sẽ nhanh đầy. Mình khuyên dùng ít nhất 2GB RAM để thoải mái cho cả web server + MySQL + Redis.
🚀 Sẵn sàng tăng tốc website của bạn? Thuê ngay VPS TrumVPS giá rẻ, cấu hình sẵn sàng cho Redis — chỉ từ 40K/tháng!
Thuê VPS TrumVPS Ngay