Bundis – Ein SQLite-basierter Redis-kompatibler Server für Bun.RedisClient
(github.com/Munsunty)Ein Projekt für den Fall, dass man in einer Bun-App eine Redis-artige API und Pub/Sub benötigt, aber keinen separaten Redis-Server betreiben möchte.
Wenn man einfach nur die Verbindungs-URL des nativen Bun.RedisClient auf diesen Server umstellt, funktioniert alles unverändert und ohne Code-Anpassungen. Es braucht weder eine Redis-Installation noch native Abhängigkeiten. Die Daten werden in einer SQLite-Datei (WAL) persistent gespeichert und bleiben auch nach einem Neustart erhalten; Lesezugriffe werden durch einen In-Memory-Hot-Cache beschleunigt.
Kernpunkte
- 0 Abhängigkeiten —
bun:sqlite,Bun.listensind beide in Bun eingebaut. Keine zusätzliche Installation erforderlich - Persistenz — Daten werden in einer einzelnen SQLite-Datei gespeichert und überstehen Neustarts
- Cold Start ~13 ms — unabhängig von der Datengröße (anders als bei Redis mit RDB/AOF-Replay gibt es beim Start kein erneutes Einlesen der Daten)
- Hot Cache — write-through + adaptive idle eviction + LRU-Byte-Obergrenze. Der Cache dient rein der Beschleunigung von Lesezugriffen; SQLite bleibt stets die Quelle der Wahrheit
- 3 Betriebsarten — In-Process-Embed / Sidecar-Spawn / eigenständiger Daemon (
bunx)
Anwendungsbeispiel
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");
Klare Nicht-Ziele
- Andere Laufzeitumgebungen als Bun (Node.js/Deno usw.) und andere Clients als Bun.RedisClient (
ioredis,node-redis,redis-pyusw.) werden nicht unterstützt. Garantiert wird der Wire-Vertrag ("wenn die richtigen Bytes hereinkommen, kommt die richtige Byte-Antwort zurück") - Redis Cluster/Sentinel, geteilte
.db-Nutzung durch mehrere Prozesse sowie HA/Failover liegen außerhalb des Scopes (Annahme: Single Writer) - Lua-Scripting (
EVAL) sowie die Befehlssätze für list/sorted-set sind noch nicht implementiert (geplant)
Ziel ist Interface-Kompatibilität, nicht ein Performance-Klon von Redis. Beim Durchsatz liegt Redis vorn; Bundis verkauft den operativen Komfort von "Festplatten-Persistenz + Redis-API in Bun ohne Redis-Installation". Die Performance-Zahlen stammen aus Kompatibilitätspfad-Benchmarks, die mit echtem Bun.RedisClient über Loopback-TCP gemessen wurden; Methodik sowie Vorher/Nachher-Zahlen sind im Repository in PERFORMANCE.md veröffentlicht.
GitHub: https://github.com/Munsunty/bundis
Installation: bun add bundis
Noch keine Kommentare.