Socket
Book a DemoInstallSign in
Socket

@extensionengine/tapster

Package Overview
Dependencies
Maintainers
5
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@extensionengine/tapster

Cache adapter module for NodeJs

1.0.1
latest
Source
npmnpm
Version published
Weekly downloads
0
Maintainers
5
Weekly downloads
 
Created
Source

Tapster

Cache adapter module for NodeJs.

Installation:

npm install @extensionengine/tapster
const { CacheManager } = require('@extensionengine/tapster');
const cache = new CacheManager({ /* ... */ });

Store providers

  • memory (uses LRU)
  • redis (uses ioredis)
  • custom - use any store you want, as long as it has the same API

Usage

See examples below and in the examples directory.

Memory store

const client = new CacheManager({ store: 'memory', ttl: 10 /* seconds */ });

// If the set method is called without ttl, the default ttl will be used
await client.set('foo', 'bar');
await client.get('foo'); // bar
await client.has('foo') // true
await client.has('baz'); // false

await sleep('10s');
await client.get('foo'); // undefined
await client.has('foo') // false

// When ttl is defined, it will overwrite the default one
await client.set('foo', 'bar', 5);
await client.has('foo') // true

await sleep('5s');
await client.has('foo') // false

// ttl = 0 means no expiration time
await client.set('foo', 'bar', 0);

Redis store

const client = new CacheManager({
  store: 'redis',
  host: 'localhost',
  port: 6379,
  ttl: 10 /* seconds */
});

await client.set('foo', 'bar');
await client.get('foo'); // bar

Custom store

You can use your own custom store by creating one with the same API as the built-in memory stores (such as a memory or redis). See example.

class CustomStore { /* ... */ }
const client = new CacheManager({ store: CustomStore });

await client.set('foo', 'bar');
await client.get('foo'); // bar

Serialization

Tapster uses JSON.stringify and JSON.parse for data serialization. You can optionally provide your own serialization functions to support extra data types or to serialize to something other than JSON.

const cache = new CacheManager({ serialize: JSON.stringify, deserialize: JSON.parse });

Namespaces

Namespacing cache instance enables avoiding key collisions and allows clearing only a certain namespace while using the same database.

const users = new CacheManager({ namespace: 'users' });
const cars = new CacheManager({ namespace: 'cars' });

await users.set('record-1', 'John');
await cars.set('record-1', 'Honda');

console.log('User keys: ', await users.getKeys()); // ['record-1'];
console.log(await users.get('record-1')); // John
console.log('Car keys: ', await cars.getKeys()); // ['record-1']
console.log(await cars.get('record-1')); // Honda

await users.clear();

console.log('User keys: ', await users.getKeys()); // []
console.log(await users.get('record-1')); // undefined
console.log('Car keys: ', await cars.getKeys()); // ['record-1']
console.log(await cars.get('record-1')); // Honda

Options

Common

  • store (optional) - built-in store (memory, redis) or custom store. Default is memory.
  • ttl (optional) - time to live in seconds. Default is 0.
  • namespace (optional) - namespace cache instance to avoid key collisions. Default is default.

Redis store

  • host (required) - redis host.
  • port (required) - redis port.
  • password (optional) - redis password.

API

  • set(key, value, ttl) - TTL is optional. The cache manager instance's TTL will be used if the set method is called without a ttl parameter.
  • get(key) => value
  • delete(key)
  • has(key)
  • clear - Clear all records under the certain namespace
  • getKeys(pattern) => keys

Supported glob-style patterns:

  • h?llo matches hello, hallo and hxllo
  • h*llo matches hllo and heeeello
  • h[ae]llo matches hello and hallo, but not hillo
  • h[^e]llo matches hallo, hbllo, ... but not hello
  • h[a-b]llo matches hallo and hbllo

Tests

To run tests run:

npm t

License

Tapster is licensed under the MIT license.

Keywords

cache

FAQs

Package last updated on 29 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.