@effector-storage/keyv
v1.1.0
Published
Module for Effector to sync stores using Keyv
Downloads
16
Readme
Keyv adapter
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
Import persist
function from '@effector-storage/keyv'
module, and it will just work:
import { persist } from '@effector-storage/keyv'
// persist store `$counter` with key 'counter'
persist({
store: $counter,
key: 'counter',
with: 'redis://user:pass@localhost:6379',
})
⚠️ 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
'spersist
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
?: (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
Gotchas
Keyv is server-side library only (at least until version 5 is landed).
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: {
uri: 'redis://user:pass@localhost:6379',
serialize: JSON.stringify,
deserialize: JSON.parse,
},
})
or use separate Keyv instance:
const keyv = new Keyv('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.