Redis giữ dữ liệu trong bộ nhớ và trả lời trong khoảng một mili giây, vì vậy nó đứng sau rất nhiều ứng dụng với vai trò bộ nhớ đệm, hàng đợi hay kho phiên. Cài đặt chỉ là một lệnh. Công việc thật nằm ở các giá trị mặc định: không giới hạn bộ nhớ, ảnh chụp có thể mất các lần ghi gần nhất, và hai lỗi dễ mắc có thể âm thầm xóa dữ liệu hoặc tắt mật khẩu của bạn. Hướng dẫn này đi qua tất cả trên Ubuntu 24.04. Chúng tôi đã chạy từng bước trên image của mình; các con số lấy từ một máy chủ Micro (2 vCPU, 2 GB).
Bạn cần một người dùng có sudo. Hướng dẫn thiết lập Ubuntu sẽ tạo một người.
1. Cài đặt
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
Quá trình cài mất 13 giây và cho chúng tôi Redis 7.0.15. Nó khởi động ngay và mỗi lần bật máy, trả lời PONG và chỉ lắng nghe trên chính máy chủ: 127.0.0.1:6379 và [::1]:6379, với protected-mode yes. Khi chưa có dữ liệu, nó dùng 13,5 MB RAM.
Nhật ký đã có sẵn một cảnh báo:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis lưu xuống đĩa từ một bản sao của chính nó được tạo bằng fork, và với thiết lập mặc định của nhân, fork này có thể thất bại khi bộ nhớ eo hẹp. Sửa một lần:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
Sau khi khởi động lại, cảnh báo biến mất.
2. Giới hạn bộ nhớ
Mặc định maxmemory là 0, tức không giới hạn, và chính sách là noeviction. Redis sẽ lấy RAM cho đến khi máy chủ hết. Đặt mức trần và quyết định chuyện gì xảy ra khi chạm tới:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Chúng tôi thử cả hai chính sách với giới hạn 64 MB và 400.000 lần ghi:
noeviction(mặc định): bộ nhớ dừng ở 63 MB và các lần ghi mới thất bại vớiOOM command not allowed when used memory > 'maxmemory'. Phù hợp cho hàng đợi hoặc bất cứ thứ gì bạn không thể mất.allkeys-lru: Redis loại bỏ các khóa lâu nhất chưa được dùng, tổng cộng 48.606 khóa, và mọi lần ghi đều thành công. Phù hợp cho bộ nhớ đệm.
CONFIG REWRITE lưu các thiết lập đang chạy vào /etc/redis/redis.conf để chúng còn sau khi khởi động lại. Nó còn thêm một dòng bạn cần biết trước bước 4.
3. Chọn cách lưu xuống đĩa
Mặc định, Redis ghi ảnh chụp (/var/lib/redis/dump.rdb) sau 1 thay đổi trong một giờ, 100 trong năm phút hoặc 10.000 trong một phút. Chúng tôi thử ba cách dừng nó:
| Redis dừng thế nào | Chỉ ảnh chụp (mặc định) | Có tệp AOF |
|---|---|---|
systemctl restart | Không mất gì: lưu khi tắt | Không mất gì |
Bị giết bằng kill -9 | Khóa ghi sau ảnh chụp cuối đã mất | Khóa ghi 2 giây trước vẫn còn |
Cả hai lần, systemd đều tự khởi động lại Redis trong vài giây.
Nếu Redis giữ dữ liệu bạn sẽ tiếc khi mất, hãy bật tệp AOF (append-only file). Nó ghi lại mọi thao tác ghi và đẩy xuống đĩa mỗi giây một lần. Hãy làm trên máy chủ đang chạy, đừng sửa tệp:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Lúc đầu chúng tôi thử cách kia, và mất dữ liệu. Chúng tôi đổi appendonly no thành appendonly yes trong redis.conf rồi khởi động lại. Redis lên với một AOF rỗng và không tải gì từ ảnh chụp, nên mọi khóa có sẵn đều biến mất. Đến lần tắt sau, nó còn ghi nội dung mới, không có các khóa cũ, đè lên dump.rdb. CONFIG SET tránh được điều này: Redis ghi AOF trước từ dữ liệu trong bộ nhớ. Sau khi khởi động lại, mọi khóa của chúng tôi vẫn còn.
Nếu Redis chỉ là bộ nhớ đệm có thể khởi động trống, hãy làm ngược lại và tắt việc lưu bằng redis-cli CONFIG SET save "".
4. Đặt mật khẩu
Đây là cái bẫy thứ hai. Sau bất kỳ CONFIG REWRITE nào, Redis 7 thêm dòng này vào cuối redis.conf:
user default on nopass ~* &* +@all
Nó có nghĩa là "người dùng mặc định không cần mật khẩu". Sau đó chúng tôi thêm requirepass ở phía trên trong tệp rồi khởi động lại. Redis vẫn trả lời PONG mà không cần mật khẩu, vì dòng user được ưu tiên. Hãy đặt mật khẩu qua chính Redis:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Lưu mật khẩu ở nơi an toàn. Giờ Redis giữ nó dưới dạng hàm băm SHA-256 trong cùng dòng user default. Sau khi khởi động lại, redis-cli ping trả về NOAUTH Authentication required. và chỉ mật khẩu mới dùng được. Truyền nó cho redis-cli qua biến REDISCLI_AUTH. Với -a, nó hiện trong danh sách tiến trình và redis-cli sẽ cảnh báo. Trong ứng dụng, hãy đặt nó vào địa chỉ Redis: redis://:PASSWORD@127.0.0.1:6379/0.
5. Truy cập từ máy tính của bạn
Để Redis ở 127.0.0.1 và dùng đường hầm SSH. Dùng cổng SSH của máy chủ, trên các gói NAT đó là cổng riêng của bạn:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Khi đường hầm đang chạy, redis-cli -p 6380 và các công cụ trên máy tính của bạn nói chuyện với Redis trên máy chủ. Không có gì mới được mở ra internet. Với hướng dẫn khóa SSH, đường hầm đăng nhập không cần mật khẩu.
Nhanh đến mức nào
Trên máy chủ thử nghiệm Micro, redis-benchmark với 50 client cho kết quả:
| Bài thử | Yêu cầu mỗi giây | Độ trễ trung vị |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 lệnh mỗi lượt đi về | 272.109 | 2,4 ms |
| GET, 16 lệnh mỗi lượt đi về | 414.938 | 1,3 ms |
Với bộ nhớ đệm hay hàng đợi công việc của một ứng dụng web, như vậy là dư rất nhiều. Tốc độ thêm đến từ việc gửi lệnh theo lô (pipelining).
Chọn gói nào
Redis cần RAM cho dữ liệu của bạn và gần như không cần gì khác. Nano (2 vCPU, 1 GB, $3/tháng) chạy Redis cạnh một ứng dụng nhỏ với maxmemory 256mb. Micro (2 GB, $5/tháng) để chỗ cho bộ nhớ đệm lớn hơn cùng ứng dụng. Nếu thứ khác cần kết nối thẳng vào Redis, hãy dùng IPv4 riêng (từ Nano-IP giá $8/tháng) và chỉ cho phép địa chỉ đó trong tường lửa. Tất cả các gói có trên trang VPS, thanh toán bằng USDT, USDC hoặc ETH trên mạng Base, Ethereum hoặc Polygon.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.