1 Punkte von oakhex 4 시간 전 | Noch keine Kommentare. | Auf WhatsApp teilen

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.listen sind 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-py usw.) 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.

Noch keine Kommentare.