Cách cài Redis trên VPS Linux chi tiết 2026

SSH vào VPS Linux mới, việc đầu tiên sau khi cài Nginx và PHP-FPM thường là cài Redis. Nó là cache cho PHP session, hàng đợi queue cho Laravel, hay đơn giản là bộ nhớ đệm cho database. Bài này mình sẽ hướng dẫn cách cài Redis trên VPS Linux từ lúc SSH vào đến lúc ứng dụng của bạn kết nối được, kèm cả phần bảo mật và tối ưu. Môi trường áp dụng: Ubuntu 24.04 LTS hoặc Debian 12, user có quyền sudo.
Nếu bạn chưa có VPS, có thể thuê VPS Linux tại thueVPS với full root, sau đó tự tay cài đặt mọi thứ. Với máy 2GB RAM, Redis chiếm rất ít bộ nhớ nếu biết cách cấu hình, nên không cần lo.
Tóm tắt nhanh
- Cài Redis trên Ubuntu 24.04 / Debian 12 bằng lệnh
apt install redis-server, sau đó bật systemd và kiểm tra bằngredis-cli ping. - Khoá Redis bằng mật khẩu trong
/etc/redis/redis.conf(tham sốrequirepass), vì mặc định Redis không có xác thực. - Redis chỉ nên listen trên
127.0.0.1trừ khi bạn thực sự cần truy cập từ máy khác, lúc đó phải bật firewall và bind IP đúng. - Với VPS RAM 1-2GB, đặt
maxmemorykhoảng 60-70% RAM và dùng policyallkeys-lruđể tránh OOM.
Yêu cầu trước khi bắt đầu
- VPS chạy Ubuntu 24.04 LTS hoặc Debian 12, user có quyền
sudo. - Đã cập nhật hệ thống:
sudo apt update && sudo apt upgrade -y. - Biết dùng SSH cơ bản và lệnh kiểm tra trạng thái service bằng systemd.
Vì sao nên dùng Redis làm cache trên VPS?
Redis là in-memory data store, nghĩa là dữ liệu nằm trên RAM nên tốc độ đọc ghi tính bằng micro giây, nhanh hơn MySQL hoặc PostgreSQL rất nhiều. Khi website của bạn có những câu query nặng lặp đi lặp lại, thay vì đánh vào database mỗi lần, bạn cache kết quả vào Redis. Kết quả là giảm tải đáng kể cho CPU và ổ cứng, trang web phản hồi nhanh hơn.
Với VPS 2GB RAM, Redis chiếm rất ít bộ nhớ nếu cấu hình đúng, khoảng 50-100MB cho một website WordPress trung bình. Nó cũng là thành phần bắt buộc nếu bạn dùng Laravel queue, hoặc dùng object cache cho WordPress thay cho việc query database liên tục.
Một điểm mạnh nữa là Redis hỗ trợ persistence, nghĩa là có thể lưu dữ liệu xuống ổ cứng (RDB snapshot hoặc AOF log). Không như Memcached, Redis giữ được dữ liệu sau khi restart server.
Bước 1 - Cài đặt Redis trên Ubuntu 24.04 / Debian 12
Cài Redis từ kho lưu trữ chính thức của Ubuntu hoặc Debian, không cần thêm PPA. Phiên bản Redis trong Ubuntu 24.04 là 7.0.x, trong khi Debian 12 là 7.0.x, đều là bản hỗ trợ lâu dài, rất ổn định cho production.
sudo apt update
sudo apt install redis-server -y
Sau khi cài xong, Redis tự động chạy như một systemd service. Kiểm tra trạng thái:
sudo systemctl status redis-server
Kết quả mong đợi: dòng Active: active (running). Nếu chưa chạy, khởi động thủ công:
sudo systemctl enable --now redis-server
Kiểm tra kết nối bằng redis-cli:
redis-cli ping
Kết quả trả về PONG nghĩa là Redis đã hoạt động. Lưu ý trên Debian, service có thể tên là redis-server dù package là redis-server hay redis, kiểm tra bằng systemctl list-units | grep redis nếu không chắc.
Bước 2 - Cấu hình Redis an toàn
Mặc định, Redis chỉ listen trên 127.0.0.1, nghĩa là chỉ máy chủ local truy cập được. Điều này an toàn, nhưng nhiều người vẫn cài xong không đặt mật khẩu. Nếu bạn bind Redis ra IP công cộng mà không có password, bất kỳ ai cũng có thể ghi dữ liệu vào, hoặc tệ hơn là chiếm quyền qua SSH key injection (đã có exploit thực tế).
Sửa file cấu hình chính:
sudo nano /etc/redis/redis.conf
Thiết lập mật khẩu bằng cách tìm dòng # requirepass foobared, bỏ comment và đặt mật khẩu mạnh:
requirepass matkhau_rat_manh_2026
Nếu bạn chỉ dùng Redis local cho ứng dụng trên cùng VPS, không cần đổi bind. Nó giữ nguyên bind 127.0.0.1 -::1. Nếu cần truy cập từ máy khác, đổi bind thành IP riêng của VPS, nhưng lúc đó bắt buộc mở firewall đúng port 6379 và chỉ cho IP tin cậy.
Lưu file và khởi động lại Redis:
sudo systemctl restart redis-server
Kiểm tra lại, lần này phải có mật khẩu:
redis-cli ping
Kết quả sẽ là (error) NOAUTH Authentication required. Đăng nhập bằng:
redis-cli -a 'matkhau_rat_manh_2026' ping
Kết quả PONG. Lưu ý cảnh báo Warning: Using a password with '-a' là bình thường, mật khẩu lộ trên command history nên nếu muốn an toàn hơn dùng biến môi trường REDISCLI_AUTH:
export REDISCLI_AUTH='matkhau_rat_manh_2026'
redis-cli ping
Cấu hình persistent data
Redis lưu snapshot xuống ổ cứng theo chu kỳ. Mặc định cấu hình RDB đã bật với các mốc như save 3600 1 (sau 3600 giây nếu có ít nhất 1 key thay đổi). Trong file config, kiểm tra các dòng:
save 3600 1
save 300 100
save 60 10000
Nếu bạn chỉ dùng Redis làm cache thuần túy, có thể tắt persistence để tránh ghi ổ cứng mỗi giây. Thêm dòng save "" để tắt RDB. Nhưng nếu dùng Redis làm hàng đợi, mình vẫn khuyên giữ RDB, chỉnh tần suất dài hơn để giảm I/O.
Bước 3 - Tối ưu Redis cho VPS RAM thấp
Đây là bước dễ bỏ qua nhất nhưng quan trọng nhất với VPS 1-2GB. Redis mặc định không giới hạn bộ nhớ, nó sẽ dùng đến bao nhiêu RAM khả dụng. Trên VPS nhỏ, điều này có thể làm OOM (Out Of Memory) và systemd sẽ kill Redis, hoặc tệ hơn là kill cả Nginx lẫn PHP-FPM.
Trong /etc/redis/redis.conf, tìm dòng # maxmemory <bytes> và đặt giá trị phù hợp:
maxmemory 512mb
Với VPS 2GB RAM, đặt 512MB là an toàn. Với VPS 1GB, đặt 256MB. Nguyên tắc là hiếm khi vượt quá 60-70% RAM khả dụng, vì PHP-FPM và Nginx cũng cần RAM.
Tiếp theo, đặt policy xử lý khi hết bộ nhớ. Policy mặc định noeviction sẽ từ chối ghi dữ liệu mới, gây lỗi ứng dụng. Đổi thành allkeys-lru để Redis tự động xóa các key ít dùng nhất:
maxmemory-policy allkeys-lru
Khởi động lại Redis và kiểm tra bộ nhớ đã dùng:
sudo systemctl restart redis-server
redis-cli -a 'matkhau_rat_manh_2026' INFO memory | grep used_memory_human
Kết quả dạng used_memory_human:1.2M tức là Redis mới khởi động dùng rất ít RAM. Sau khi có traffic, con số này tăng lên nhưng sẽ không vượt qua maxmemory.
Bước 4 - Kết nối ứng dụng với Redis
Sau khi cài và cấu hình xong, việc còn lại là trỏ ứng dụng vào Redis. Tùy ngôn ngữ và framework mà có các tham số khác nhau, nhưng nguyên tắc chung là địa chỉ 127.0.0.1, port 6379, và mật khẩu bạn vừa đặt.
Với WordPress, nếu dùng plugin Redis Object Cache, thêm vào wp-config.php:
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', 'matkhau_rat_manh_2026' );
define( 'WP_REDIS_DATABASE', 0 );
Với Laravel, cấu hình trong file .env:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=matkhau_rat_manh_2026
REDIS_PORT=6379
Với Node.js dùng thư viện ioredis:
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'matkhau_rat_manh_2026',
});
Sau khi cấu hình, kiểm tra ứng dụng có lỗi kết nối không. Cách nhanh nhất là xem log của ứng dụng, hoặc dùng lệnh redis-cli MONITOR để xem các lệnh đang được gửi tới Redis (nhớ đóng ngay khi xem xong vì nó in rất nhiều).
Nếu ứng dụng chạy trong Docker container, lưu ý container phải dùng network mode host hoặc trỏ đến IP của VPS thay vì 127.0.0.1, vì mỗi container có localhost riêng. Trường hợp này bạn nên bind Redis ra IP riêng hoặc dùng Docker network nội bộ.
Xử lý lỗi thường gặp khi cài Redis
Lỗi 1: Cannot assign requested address
Lỗi này xảy ra khi bind Redis vào một IP không tồn tại trên máy. Kiểm tra IP hiện tại bằng ip addr show, so với giá trị bind trong config. Nếu bạn chỉ dùng Redis local, cứ để bind 127.0.0.1 -::1, đừng đổi sang IP công cộng nếu không cần.
Lỗi 2: NOAUTH Authentication required
Ứng dụng hoặc redis-cli chưa gửi mật khẩu. Kiểm tra lại cấu hình ở ứng dụng, hoặc dùng redis-cli -a 'mật_khẩu'. Nếu bạn mới đổi password mà ứng dụng vẫn báo lỗi, có thể chưa restart Redis hoặc ứng dụng còn giữ kết nối cũ.
Lỗi 3: OOM command not allowed when used memory > 'maxmemory'
Redis đã đầy bộ nhớ và policy noeviction chặn ghi. Kiểm tra maxmemory và maxmemory-policy trong config. Nếu đã đặt allkeys-lru mà vẫn lỗi, có thể bạn chưa restart Redis sau khi sửa config. Bạn cũng cần xem tại sao dữ liệu lớn bất thường, có thể do ứng dụng lưu key không có TTL.
sudo journalctl -u redis-server -n 50
Lệnh trên xem log Redis gần nhất, thường ghi rõ nguyên nhân lỗi kèm dòng config nào gây ra.
Bảo mật Redis thêm với fail2ban
Nếu bạn bind Redis ra ngoài, nên cài fail2ban để chặn brute force. Nếu chỉ dùng local, bước này không bắt buộc. Với những ai muốn chủ động bảo vệ máy chủ, tham khảo thêm bài cấu hình fail2ban bảo vệ nhiều dịch vụ. Ngoài ra, bạn có thể kiểm tra toàn diện lỗ hổng bằng Lynis để biết máy chủ đang ở mức an toàn nào.
Một mẹo nhỏ: đổi port Redis mặc định 6379 sang port khác nếu bạn buộc phải bind ra ngoài. Nó không phải là biện pháp bảo mật thực sự, nhưng giảm được lượng scan tự động từ bot.
Câu hỏi thường gặp
Redis trên VPS Linux dùng bao nhiêu RAM?
Redis mới khởi động chỉ dùng khoảng 1-3MB RAM. Khi có dữ liệu, RAM tăng theo số lượng key. Bạn kiểm soát bằng tham số maxmemory trong /etc/redis/redis.conf, khuyến nghị đặt 50-60% RAM khả dụng của VPS.
Có cần đặt mật khẩu cho Redis không?
Có, luôn đặt password bằng tham số requirepass trong file cấu hình, kể cả khi chỉ bind 127.0.0.1. Phòng khi ứng dụng hoặc container của bạn vô tình bị lỗi cấu hình bind ra ngoài, dữ liệu vẫn được bảo vệ.
Redis khác Memcached ở điểm nào?
Redis hỗ trợ nhiều kiểu dữ liệu (string, hash, list, set, sorted set), có persistence lưu xuống ổ cứng, và hỗ trợ Lua script. Memcached đơn giản hơn, chỉ lưu key-value, không có persistence. Với hầu hết ứng dụng web hiện nay, Redis là lựa chọn tốt hơn.
Vì sao Redis bị kill và cách xử lý?
Nguyên nhân phổ biến nhất là thiếu RAM, kernel OOM killer chọn process Redis để kill. Cách xử lý: đặt maxmemory thấp hơn, kiểm tra các process khác đang chiếm bao nhiêu RAM bằng free -h, và xem log dmesg | grep -i oom.
Nên tắt persistence của Redis khi chỉ dùng làm cache không?
Nếu dữ liệu trong Redis là cache thuần túy và có thể xây dựng lại từ database, bạn có thể tắt RDB bằng save "" để giảm ghi ổ cứng. Nếu dùng Redis làm queue hoặc lưu dữ liệu quan trọng, giữ RDB.
Bài viết liên quan
- Cách cài Docker trên VPS Ubuntu chi tiết từ A-Z
- Cài đặt và tối ưu MariaDB trên VPS Ubuntu 24.04
- Giám sát VPS với Prometheus và Grafana tự host


