@i1k/smart-cache-manager
TypeScript icon, indicating that this package has built-in type declarations

0.0.14 • Public • Published

@i1k/smart-cache-manager

npm version codecov

Smart cache manager for caching clients such as:

Provides features:

  • supports one or more cache clients (multi-store);
  • interface for building/ignoring keys.

Installation

# using pnpm
pnpm i @i1k/smart-cache-manager

# using npm
npm i @i1k/smart-cache-manager

Additionally, you need to install or implement clients with the same interface.

# using pnpm
pnpm i @i1k/redis-cache-client @i1k/memory-cache-client

# using npm
npm i @i1k/redis-cache-client @i1k/memory-cache-client

Usage

Each cache client must be wrapped in an object defined according to the following type:

type Manager = {
  client: ICacheClient
  key?: (key: string) => string | null
}

If you provide the key function, every call to the set or get method will pass the key through this function for handling.

For example, if you want to cache only the keys that include the word 'main' in memory, you can provide a function like the one shown below:

// clients implement the ICacheClient interface
import RedisCacheClient from '@i1k/redis-cache-client'
import MemoryCacheClient from '@i1k/memory-cache-client'

import CacheManager from '@i1k/smart-cache-manager'

const cacheManager = new CacheManager([
  {
    client: new MemoryCacheClient({ max: 100 }),
    key: key => (key.includes('main') ? key : null),
  },
  {
    client: new RedisCacheClient(),
  },
])

cacheManager.set('key', 'value')

API Reference

interface ICacheClient {
  set: (key: string, value: string) => Promise<'OK'>
  get: (key: string) => Promise<string | null>
  del: (key: StringOrGlobPattern | StringOrGlobPattern[]) => Promise<string[]>
  clear: () => Promise<string[]>
  keys: (pattern: StringOrGlobPattern | StringOrGlobPattern[]) => Promise<string[]>
}

Remember that every call to the set or get method will pass the key through this function for handling.

set

To set a key-value pair in all stores.

cacheManager.set('foo', 'bar')
// => Promise<'OK'>

cacheManager.set('foo/main', 'bar')
// => Promise<'OK'>

get

To get a value by key (uses promise race).

cacheManager.get('foo')
// => Promise<'bar'>

cacheManager.get('bar')
// => Promise<null>

del

To delete a key-value pair in all stores by a specific key or a glob pattern.

cacheManager.del('foo')
// => Promise<['RedisCacheClient: foo']>

cacheManager.del('foo*')
// => Promise<['RedisCacheClient: foo', 'RedisCacheClient: foo/main', 'MemoryCacheClient: foo/main']>

cacheManager.del(['foo', 'foo/*'])
// => Promise<['RedisCacheClient: foo', 'RedisCacheClient: foo/main', 'MemoryCacheClient: foo/main']>

clear

To clear all stores.

cacheManager.clear()
// => Promise<['RedisCacheClient: foo', 'RedisCacheClient: foo/main', 'MemoryCacheClient: foo/main']>

keys

To get keys from all stores by a specific key or a glob pattern.

cacheManager.keys('foo')
// => Promise<['RedisCacheClient: foo']>

cacheManager.keys('foo*')
// => Promise<['RedisCacheClient: foo', 'RedisCacheClient: foo/main', 'MemoryCacheClient: foo/main']>

cacheManager.keys(['foo', 'foo/*'])
// => Promise<['RedisCacheClient: foo', 'RedisCacheClient: foo/main', 'MemoryCacheClient: foo/main']>

License

MIT

Package Sidebar

Install

npm i @i1k/smart-cache-manager

Weekly Downloads

3

Version

0.0.14

License

MIT

Unpacked Size

29.5 kB

Total Files

9

Last publish

Collaborators

  • ivan1kazantsev