TCP Protocol
Tổng quan
Distributed cache sử dụng protocol TCP dựa trên text đơn giản, tương tự Redis. Các lệnh được gửi dưới dạng chuỗi với delimiter \r\n.
Client ─── SET key value\r\n ───→ Server
Client ←── OK\r\n ────────────── ServerCác lệnh
| Lệnh | Cú pháp | Response | Mô tả |
|---|---|---|---|
| SET | SET key value [ttl] | OK | Lưu key-value pair |
| GET | GET key | VALUE data hoặc NULL | Lấy value |
| DEL | DEL key | OK hoặc NULL | Xóa key |
| PING | PING | PONG | Kiểm tra sức khỏe |
| REPLICATE | REPLICATE key value | OK | Sao chép dữ liệu sang node |
| ELECT | ELECT nodeId | OK | Leader election |
Wire Format
# Định dạng request
COMMAND key value ttl\r\n
# Định dạng response
STATUS data\r\nVí dụ
# Lưu giá trị
SET user:123 {"name":"John","email":"john@example.com"}\r\n
→ OK\r\n
# Lấy giá trị
GET user:123\r\n
→ VALUE {"name":"John","email":"john@example.com"}\r\n
# Xóa key
DEL user:123\r\n
→ OK\r\n
# Kiểm tra sức khỏe
PING\r\n
→ PONG\r\nXử lý lỗi
# Lệnh không xác định
INVALID_CMD\r\n
→ ERR Unknown command\r\n
# Key không tồn tại
GET nonexistent\r\n
→ NULL\r\nSử dụng với CacheClient
typescript
import { CacheClient } from "distributed-cache";
const client = new CacheClient({
host: "127.0.0.1",
port: 3000,
retryAttempts: 3,
retryDelay: 1000,
timeout: 5000,
});
await client.connect();
// SET
await client.set("user:123", { name: "John" });
await client.set("temp:data", "value", 5000); // với TTL
// GET
const user = await client.get("user:123");
console.log(user); // { name: "John" }
// DELETE
const deleted = await client.del("user:123");
console.log(deleted); // true
// PING
const alive = await client.ping();
console.log(alive); // true
await client.disconnect();Cấu hình Client
| Tuỳ chọn | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
| host | string | "127.0.0.1" | Hostname server |
| port | number | 3000 | Port server |
| retryAttempts | number | 3 | Số lần thử lại khi lỗi |
| retryDelay | number | 1000 | Delay giữa các lần thử (ms) |
| timeout | number | 5000 | Timeout request (ms) |