Cấu trúc & Cấu hình Redis
Data Explorer sử dụng Redis làm lớp trung gian hiệu năng cao cho caching, hàng đợi (queues) và giới hạn lưu lượng (rate limiting).
Global Caching
Lưu trữ kết quả schema introspection và metadata để giảm tải cho database nguồn.
BullMQ Queues
Xử lý các workflow nền có hàng đợi, hiện thấy rõ nhất ở migration và các tác vụ async không nên chặn request chính.
Rate Limiting
Sử dụng ThrottlerStorageRedis để đồng bộ giới hạn API request trên toàn bộ cụm server.
Vai trò của Redis trong hệ thống
Xử lý tác vụ nền (BullMQ)
Khi một workflow không nên giữ request đồng bộ quá lâu, backend có thể đẩy job vào Redis để worker xử lý riêng. Trong repo hiện tại, dấu vết rõ nhất của mô hình này nằm ở migration queue và các tác vụ nội bộ async.
Đồng bộ hóa Trạng thái
Redis giúp đảm bảo rằng nếu bạn chạy 3 server backend (Scaling), giới hạn 100 requests/phút sẽ được áp dụng chính xác cho user đó trên cả 3 server.
Cấu trúc dữ liệu nội bộ
| Prefix | Module sử dụng | Loại dữ liệu |
|---|---|---|
| cache:* | CacheManager | String / JSON (Schema metadata) |
| bull:* | BullMQ | Hash / List / Set (Job queue state) |
| throttler:* | Rate Limiter | Integer (Request counters) |
| presence:* | Presence service | Hash + TTL / HSCAN presence reads |
| search_index:* | Search service | Item payloads + token candidate indexes |
Các tiện ích Redis mới tránh dùng `KEYS` trên keyspace lớn. `RedisService.keys()` hiện là wrapper tương thích dùng `SCAN`, presence đọc hash bằng `HSCAN`, và global search tra candidate index thay vì parse toàn bộ tập item trong service layer.
Vòng đời tác vụ BullMQ
Job được đưa vào Redis List và đợi Worker nhàn rỗi.
Worker đang xử lý job. Redis giữ khóa (lock) để tránh xử lý trùng.
Job hoàn thành, kết quả được lưu tạm để Frontend polling.
Triển khai Redis với Docker
redis:
image: redis:7-alpine
ports:
- "6379:6379"
command: redis-server --save 60 1 --loglevel warning
Tính năng nâng cao với Redis
Thông báo Real-time
Sử dụng Redis Pub/Sub kết hợp với SSE (Server-Sent Events) để đẩy thông báo ngay lập tức tới trình duyệt. Kênh Pub/Sub được partition theo user (`notifications:user:<id>`) để giảm broadcast thừa khi nhiều người dùng đang online.
Tìm kiếm Schema Toàn cục
Redis lưu trữ index metadata của tất cả các kết nối database. Điều này cho phép bạn tìm kiếm bảng hoặc view trên hàng chục database khác nhau chỉ trong vài mili giây.
Tối ưu hóa ERD Designer
Cùng một lớp search/index này cũng là nền để các bề mặt như ERD, global search, và các luồng chọn bảng có thể phản hồi nhanh mà không phải query lại metadata nguồn ở mỗi lần gõ:
- Smart Suggestions: Cho phép gợi ý bảng hoặc thực thể liên quan dựa trên index đã sync trước đó.
- Low Re-query Pressure: Việc tra cứu diễn ra trên lớp index Redis thay vì luôn phải chạm lại DB nguồn, giảm độ trễ và tải không cần thiết.
Ranh giới sản phẩm hiện tại
Redis hiện là hạ tầng, chưa phải workspace riêng
Trong codebase hiện tại, Redis phục vụ cache, queue, notification stream, presence, throttling và search index. Nó chưa được mở ra thành một Redis Explorer hoàn chỉnh cho người dùng cuối, nên docs phần này nên được đọc như tài liệu kiến trúc/vận hành hơn là hướng dẫn sử dụng một workspace Redis riêng.
Cấu hình & Kết nối
# URL kết nối Redis đầy đủ
REDIS_URL=redis://user:password@your-redis-host:6379
# Dùng Redis TLS (cho các managed services như Upstash / AWS)
REDIS_URL=rediss://default:yourpassword@name.upstash.io:6379
Khắc phục sự cố
Backend không thể khởi động do lỗi Redis?
Kiểm tra xem Redis đã chạy chưa (redis-cli ping). Đảm bảo firewall đã mở port 6379.
BullMQ job bị treo hoặc không xử lý?
Xác nhận Redis không bị đầy bộ nhớ (OOM). Bạn có thể cần xóa các job cũ bằng lệnh FLUSHDB nếu đang dev.
Lỗi Max connections?
Các cloud provider miễn phí thường giới hạn 10-20 connections. Hãy cân nhắc nâng cấp lên gói trả phí nếu app có nhiều user.
Sẵn sàng khám phá dữ liệu?
Tham gia cộng đồng trên GitHub để đóng góp cho IDE cơ sở dữ liệu địa phương thông minh nhất.
Mở Ứng dụng