โปรเจกต์นี้มีไว้สำหรับเวลาที่แอป 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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น