@effector-storage/keyv
TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

Keyv adapter

bundlejs

Adapter to persist store in multiple backends, using Keyv library.

Install

Depending on your package manager

# using `pnpm` ↓
$ pnpm add effector-storage @effector-storage/keyv

# using `yarn` ↓
$ yarn add effector-storage @effector-storage/keyv

# using `npm` ↓
$ npm install --save effector-storage @effector-storage/keyv

Also, you need to install required adapters for Keyv.

Usage

Due to changes in Keyv v5, you have to create Keyv storage adapter explicitely.

Import persist function from '@effector-storage/keyv' module, and use it with created adapter:

import KeyvRedis from '@keyv/redis'
import { persist } from '@effector-storage/keyv'

// create new Redis Keyv storage adapter
const storage = new KeyvRedis({ uri: 'redis://user:pass@localhost:6379' })

// persist store `$counter` with key 'counter' in Redis
persist({
  store: $counter,
  key: 'counter',
  with: storage,
})

⚠️ Note, that Keyv is asynchronous.

Two (or more) different stores, persisted with the same key, will be synchronized (synchronously!), even if not connected with each other directly — each store will receive updates from another one.

Formulae

import { persist } from '@effector-storage/keyv'
  • persist({ store, ...options }): Subscription
  • persist({ source, target, ...options }): Subscription

Options

  • ... all the common options from effector-storage's persist function.
  • with?: (string | Keyv | [Keyv.Options]): Connection string for Keyv library, or Keyv instance, or Keyv options. Default = undefined (in that case in-memory Map is used as a storage)
  • ttl?: (number): TTL for stored value in milliseconds. Default = undefined

Adapter

import { adapter } from '@effector-storage/keyv'
  • adapter(options?): StorageAdapter

Options

  • with?: (Keyv | KeyvStoreAdapter | KeyvOptions | Map): Keyv instance, or Keyv storage adapter, or Keyv options. Default = undefined (in that case Keyv uses in-memory Map as a storage)
  • ttl?: (number): TTL for stored value in milliseconds. Default = undefined

FAQ

How do I use custom serialization / deserialization?

Adapter doesn't provide extra serialization options, but you can use Keyv options to achieve that:

persist({
  store: $counter,
  key: 'counter',
  with: {
    store: new KeyvRedis({ uri: 'redis://user:pass@localhost:6379' }),
    serialize: JSON.stringify,
    deserialize: JSON.parse,
  },
})

or use separate Keyv instance:

const keyv = new Keyv(
  new KeyvRedis({ uri: 'redis://user:pass@localhost:6379' }),
  {
    serialize: JSON.stringify,
    deserialize: JSON.parse,
  }
)

persist({
  store: $counter,
  key: 'counter',
  with: keyv,
})

Please, read Keyv documentation for more details.

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 2.0.0
    6
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 2.0.0
    6
  • 1.1.0
    0
  • 1.0.0
    0

Package Sidebar

Install

npm i @effector-storage/keyv

Weekly Downloads

6

Version

2.0.0

License

MIT

Unpacked Size

16.9 kB

Total Files

9

Last publish

Collaborators

  • yumauri