1 ポイント 投稿者 oakhex 4 시간 전 | まだコメントはありません。 | WhatsAppで共有

BunアプリでRedisスタイルのAPIとpub/subが必要だが、別途Redisサーバーを運用したくない場合のためのプロジェクトです。

標準のBun.RedisClientの接続URLをこのサーバーに向けるだけで、コード修正なしにそのまま動作します。Redisのインストールもネイティブ依存関係も不要です。データはSQLiteファイル(WAL)に永続化され、再起動後も保持されます。読み取りはインメモリのホットキャッシュで高速化されます。

主要ポイント

  • 依存関係ゼロ — bun:sqliteBun.listen はどちらもBun内蔵。追加インストール不要
  • 永続性 — データはSQLiteの単一ファイルに保存され、再起動後も保持
  • コールドスタート約13ms — データサイズに無関係(RedisのRDB/AOF再生と異なり、起動時のデータ再生なし)
  • ホットキャッシュ — write-through + 適応型アイドル退避 + LRUバイト上限。キャッシュは純粋に読み取り高速化のためで、常にSQLiteが正です
  • 3つの実行方式 — プロセス内embed / サイドカーspawn / 独立デーモン(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");

明確に対象外のもの

  • Bun以外のランタイム(Node.js/Denoなど)や、Bun.RedisClient以外のクライアント(ioredis、node-redis、redis-pyなど)はサポートしません。ワイヤー契約(「正しいバイト列が来れば正しいバイト列で応答する」)が保証対象です
  • Redis Cluster/Sentinel、複数プロセスでの .db 共有、HA/failover は対象外(単一writer前提)
  • Luaスクリプティング(EVAL)、list/sorted-set コマンド群は未実装(予定あり)

インターフェース互換が目標であり、Redisの性能クローンではありません。スループットではRedisが優位で、Bundisが提供する価値は「Redisのインストールなしで、Bunでディスク永続化 + Redis API」を使えるという運用上の利便性です。性能数値は実際のBun.RedisClientでloopback TCP経由により測定した互換経路ベンチで、手法とbefore/afterの数値はリポジトリの PERFORMANCE.md で公開されています。

GitHub: https://github.com/Munsunty/bundis
インストール: bun add bundis

まだコメントはありません。

まだコメントはありません。