Bạn có biết?
Bạn cần kiểm tra nhanh "username này đã follow mình chưa"? Hay lọc ra những tag chung giữa 2 bài viết? Với List hay Hash, bạn phải duyệt toàn bộ dữ liệu — chậm và tốn tài nguyên. Redis Sets giải quyết những bài toán này trong chớp mắt, chỉ với một lệnh duy nhất.
Giống như một hộp kẹo không bao giờ có hai viên trùng màu, Set trong Redis là một tập hợp các phần tử duy nhất, không có thứ tự. Nếu bạn cố thêm một phần tử đã tồn tại, Redis sẽ im lặng bỏ qua — không báo lỗi, không tạo bản sao.
Sets trong Redis là gì?
Set là một cấu trúc dữ liệu lưu trữ tập hợp các string duy nhất (không trùng lặp), không sắp xếp theo thứ tự. Mỗi phần tử chỉ xuất hiện đúng một lần, và thao tác kiểm tra thành viên (membership check) có độ phức tạp O(1) — tức là nhanh không đổi dù Set có 10 phần tử hay 10 triệu phần tử.
Điểm mạnh lớn nhất của Set là hỗ trợ các phép toán tập hợp ngay phía server: giao (intersection), hợp (union), hiệu (difference). Thay vì kéo toàn bộ dữ liệu về ứng dụng để xử lý, bạn để Redis tính toán và chỉ nhận kết quả cuối cùng.
- Duy nhất (unique) — mỗi phần tử chỉ tồn tại một lần, tự động chống trùng lặp
- Không có thứ tự (unordered) — thứ tự thêm vào không được đảm bảo khi đọc ra
- O(1) membership check — kiểm tra tồn tại cực nhanh với
SISMEMBER - Tối đa 2^32 - 1 phần tử (hơn 4 tỷ) — thoải mái cho hầu hết use case
- Phép toán tập hợp mạnh mẽ — SINTER, SUNION, SDIFF chạy ngay trên server
Làm quen với các lệnh Sets cơ bản
Hãy tưởng tượng bạn đang xây dựng tính năng bookmark bài viết cho người dùng. Mỗi user có một Set riêng chứa ID các bài đã lưu:
| Lệnh | Chức năng | Độ phức tạp |
|---|---|---|
| SADD key member [member...] | Thêm một hoặc nhiều phần tử | O(1) mỗi phần tử |
| SMEMBERS key | Lấy toàn bộ phần tử (cẩn thận với Set lớn) | O(N) |
| SISMEMBER key member | Kiểm tra phần tử có tồn tại không | O(1) |
| SCARD key | Đếm số lượng phần tử | O(1) |
| SREM key member [member...] | Xóa một hoặc nhiều phần tử | O(1) mỗi phần tử |
0 bình luận
Đang tải bình luận...
Để lại bình luận