SQLite is great for high-performance local cache. This library is perfectly viable for caching strings, objects or whole files. Caching files in SQLite is generally faster than storing them in a filesystem. This library tries to have sane defaults and features:
- TTL eviction mechanism which allows you to set maximum datetime to expire an item
- LRU eviction mechanism that enforces that no more than
maxItems
will be cached based on least recentget
- Optional value compression with gzip
- Values encoded with CBOR which is like JSON, but is binary and serializes
Buffer
andDate
- Inspired by node-cache-manager-sqlite but with easier configuration, TypeScript, LRU and compression
- Make sure to call
await cache.close()
during graceful shutdown of your application to ensure SQLite is properly persisted to disk
import SqliteCache from `cache-sqlite-lru-ttl`
const cache = new SqliteCache({
database: ':memory:', // or path to your database on disk
defaultTtlMs: 1000 * 60 * 60, // optional TTL in milliseconds
maxItems: 1000, // optional LRU
compress: true, // use gzip for values > 1024 bytes, can be smaller, but slower
});
await cache.set('bar', 'baz')
await cache.get('bar') // 'baz' 🎉
import SqliteCache from `cache-sqlite-lru-ttl`
const cache = new SqliteCache({
database: './cache.db',
});
await cache.set('obj', {
a: 5,
b: true,
c: new Date(), // you can store dates because CBOR
d: Buffer.from("hello world")
})
await cache.set('bar', 'baz', {
ttlMs: 60 * 1000, // short LRU for this item
compress: false, // disable compression for this item
})
await cache.delete('bar') // delete 'bar'
await cache.clear() // delete everything
await cache.close() // close the database once you are done using it (usually during graceful shutdown of your application server)