1 points par oakhex 4 시간 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Un projet pensé pour les cas où une app Bun a besoin d’une API de style Redis et de pub/sub, sans pour autant vouloir exploiter un serveur Redis séparé.

Il suffit de rediriger l’URL de connexion du Bun.RedisClient natif vers ce serveur pour que tout fonctionne tel quel, sans modifier le code. Aucune installation de Redis, aucune dépendance native. Les données sont persistées dans un fichier SQLite (WAL), ce qui leur permet de survivre aux redémarrages, et les lectures sont accélérées par un hot cache en mémoire.

Points clés

  • 0 dépendance — bun:sqlite et Bun.listen sont tous deux intégrés à Bun. Aucune installation supplémentaire requise
  • Persistance — les données sont stockées dans un unique fichier SQLite et survivent aux redémarrages
  • Cold start d’environ 13 ms — indépendant de la taille des données (contrairement au rejeu RDB/AOF de Redis, il n’y a pas de rejeu des données au démarrage)
  • Hot cache — write-through + éviction adaptative à l’inactivité + plafond en octets de type LRU. Le cache sert uniquement à accélérer les lectures, SQLite reste toujours la source de vérité
  • 3 modes d’exécution — embed dans le processus / spawn en sidecar / daemon autonome (bunx)

Exemple d’utilisation

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");

Ce que le projet ne vise clairement pas

  • Les runtimes autres que Bun (Node.js/Deno, etc.) et les clients autres que Bun.RedisClient (ioredis, node-redis, redis-py, etc.) ne sont pas pris en charge. La garantie porte sur le contrat wire (« si les bons octets entrent, les bons octets sortent en réponse »)
  • Redis Cluster/Sentinel, le partage d’un .db entre plusieurs processus, et la HA/failover sont hors périmètre (hypothèse d’un unique writer)
  • Le scripting Lua (EVAL) et les familles de commandes list/sorted-set ne sont pas encore implémentés (prévu)

L’objectif est la compatibilité d’interface, pas une reproduction des performances de Redis. Redis garde l’avantage en débit ; ce que vend Bundis, c’est la commodité opérationnelle de « persistance disque + API Redis dans Bun sans installer Redis ». Les chiffres de performance sont des benchmarks du chemin compatible mesurés avec le vrai Bun.RedisClient via TCP en loopback, et la méthodologie ainsi que les mesures before/after sont publiées dans le PERFORMANCE.md du dépôt.

GitHub: https://github.com/Munsunty/bundis
Installation: bun add bundis

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.