Bundis – เซิร์ฟเวอร์ที่เข้ากันได้กับ Redis บน SQLite สำหรับ Bun.RedisClient
(github.com/Munsunty)โปรเจกต์นี้มีไว้สำหรับเวลาที่แอป Bun ต้องการ API สไตล์ Redis และ pub/sub แต่ไม่อยากดูแล Redis server แยกต่างหาก
เพียงเปลี่ยน URL การเชื่อมต่อของ Bun.RedisClient แบบมาตรฐานให้ชี้มาที่เซิร์ฟเวอร์นี้ ก็ใช้งานได้ทันทีโดยไม่ต้องแก้โค้ดเลย ไม่ต้องติดตั้ง Redis และไม่มี native dependency ข้อมูลจะถูกเก็บถาวรในไฟล์ SQLite (WAL) จึงยังคงอยู่หลังรีสตาร์ต และการอ่านจะเร็วขึ้นด้วย hot cache ในหน่วยความจำ
จุดเด่นหลัก
- ไม่มี dependency —
bun:sqlite,Bun.listenเป็นฟีเจอร์ในตัวของ Bun ทั้งหมด ไม่ต้องติดตั้งเพิ่ม - การเก็บถาวร — ข้อมูลถูกเก็บในไฟล์ SQLite ไฟล์เดียว และยังคงอยู่หลังรีสตาร์ต
- cold start ~13ms — ไม่ขึ้นกับขนาดข้อมูล (ต่างจาก Redis ที่ต้อง replay RDB/AOF ตอนเริ่มทำงาน จึงไม่มีการ replay ข้อมูลตอนบูต)
- hot cache — write-through + adaptive idle eviction + เพดานขนาดไบต์แบบ LRU แคชมีไว้เร่งการอ่านอย่างเดียว และ SQLite คือแหล่งข้อมูลจริงเสมอ
- 3 วิธีการรัน — embed ภายในโปรเซส / spawn แบบ sidecar / เดมอนแยกอิสระ (
bunx)
ตัวอย่างการใช้งาน
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");
สิ่งที่ตั้งใจว่าไม่ใช่เป้าหมาย
- ไม่รองรับ runtime อื่นนอกจาก Bun (เช่น Node.js/Deno) และไคลเอนต์อื่นนอกจาก Bun.RedisClient (เช่น ioredis, node-redis, redis-py) สิ่งที่รับประกันคือสัญญาระดับ wire ("ถ้าได้รับไบต์ที่ถูกต้อง ก็จะตอบกลับด้วยไบต์ที่ถูกต้อง")
- Redis Cluster/Sentinel, การแชร์ไฟล์
.dbข้ามหลายโปรเซส, HA/failover อยู่นอกขอบเขต (ตั้งสมมติฐานว่ามี writer เดียว) - Lua scripting (
EVAL), ชุดคำสั่ง list/sorted-set ยังไม่ได้ implement (มีแผนจะทำ)
เป้าหมายคือความเข้ากันได้ของอินเทอร์เฟซ ไม่ใช่การทำ Redis clone ด้านประสิทธิภาพ Redis ยังเหนือกว่าในแง่ throughput และสิ่งที่ Bundis ขายคือความสะดวกในการใช้งานแบบ "disk persistence + Redis API ใน Bun โดยไม่ต้องติดตั้ง Redis" ตัวเลขประสิทธิภาพเป็น benchmark บนเส้นทางความเข้ากันได้ที่วัดผ่าน loopback TCP ด้วย Bun.RedisClient จริง และมีการเปิดเผยวิธีวัดรวมถึงตัวเลข before/after ไว้ใน PERFORMANCE.md ของรีโพซิทอรี
GitHub: https://github.com/Munsunty/bundis
ติดตั้ง: bun add bundis
ยังไม่มีความคิดเห็น