@sunacchi/cache-kit-sqlite
v1.0.2
Published
SQLite cache adapter for @sunacchi/cache-kit — Node.js (better-sqlite3)
Maintainers
Readme
@sunacchi/cache-kit-sqlite
SQLite cache adapter for @sunacchi/cache-kit. Uses better-sqlite3 for fast, synchronous access.
Part of the Cache Kit monorepo.
Install
npm install @sunacchi/cache-kit @sunacchi/cache-kit-sqliteUsage
import { Cache } from '@sunacchi/cache-kit';
import { SqliteAdapter } from '@sunacchi/cache-kit-sqlite';
const cache = new Cache<string>({
adapter: new SqliteAdapter({ filename: './cache.db' }),
defaultTtl: 300_000, // 5 minutes
});
await cache.set('config', JSON.stringify({ theme: 'dark' }));
const config = await cache.get('config');Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| filename | string | (required) | Path to the SQLite database file, or :memory: for in-memory. |
| table | string | 'cache' | Table name used for cache entries. |
// Persistent file-based cache
const adapter = new SqliteAdapter({ filename: './data/cache.db' });
// In-memory (fast, non-persistent)
const adapter = new SqliteAdapter({ filename: ':memory:' });
// Custom table name
const adapter = new SqliteAdapter({ filename: './cache.db', table: 'sessions' });How It Works
- Uses
better-sqlite3for synchronous, single-process SQLite access - The table is created automatically on first use (
CREATE TABLE IF NOT EXISTS) - Uses WAL journal mode for better concurrent read performance
- All statements are prepared once and reused for optimal performance
set()usesINSERT ... ON CONFLICT DO UPDATEfor upsert semantics
Cleanup
Call close() when done to release the database file lock.
const adapter = new SqliteAdapter({ filename: './cache.db' });
const cache = new Cache({ adapter });
// When done:
adapter.close();Example
import { Cache } from '@sunacchi/cache-kit';
import { SqliteAdapter } from '@sunacchi/cache-kit-sqlite';
const adapter = new SqliteAdapter({ filename: './data/app-cache.db' });
const cache = new Cache<Record<string, unknown>>({
adapter,
defaultTtl: 600_000,
maxSize: 5_000,
eviction: 'lru',
});
const settings = await cache.getOrCreate('app:settings', async () => {
return await loadSettingsFromRemote();
}, { ttl: 120_000 });
// On shutdown
adapter.close();Exports
export { SqliteAdapter } from './sqlite-adapter.js';
export type { SqliteAdapterOptions } from './sqlite-adapter.js';License
MIT
