วันก่อนเห็นมีคนแชร์กัน เกี่ยวกับ Keyv ซึ่งเป็นตัวจัดการข้อมูลแบบ key-value โดยที่เราสามารถเปลี่ยนที่จัดเก็บได้ด้วย adapter ต่างๆ
ประกอบไปด้วย
- Redis
- ValKey
- MongoDB
- SQLite
- PostgreSQL
- MySQL
- etcd
- Memcached
- หรือทำการ custom adapter ได้อีกด้วย
และยังมีการบีบอัดข้อมูลที่จัดเก็บ เช่น gzip และ brotli เป็นต้น
มาเริ่มทำความรู้จักกัน
มาลองใช้งานกันเลย
- ใช้งาน Redis หรือ SQLite ในการจัดเก็บข้อมูลผ่าน Adapter
- การ monitoring ผ่าน Hook
- ใช้งาน namespace เพื่อจัดการข้อมูลแต่ละกลุ่ม
การใช้งาน Redis หรือ SQLite
// Redis
import KeyvRedis from '@keyv/redis';
const keyv = new Keyv(new KeyvRedis('redis://user:pass@localhost:6379'));
// SQLite
import KeyvSqlite from '@keyv/sqlite';
const keyvSqlite = new KeyvSqlite('sqlite://path/to/database.sqlite');
const keyv = new Keyv({ store: keyvSqlite, ttl: 5000, namespace: 'cache' });
การเรียกใช้งานั้น
await keyv.set('foo', 'expires in 1 second', 1000);
await keyv.set('foo', 'never expires');
await keyv.get('foo');
await keyv.delete('foo');
await keyv.clear();
การ monitoring ผ่าน Hook
const keyv = new Keyv();
keyv.hooks.addHandler(KeyvHooks.PRE_SET, (key, value) => console.log(`Setting key ${key} to ${value}`));
const keyv = new Keyv();
keyv.hooks.addHandler(KeyvHooks.POST_SET, (key, value) => console.log(`Set key ${key} to ${value}`));
Namespace
ทั้งนี้เรายังสามารถการใช้งาน namespace เพื่อจัดการข้อมูลแต่ละกลุ่ม
const users = new Keyv('redis://user:pass@localhost:6379', { namespace: 'users' });
const cache = new Keyv('redis://user:pass@localhost:6379', { namespace: 'cache' });
// Set a key-value pair using the key 'foo' in both namespaces
await users.set('foo', 'users'); // returns true
await cache.set('foo', 'cache'); // returns true
// Retrieve a Value
await users.get('foo'); // returns 'users'
await cache.get('foo'); // returns 'cache'
// Delete all values for the specified namespace
await users.clear();