Bundis – Máy chủ tương thích Redis dựa trên SQLite cho Bun.RedisClient
(github.com/Munsunty)Đây là một dự án dành cho trường hợp bạn cần API kiểu Redis và pub/sub trong ứng dụng Bun nhưng không muốn vận hành một máy chủ Redis riêng.
Chỉ cần chuyển URL kết nối của Bun.RedisClient mặc định sang máy chủ này là có thể hoạt động nguyên trạng mà không cần sửa mã. Không cần cài Redis, cũng không có phụ thuộc native. Dữ liệu được lưu bền vững trong tệp SQLite (WAL) nên vẫn tồn tại sau khi khởi động lại, và thao tác đọc được tăng tốc bằng hot cache trong bộ nhớ.
Điểm chính
- 0 phụ thuộc —
bun:sqlite,Bun.listenđều là thành phần tích hợp sẵn của Bun. Không cần cài thêm - Tính bền vững — dữ liệu được lưu trong một tệp SQLite duy nhất, vẫn tồn tại sau khi khởi động lại
- Cold start ~13ms — không phụ thuộc vào kích thước dữ liệu (khác với việc phát lại RDB/AOF của Redis, không có bước phát lại dữ liệu khi khởi động)
- Hot cache — write-through + adaptive idle eviction + giới hạn byte theo LRU. Cache chỉ dùng để tăng tốc đọc, còn SQLite luôn là nguồn chân lý
- 3 cách chạy — embed trong tiến trình / spawn sidecar / daemon độc lập (
bunx)
Ví dụ sử dụng
import { RedisClient } from "bun";
import { embedServer } from "bundis";
const server = embedServer({ dbPath: "./data.db" });
const client = new RedisClient(server.url);
await client.set("k", "v");
Những gì rõ ràng không phải mục tiêu
- Không hỗ trợ runtime ngoài Bun (Node.js/Deno, v.v.) và client ngoài
Bun.RedisClient(ioredis, node-redis, redis-py, v.v.). Thứ được bảo đảm là hợp đồng wire ("nếu byte đúng đi vào thì sẽ trả lời bằng byte đúng") - Redis Cluster/Sentinel, chia sẻ
.dbgiữa nhiều tiến trình, HA/failover đều nằm ngoài phạm vi (giả định một writer duy nhất) - Lua scripting (
EVAL), nhóm lệnh list/sorted-set chưa được triển khai (đã có kế hoạch)
Mục tiêu là tương thích giao diện, không phải tạo ra một bản sao hiệu năng của Redis. Về throughput thì Redis vẫn chiếm ưu thế; điều Bundis mang lại là sự tiện lợi trong vận hành: "lưu trữ bền vững trên đĩa + Redis API trong Bun mà không cần cài Redis". Các chỉ số hiệu năng là benchmark trên đường tương thích được đo bằng Bun.RedisClient thực tế qua loopback TCP, và phương pháp cùng các số liệu before/after đã được công bố trong PERFORMANCE.md của kho lưu trữ.
GitHub: https://github.com/Munsunty/bundis
Cài đặt: bun add bundis
Chưa có bình luận nào.