Bundis – Bun.RedisClient向けのSQLiteベースRedis互換サーバー
(github.com/Munsunty)BunアプリでRedisスタイルのAPIとpub/subが必要だが、別途Redisサーバーを運用したくない場合のためのプロジェクトです。
標準のBun.RedisClientの接続URLをこのサーバーに向けるだけで、コード修正なしにそのまま動作します。Redisのインストールもネイティブ依存関係も不要です。データはSQLiteファイル(WAL)に永続化され、再起動後も保持されます。読み取りはインメモリのホットキャッシュで高速化されます。
主要ポイント
- 依存関係ゼロ —
bun:sqlite、Bun.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
まだコメントはありません。