mirror of https://github.com/lukechilds/keyv-1.git
Kiko Beats
3 years ago
53 changed files with 246 additions and 570 deletions
@ -1,39 +0,0 @@ |
|||
# @keyv/mongo [<img width="100" align="right" src="https://rawgit.com/lukechilds/keyv/master/media/logo.svg" alt="keyv">](https://github.com/lukechilds/keyv) |
|||
|
|||
> MongoDB storage adapter for Keyv |
|||
|
|||
[![Build Status](https://travis-ci.org/lukechilds/keyv-mongo.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-mongo) |
|||
[![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-mongo/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-mongo?branch=master) |
|||
[![npm](https://img.shields.io/npm/v/@keyv/mongo.svg)](https://www.npmjs.com/package/@keyv/mongo) |
|||
|
|||
MongoDB storage adapter for [Keyv](https://github.com/lukechilds/keyv). |
|||
|
|||
Uses TTL indexes to automatically remove expired documents. However [MongoDB doesn't guarantee data will be deleted immediately upon expiration](https://docs.mongodb.com/manual/core/index-ttl/#timing-of-the-delete-operation), so expiry dates are revalidated in Keyv. |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/mongo |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify the collection name, by default `'keyv'` is used. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname', { collection: 'cache' }) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.<br> |
|||
Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
@ -1,42 +0,0 @@ |
|||
# @keyv/mysql [<img width="100" align="right" src="https://rawgit.com/lukechilds/keyv/master/media/logo.svg" alt="keyv">](https://github.com/lukechilds/keyv) |
|||
|
|||
> MySQL/MariaDB storage adapter for Keyv |
|||
|
|||
[![Build Status](https://travis-ci.org/lukechilds/keyv-mysql.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-mysql) |
|||
[![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-mysql/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-mysql?branch=master) |
|||
[![npm](https://img.shields.io/npm/v/@keyv/mysql.svg)](https://www.npmjs.com/package/@keyv/mysql) |
|||
|
|||
MySQL/MariaDB storage adapter for [Keyv](https://github.com/lukechilds/keyv). |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/mysql |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify a custom table with the `table` option and the primary key size with `keySize`. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname', { |
|||
table: 'cache', |
|||
keySize: 255 |
|||
}) |
|||
``` |
|||
|
|||
**Note:** Some MySQL/MariaDB installations won't allow a key size longer than 767 bytes. If you get an error on table creation try reducing `keySize` to 191 or lower. [#5](https://github.com/lukechilds/keyv-sql/issues/5) |
|||
|
|||
## License |
|||
|
|||
**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.<br> |
|||
Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
@ -1,39 +0,0 @@ |
|||
# @keyv/postgres [<img width="100" align="right" src="https://rawgit.com/lukechilds/keyv/master/media/logo.svg" alt="keyv">](https://github.com/lukechilds/keyv) |
|||
|
|||
> PostgreSQL storage adapter for Keyv |
|||
|
|||
[![Build Status](https://travis-ci.org/lukechilds/keyv-postgres.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-postgres) |
|||
[![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-postgres/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-postgres?branch=master) |
|||
[![npm](https://img.shields.io/npm/v/@keyv/postgres.svg)](https://www.npmjs.com/package/@keyv/postgres) |
|||
|
|||
PostgreSQL storage adapter for [Keyv](https://github.com/lukechilds/keyv). |
|||
|
|||
Requires Postgres 9.5 or newer for `ON CONFLICT` support to allow performant upserts. [Why?](https://stackoverflow.com/questions/17267417/how-to-upsert-merge-insert-on-duplicate-update-in-postgresql/17267423#17267423) |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/postgres |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify the `table` option. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname', { table: 'cache' }) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.<br> |
|||
Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
@ -1,18 +0,0 @@ |
|||
# @keyv/sql [<img width="100" align="right" src="https://rawgit.com/lukechilds/keyv/master/media/logo.svg" alt="keyv">](https://github.com/lukechilds/keyv) |
|||
|
|||
> Parent class for SQL based Keyv storage adapters |
|||
|
|||
[![Build Status](https://travis-ci.org/lukechilds/keyv-sql.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-sql) |
|||
[![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-sql/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-sql?branch=master) |
|||
[![npm](https://img.shields.io/npm/v/@keyv/sql.svg)](https://www.npmjs.com/package/@keyv/sql) |
|||
|
|||
Parent class containing the common logic for SQL based Keyv storage adapters: |
|||
|
|||
- [`keyv-sqlite`](https://github.com/lukechilds/keyv-sqlite) |
|||
- [`keyv-postgres`](https://github.com/lukechilds/keyv-postgres) |
|||
- [`keyv-mysql`](https://github.com/lukechilds/keyv-mysql) |
|||
|
|||
## License |
|||
|
|||
**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.<br> |
|||
Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
@ -1,40 +0,0 @@ |
|||
# @keyv/sqlite [<img width="100" align="right" src="https://rawgit.com/lukechilds/keyv/master/media/logo.svg" alt="keyv">](https://github.com/lukechilds/keyv) |
|||
|
|||
> SQLite storage adapter for Keyv |
|||
|
|||
[![Build Status](https://travis-ci.org/lukechilds/keyv-sqlite.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-sqlite) |
|||
[![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-sqlite/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-sqlite?branch=master) |
|||
[![npm](https://img.shields.io/npm/v/@keyv/sqlite.svg)](https://www.npmjs.com/package/@keyv/sqlite) |
|||
|
|||
SQLite storage adapter for [Keyv](https://github.com/lukechilds/keyv). |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/sqlite |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('sqlite://path/to/database.sqlite') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify the `table` and [`busyTimeout`](https://sqlite.org/c3ref/busy_timeout.html) option. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('sqlite://path/to/database.sqlite', { |
|||
table: 'cache', |
|||
busyTimeout: 10000 |
|||
}) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.<br> |
|||
Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
@ -1,68 +0,0 @@ |
|||
# @keyv/test-suite [<img width="100" align="right" src="https://rawgit.com/lukechilds/keyv/master/media/logo.svg" alt="keyv">](https://github.com/lukechilds/keyv) |
|||
|
|||
> Test suite for Keyv API compliance |
|||
|
|||
[![Build Status](https://travis-ci.org/lukechilds/keyv-test-suite.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-test-suite) |
|||
[![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-test-suite/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-test-suite?branch=master) |
|||
[![npm](https://img.shields.io/npm/v/@keyv/test-suite.svg)](https://www.npmjs.com/package/@keyv/test-suite) |
|||
|
|||
Complete [AVA](https://github.com/avajs/ava) test suite to test a [Keyv](https://github.com/lukechilds/keyv) storage adapter for API compliance. |
|||
|
|||
## Usage |
|||
|
|||
### Install |
|||
|
|||
Install AVA, Keyv and `@keyv/test-suite` as development dependencies. |
|||
|
|||
```shell |
|||
npm install --save-dev ava keyv @keyv/test-suite |
|||
``` |
|||
|
|||
Then update `keyv` and `@keyv/test-suite` versions to `*` in `package.json` to ensure you're always testing against the latest version. |
|||
|
|||
### Create Test File |
|||
|
|||
`test.js` |
|||
|
|||
```js |
|||
import test from 'ava' |
|||
import keyvTestSuite from '@keyv/test-suite' |
|||
import Keyv from 'keyv' |
|||
import KeyvStore from './' |
|||
|
|||
const store = () => new KeyvStore() |
|||
keyvTestSuite(test, Keyv, store) |
|||
``` |
|||
|
|||
Where `KeyvStore` is your storage adapter. |
|||
|
|||
Set your test script in `package.json` to `ava`. |
|||
```json |
|||
"scripts": { |
|||
"test": "ava" |
|||
} |
|||
``` |
|||
|
|||
### Test on Active Node.js LTS and Higher |
|||
|
|||
An example configuration for Travis CI would look like this: |
|||
|
|||
`.travis.yml` |
|||
|
|||
```yaml |
|||
language: node_js |
|||
node_js: |
|||
- '8' |
|||
- '6' |
|||
- '4' |
|||
script: npm test |
|||
``` |
|||
|
|||
## Example |
|||
|
|||
Take a look at [keyv-redis](https://github.com/lukechilds/keyv-redis) for an example of an existing storage adapter using `@keyv/test-suite`. |
|||
|
|||
## License |
|||
|
|||
**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.<br> |
|||
Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
@ -1,296 +0,0 @@ |
|||
<h1 align="center"> |
|||
<img width="250" src="https://rawgit.com/lukechilds/keyv/master/media/logo.svg" alt="keyv"> |
|||
<br> |
|||
<br> |
|||
</h1> |
|||
|
|||
> Simple key-value storage with support for multiple backends |
|||
|
|||
[![Build Status](https://travis-ci.org/lukechilds/keyv.svg?branch=master)](https://travis-ci.org/lukechilds/keyv) |
|||
[![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv?branch=master) |
|||
[![npm](https://img.shields.io/npm/dm/keyv.svg)](https://www.npmjs.com/package/keyv) |
|||
[![npm](https://img.shields.io/npm/v/keyv.svg)](https://www.npmjs.com/package/keyv) |
|||
|
|||
Keyv provides a consistent interface for key-value storage across multiple backends via storage adapters. It supports TTL based expiry, making it suitable as a cache or a persistent key-value store. |
|||
|
|||
## Features |
|||
|
|||
There are a few existing modules similar to Keyv, however Keyv is different because it: |
|||
|
|||
- Isn't bloated |
|||
- Has a simple Promise based API |
|||
- Suitable as a TTL based cache or persistent key-value store |
|||
- [Easily embeddable](#add-cache-support-to-your-module) inside another module |
|||
- Works with any storage that implements the [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) API |
|||
- Handles all JSON types plus `Buffer` |
|||
- Supports namespaces |
|||
- Wide range of [**efficient, well tested**](#official-storage-adapters) storage adapters |
|||
- Connection errors are passed through (db failures won't kill your app) |
|||
- Supports the current active LTS version of Node.js or higher |
|||
|
|||
## Usage |
|||
|
|||
Install Keyv. |
|||
|
|||
``` |
|||
npm install --save keyv |
|||
``` |
|||
|
|||
By default everything is stored in memory, you can optionally also install a storage adapter. |
|||
|
|||
``` |
|||
npm install --save @keyv/redis |
|||
npm install --save @keyv/mongo |
|||
npm install --save @keyv/sqlite |
|||
npm install --save @keyv/postgres |
|||
npm install --save @keyv/mysql |
|||
``` |
|||
|
|||
Create a new Keyv instance, passing your connection string if applicable. Keyv will automatically load the correct storage adapter. |
|||
|
|||
```js |
|||
const Keyv = require('keyv'); |
|||
|
|||
// One of the following |
|||
const keyv = new Keyv(); |
|||
const keyv = new Keyv('redis://user:pass@localhost:6379'); |
|||
const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname'); |
|||
const keyv = new Keyv('sqlite://path/to/database.sqlite'); |
|||
const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname'); |
|||
const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname'); |
|||
|
|||
// Handle DB connection errors |
|||
keyv.on('error', err => console.log('Connection Error', err)); |
|||
|
|||
await keyv.set('foo', 'expires in 1 second', 1000); // true |
|||
await keyv.set('foo', 'never expires'); // true |
|||
await keyv.get('foo'); // 'never expires' |
|||
await keyv.delete('foo'); // true |
|||
await keyv.clear(); // undefined |
|||
``` |
|||
|
|||
### Namespaces |
|||
|
|||
You can namespace your Keyv instance to avoid key collisions and allow you to clear only a certain namespace while using the same database. |
|||
|
|||
```js |
|||
const users = new Keyv('redis://user:pass@localhost:6379', { namespace: 'users' }); |
|||
const cache = new Keyv('redis://user:pass@localhost:6379', { namespace: 'cache' }); |
|||
|
|||
await users.set('foo', 'users'); // true |
|||
await cache.set('foo', 'cache'); // true |
|||
await users.get('foo'); // 'users' |
|||
await cache.get('foo'); // 'cache' |
|||
await users.clear(); // undefined |
|||
await users.get('foo'); // undefined |
|||
await cache.get('foo'); // 'cache' |
|||
``` |
|||
|
|||
### Custom Serializers |
|||
|
|||
Keyv uses [`json-buffer`](https://github.com/dominictarr/json-buffer) for data serialization to ensure consistency across different backends. |
|||
|
|||
You can optionally provide your own serialization functions to support extra data types or to serialize to something other than JSON. |
|||
|
|||
```js |
|||
const keyv = new Keyv({ serialize: JSON.stringify, deserialize: JSON.parse }) |
|||
``` |
|||
|
|||
**Warning:** Using custom serializers means you lose any guarantee of data consistency. You should do extensive testing with your serialisation functions and chosen storage engine. |
|||
|
|||
## Official Storage Adapters |
|||
|
|||
The official storage adapters are covered by [over 150 integration tests](https://travis-ci.org/lukechilds/keyv/jobs/260418145) to guarantee consistent behaviour. They are lightweight, efficient wrappers over the DB clients making use of indexes and native TTLs where available. |
|||
|
|||
Database | Adapter | Native TTL | Status |
|||
---|---|---|--- |
|||
Redis | [@keyv/redis](https://github.com/lukechilds/keyv-redis) | Yes | [![Build Status](https://travis-ci.org/lukechilds/keyv-redis.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-redis) [![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-redis/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-redis?branch=master) |
|||
MongoDB | [@keyv/mongo](https://github.com/lukechilds/keyv-mongo) | Yes | [![Build Status](https://travis-ci.org/lukechilds/keyv-mongo.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-mongo) [![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-mongo/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-mongo?branch=master) |
|||
SQLite | [@keyv/sqlite](https://github.com/lukechilds/keyv-sqlite) | No | [![Build Status](https://travis-ci.org/lukechilds/keyv-sqlite.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-sqlite) [![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-sqlite/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-sqlite?branch=master) |
|||
PostgreSQL | [@keyv/postgres](https://github.com/lukechilds/keyv-postgres) | No | [![Build Status](https://travis-ci.org/lukechilds/keyv-postgres.svg?branch=master)](https://travis-ci.org/lukechildskeyv-postgreskeyv) [![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-postgres/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-postgres?branch=master) |
|||
MySQL | [@keyv/mysql](https://github.com/lukechilds/keyv-mysql) | No | [![Build Status](https://travis-ci.org/lukechilds/keyv-mysql.svg?branch=master)](https://travis-ci.org/lukechilds/keyv-mysql) [![Coverage Status](https://coveralls.io/repos/github/lukechilds/keyv-mysql/badge.svg?branch=master)](https://coveralls.io/github/lukechilds/keyv-mysql?branch=master) |
|||
|
|||
## Third-party Storage Adapters |
|||
|
|||
You can also use third-party storage adapters or build your own. Keyv will wrap these storage adapters in TTL functionality and handle complex types internally. |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
const myAdapter = require('./my-storage-adapter') |
|||
|
|||
const keyv = new Keyv({ store: myAdapter }) |
|||
``` |
|||
|
|||
Any store that follows the [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) api will work. |
|||
|
|||
```js |
|||
new Keyv({ store: new Map() }) |
|||
``` |
|||
|
|||
For example, [`quick-lru`](https://github.com/sindresorhus/quick-lru) is a completely unrelated module that implements the Map API. |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
const QuickLRU = require('quick-lru') |
|||
|
|||
const lru = new QuickLRU({ maxSize: 1000 }) |
|||
const keyv = new Keyv({ store: lru }) |
|||
``` |
|||
|
|||
The following are third-party storage adapters compatible with Keyv: |
|||
|
|||
- [quick-lru](https://github.com/sindresorhus/quick-lru) - Simple "Least Recently Used" (LRU) cache |
|||
- [keyv-file](https://github.com/zaaack/keyv-file) - File system storage adapter for Keyv |
|||
- [keyv-dynamodb](https://www.npmjs.com/package/keyv-dynamodb) - DynamoDB storage adapter for Keyv |
|||
- [keyv-firestore ](https://github.com/goto-bus-stop/keyv-firestore) – Firebase Cloud Firestore adapter for Keyv |
|||
- [keyv-mssql](https://github.com/pmorgan3/keyv-mssql) - Microsoft Sql Server adapter for Keyv |
|||
- [keyv-memcache](https://github.com/jaredwray/keyv-memcache) - Memcache storage adapter for Keyv |
|||
|
|||
## Add Cache Support to your Module |
|||
|
|||
Keyv is designed to be easily embedded into other modules to add cache support. The recommended pattern is to expose a `cache` option in your modules options which is passed through to Keyv. Caching will work in memory by default and users have the option to also install a Keyv storage adapter and pass in a connection string, or any other storage that implements the `Map` API. |
|||
|
|||
You should also set a namespace for your module so you can safely call `.clear()` without clearing unrelated app data. |
|||
|
|||
Inside your module: |
|||
|
|||
```js |
|||
class AwesomeModule { |
|||
constructor (opts) { |
|||
this.cache = new Keyv({ |
|||
uri: typeof opts.cache === 'string' && opts.cache, |
|||
store: typeof opts.cache !== 'string' && opts.cache, |
|||
namespace: 'awesome-module' |
|||
}) |
|||
} |
|||
} |
|||
``` |
|||
|
|||
Now it can be consumed like this: |
|||
|
|||
```js |
|||
const AwesomeModule = require('awesome-module'); |
|||
|
|||
// Caches stuff in memory by default |
|||
const awesomeModule = new AwesomeModule(); |
|||
|
|||
// After npm install --save keyv-redis |
|||
const awesomeModule = new AwesomeModule({ cache: 'redis://localhost' }); |
|||
|
|||
// Some third-party module that implements the Map API |
|||
const awesomeModule = new AwesomeModule({ cache: some3rdPartyStore }); |
|||
``` |
|||
|
|||
## API |
|||
|
|||
### new Keyv([uri], [options]) |
|||
|
|||
Returns a new Keyv instance. |
|||
|
|||
The Keyv instance is also an `EventEmitter` that will emit an `'error'` event if the storage adapter connection fails. |
|||
|
|||
### uri |
|||
|
|||
Type: `String`<br> |
|||
Default: `undefined` |
|||
|
|||
The connection string URI. |
|||
|
|||
Merged into the options object as options.uri. |
|||
|
|||
### options |
|||
|
|||
Type: `Object` |
|||
|
|||
The options object is also passed through to the storage adapter. Check your storage adapter docs for any extra options. |
|||
|
|||
#### options.namespace |
|||
|
|||
Type: `String`<br> |
|||
Default: `'keyv'` |
|||
|
|||
Namespace for the current instance. |
|||
|
|||
#### options.ttl |
|||
|
|||
Type: `Number`<br> |
|||
Default: `undefined` |
|||
|
|||
Default TTL. Can be overridden by specififying a TTL on `.set()`. |
|||
|
|||
#### options.serialize |
|||
|
|||
Type: `Function`<br> |
|||
Default: `JSONB.stringify` |
|||
|
|||
A custom serialization function. |
|||
|
|||
#### options.deserialize |
|||
|
|||
Type: `Function`<br> |
|||
Default: `JSONB.parse` |
|||
|
|||
A custom deserialization function. |
|||
|
|||
#### options.emitErrors |
|||
|
|||
Type: `Boolean`<br> |
|||
Default: `true` |
|||
|
|||
When it's `true`, errors on `options.store` will be emitted at keyv level. |
|||
|
|||
#### options.store |
|||
|
|||
Type: `Storage adapter instance`<br> |
|||
Default: `new Map()` |
|||
|
|||
The storage adapter instance to be used by Keyv. |
|||
|
|||
#### options.adapter |
|||
|
|||
Type: `String`<br> |
|||
Default: `undefined` |
|||
|
|||
Specify an adapter to use. e.g `'redis'` or `'mongodb'`. |
|||
|
|||
### Instance |
|||
|
|||
Keys must always be strings. Values can be of any type. |
|||
|
|||
#### .set(key, value, [ttl]) |
|||
|
|||
Set a value. |
|||
|
|||
By default keys are persistent. You can set an expiry TTL in milliseconds. |
|||
|
|||
Returns a promise which resolves to `true`. |
|||
|
|||
#### .get(key, [options]) |
|||
|
|||
Returns a promise which resolves to the retrieved value. |
|||
|
|||
##### options.raw |
|||
|
|||
Type: `Boolean`<br> |
|||
Default: `false` |
|||
|
|||
If set to true the raw DB object Keyv stores internally will be returned instead of just the value. |
|||
|
|||
This contains the TTL timestamp. |
|||
|
|||
#### .delete(key) |
|||
|
|||
Deletes an entry. |
|||
|
|||
Returns a promise which resolves to `true` if the key existed, `false` if not. |
|||
|
|||
#### .clear() |
|||
|
|||
Delete all entries in the current namespace. |
|||
|
|||
Returns a promise which is resolved when the entries have been cleared. |
|||
|
|||
## License |
|||
|
|||
**keyv** © [Luke Childs](https://github.com/lukechilds), Released under the [MIT](/LICENSE.md) License.<br> |
|||
Maintained by [Kiko Beats](https://kikobeats.com) and [Jytesh](https://github.com/Jytesh), with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
@ -0,0 +1,35 @@ |
|||
# @keyv/mongo [<img width="100" align="right" src="https://ghcdn.rawgit.org/microlinkhq/keyv/master/media/logo-sunset.svg" alt="keyv">](https://github.com/microlinkhq/keyv) |
|||
|
|||
> MongoDB storage adapter for [Keyv](https://github.com/microlinkhq/keyv). |
|||
|
|||
Uses TTL indexes to automatically remove expired documents. However [MongoDB doesn't guarantee data will be deleted immediately upon expiration](https://docs.mongodb.com/manual/core/index-ttl/#timing-of-the-delete-operation), so expiry dates are revalidated in Keyv. |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/mongo |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify the collection name, by default `'keyv'` is used. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('mongodb://user:pass@localhost:27017/dbname', { collection: 'cache' }) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
**@keyvhq/mongo** © [Microlink](https://microlink.io), Released under the [MIT](https://github.com/microlinkhq/keyv/blob/master/LICENSE.md) License.<br/> |
|||
Authored and maintained by [Microlink](https://microlink.io) with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
|||
|
|||
> [microlink.io](https://microlink.io) · GitHub [@MicrolinkHQ](https://github.com/microlinkhq) · Twitter [@microlinkhq](https://twitter.com/microlinkhq) |
@ -0,0 +1,38 @@ |
|||
# @keyv/mysql [<img width="100" align="right" src="https://ghcdn.rawgit.org/microlinkhq/keyv/master/media/logo-sunset.svg" alt="keyv">](https://github.com/microlinkhq/keyv) |
|||
|
|||
> MySQL/MariaDB storage adapter for [Keyv](https://github.com/microlinkhq/keyv). |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/mysql |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify a custom table with the `table` option and the primary key size with `keySize`. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('mysql://user:pass@localhost:3306/dbname', { |
|||
table: 'cache', |
|||
keySize: 255 |
|||
}) |
|||
``` |
|||
|
|||
**Note:** Some MySQL/MariaDB installations won't allow a key size longer than 767 bytes. If you get an error on table creation try reducing `keySize` to 191 or lower. [#5](https://github.com/microlinkhq/sql/issues/5) |
|||
|
|||
## License |
|||
|
|||
**@keyvhq/mysql** © [Microlink](https://microlink.io), Released under the [MIT](https://github.com/microlinkhq/keyv/blob/master/LICENSE.md) License.<br/> |
|||
Authored and maintained by [Microlink](https://microlink.io) with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
|||
|
|||
> [microlink.io](https://microlink.io) · GitHub [@MicrolinkHQ](https://github.com/microlinkhq) · Twitter [@microlinkhq](https://twitter.com/microlinkhq) |
@ -0,0 +1,35 @@ |
|||
# @keyv/postgres [<img width="100" align="right" src="https://ghcdn.rawgit.org/microlinkhq/keyv/master/media/logo-sunset.svg" alt="keyv">](https://github.com/microlinkhq/keyv) |
|||
|
|||
> PostgreSQL storage adapter for [Keyv](https://github.com/microlinkhq/keyv). |
|||
|
|||
Requires Postgres 9.5 or newer for `ON CONFLICT` support to allow performant upserts. [Why?](https://stackoverflow.com/questions/17267417/how-to-upsert-merge-insert-on-duplicate-update-in-postgresql/17267423#17267423) |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/postgres |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify the `table` option. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('postgresql://user:pass@localhost:5432/dbname', { table: 'cache' }) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
**@keyvhq/postgres** © [Microlink](https://microlink.io), Released under the [MIT](https://github.com/microlinkhq/keyv/blob/master/LICENSE.md) License.<br/> |
|||
Authored and maintained by [Microlink](https://microlink.io) with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
|||
|
|||
> [microlink.io](https://microlink.io) · GitHub [@MicrolinkHQ](https://github.com/microlinkhq) · Twitter [@microlinkhq](https://twitter.com/microlinkhq) |
@ -0,0 +1,14 @@ |
|||
# @keyv/sql [<img width="100" align="right" src="https://ghcdn.rawgit.org/microlinkhq/keyv/master/media/logo-sunset.svg" alt="keyv">](https://github.com/microlinkhq/keyv) |
|||
|
|||
Parent class containing the common logic for SQL based Keyv storage adapters: |
|||
|
|||
- [`@keyv/sqlite`](https://github.com/microlinkhq/packageS/sqlite) |
|||
- [`@keyv/postgres`](https://github.com/microlinkhq/packageS/postgres) |
|||
- [`@keyv/mysql`](https://github.com/microlinkhq/packageS/mysql) |
|||
|
|||
## License |
|||
|
|||
**@keyvhq/sql** © [Microlink](https://microlink.io), Released under the [MIT](https://github.com/microlinkhq/keyv/blob/master/LICENSE.md) License.<br/> |
|||
Authored and maintained by [Microlink](https://microlink.io) with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
|||
|
|||
> [microlink.io](https://microlink.io) · GitHub [@MicrolinkHQ](https://github.com/microlinkhq) · Twitter [@microlinkhq](https://twitter.com/microlinkhq) |
@ -0,0 +1,36 @@ |
|||
# @keyv/sqlite [<img width="100" align="right" src="https://ghcdn.rawgit.org/microlinkhq/keyv/master/media/logo-sunset.svg" alt="keyv">](https://github.com/microlinkhq/keyv) |
|||
|
|||
SQLite storage adapter for [Keyv](https://github.com/microlinkhq/keyv). |
|||
|
|||
## Install |
|||
|
|||
```shell |
|||
npm install --save keyv @keyv/sqlite |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
```js |
|||
const Keyv = require('keyv') |
|||
|
|||
const keyv = new Keyv('sqlite://path/to/database.sqlite') |
|||
keyv.on('error', handleConnectionError) |
|||
``` |
|||
|
|||
You can specify the `table` and [`busyTimeout`](https://sqlite.org/c3ref/busy_timeout.html) option. |
|||
|
|||
e.g: |
|||
|
|||
```js |
|||
const keyv = new Keyv('sqlite://path/to/database.sqlite', { |
|||
table: 'cache', |
|||
busyTimeout: 10000 |
|||
}) |
|||
``` |
|||
|
|||
## License |
|||
|
|||
**@keyvhq/sqlite** © [Microlink](https://microlink.io), Released under the [MIT](https://github.com/microlinkhq/keyv/blob/master/LICENSE.md) License.<br/> |
|||
Authored and maintained by [Microlink](https://microlink.io) with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
|||
|
|||
> [microlink.io](https://microlink.io) · GitHub [@MicrolinkHQ](https://github.com/microlinkhq) · Twitter [@microlinkhq](https://twitter.com/microlinkhq) |
@ -0,0 +1,64 @@ |
|||
# @keyv/test-suite [<img width="100" align="right" src="https://ghcdn.rawgit.org/microlinkhq/keyv/master/media/logo-sunset.svg" alt="keyv">](https://github.com/microlinkhq/keyv) |
|||
|
|||
Complete [AVA](https://github.com/avajs/ava) test suite to test a [Keyv](https://github.com/microlinkhq/keyv) storage adapter for API compliance. |
|||
|
|||
## Usage |
|||
|
|||
### Install |
|||
|
|||
Install AVA, Keyv and `@keyv/test-suite` as development dependencies. |
|||
|
|||
```shell |
|||
npm install --save-dev ava keyv @keyv/test-suite |
|||
``` |
|||
|
|||
Then update `keyv` and `@keyv/test-suite` versions to `*` in `package.json` to ensure you're always testing against the latest version. |
|||
|
|||
### Create Test File |
|||
|
|||
`test.js` |
|||
|
|||
```js |
|||
import test from 'ava' |
|||
import keyvTestSuite from '@keyv/test-suite' |
|||
import Keyv from 'keyv' |
|||
import KeyvStore from './' |
|||
|
|||
const store = () => new KeyvStore() |
|||
keyvTestSuite(test, Keyv, store) |
|||
``` |
|||
|
|||
Where `KeyvStore` is your storage adapter. |
|||
|
|||
Set your test script in `package.json` to `ava`. |
|||
```json |
|||
"scripts": { |
|||
"test": "ava" |
|||
} |
|||
``` |
|||
|
|||
### Test on Active Node.js LTS and Higher |
|||
|
|||
An example configuration for Travis CI would look like this: |
|||
|
|||
`.travis.yml` |
|||
|
|||
```yaml |
|||
language: node_js |
|||
node_js: |
|||
- '8' |
|||
- '6' |
|||
- '4' |
|||
script: npm test |
|||
``` |
|||
|
|||
## Example |
|||
|
|||
Take a look at [redis](https://github.com/microlinkhq/redis) for an example of an existing storage adapter using `@keyv/test-suite`. |
|||
|
|||
## License |
|||
|
|||
**@keyvhq/test-suite** © [Microlink](https://microlink.io), Released under the [MIT](https://github.com/microlinkhq/keyv/blob/master/LICENSE.md) License.<br/> |
|||
Authored and maintained by [Microlink](https://microlink.io) with help from [contributors](https://github.com/microlinkhq/keyv/contributors). |
|||
|
|||
> [microlink.io](https://microlink.io) · GitHub [@MicrolinkHQ](https://github.com/microlinkhq) · Twitter [@microlinkhq](https://twitter.com/microlinkhq) |
Loading…
Reference in new issue