1.1.0 • Published 6 months ago
@effector-storage/keyv v1.1.0
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.