Socket
Socket
Sign inDemoInstall

koa-redis

Package Overview
Dependencies
17
Maintainers
3
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.1.3 to 4.0.0

HISTORY.md

153

package.json
{
"name": "koa-redis",
"description": "koa session with redis using koa-generic-session",
"repository": "koajs/koa-redis",
"description": "Redis storage for Koa session middleware/cache with Sentinel and Cluster support",
"version": "4.0.0",
"author": "dead_horse <dead_horse@qq.com>",
"bugs": {
"url": "https://github.com/koajs/koa-redis/issues"
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
"contributors": [
"dead_horse <dead_horse@qq.com>",
"Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com/)"
],
"dependencies": {
"@babel/runtime": "^7.4.3",
"co-wrap-all": "^1.0.0",
"debug": "^4.1.1",
"ioredis": "^4.9.0"
},
"devDependencies": {
"@babel/cli": "^7.4.3",
"@babel/core": "^7.4.3",
"@babel/plugin-transform-runtime": "^7.4.3",
"@babel/preset-env": "^7.4.3",
"@commitlint/cli": "^7.5.2",
"@commitlint/config-conventional": "^7.5.0",
"autod": "^3.1.0",
"co-mocha": "^1.2.2",
"connect": "^3.6.6",
"connect-redis": "^3.4.1",
"eslint": "^5.16.0",
"eslint-config-xo-lass": "^1.0.3",
"eslint-plugin-node": "^8.0.1",
"fixpack": "^2.3.1",
"husky": "^2.1.0",
"istanbul": "^0.4.5",
"koa": "^2.7.0",
"koa-generic-session": "^2.0.1",
"lint-staged": "^8.1.5",
"mocha": "3.5.3",
"remark-cli": "^6.0.1",
"remark-preset-github": "^0.0.13",
"rimraf": "^2.6.3",
"should": "^13.2.3",
"xo": "^0.24.0"
},
"engines": {
"node": ">= 4"
},
"files": [
"index.js"
"lib"
],
"homepage": "https://github.com/koajs/koa-redis",
"version": "3.1.3",
"main": "index.js",
"scripts": {
"test": "istanbul cover node_modules/mocha/bin/_mocha -- --require co-mocha \"test/**/*.test.js\"",
"test-only": "mocha --require co-mocha \"test/**/*.test.js\"",
"autod": "autod -w --prefix=^ --keep=koa -D co-mocha,mocha,istanbul,autod"
"husky": {
"hooks": {
"pre-commit": "npm test",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"keywords": [
"cache",
"caching",
"client",
"clients",
"cluster",
"clustering",
"clusters",
"express",
"ioredis",
"koa",
"middleware",
"multiple",
"node",
"nodes",
"redis",
"scale",
"sentinal",
"sentinals",
"sentinel",
"sentinels",
"session",
"redis"
"storage",
"store"
],
"author": "dead_horse <dead_horse@qq.com>",
"dependencies": {
"co-redis": "^2.1.1",
"co-wrap-all": "^1.0.0",
"debug": "^3.1.0",
"redis": "^2.8.0"
"license": "MIT",
"lint-staged": {
"linters": {
"*.js": [
"xo --fix",
"git add"
],
"*.md": [
"remark . -qfo",
"git add"
],
"package.json": [
"fixpack",
"git add"
]
}
},
"devDependencies": {
"autod": "^2.9.0",
"co-mocha": "^1.2.0",
"connect": "^3.6.3",
"connect-redis": "^3.3.0",
"istanbul": "^0.4.5",
"koa": "^2.3.0",
"koa-generic-session": "^2.0.0",
"mocha": "^3.5.0",
"should": "^13.0.1"
"main": "lib/index.js",
"prettier": {
"singleQuote": true,
"bracketSpacing": true,
"trailingComma": "none"
},
"engines": {
"node": ">= 4"
"remarkConfig": {
"plugins": [
"preset-github"
]
},
"license": "MIT"
"repository": "koajs/koa-redis",
"scripts": {
"autod": "autod -w --prefix=^ --keep=koa -D co-mocha,mocha,istanbul,autod",
"build": "npm run build:clean && npm run build:lib",
"build:clean": "rimraf lib",
"build:lib": "babel src --out-dir lib",
"lint": "xo && remark . -qfo && eslint lib",
"test": "npm run build && npm run lint && istanbul cover node_modules/mocha/bin/_mocha -- --require co-mocha \"test/**/*.test.js\"",
"test-only": "mocha --require co-mocha \"test/**/*.test.js\""
},
"xo": {
"prettier": true,
"space": true,
"extends": [
"xo-lass"
],
"overrides": [
{
"files": "test/**/*.js",
"envs": [
"mocha"
]
}
]
}
}

298

README.md

@@ -1,5 +0,3 @@

koa-redis
=========
# koa-redis
[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]

@@ -9,31 +7,54 @@ [![Coveralls][coveralls-image]][coveralls-url]

[![David devDeps][david-dev-image]][david-dev-url]
[![node version][node-image]][node-url]
[![npm download][download-image]][download-url]
[![license][license-image]][license-url]
[![code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg?style=flat-square)](https://github.com/sindresorhus/xo)
[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![made with lass](https://img.shields.io/badge/made_with-lass-95CC28.svg?style=flat-square)](https://lass.js.org)
[npm-image]: https://img.shields.io/npm/v/koa-redis.svg?style=flat-square
[npm-url]: https://npmjs.org/package/koa-redis
[travis-image]: https://img.shields.io/travis/koajs/koa-redis.svg?style=flat-square
[travis-url]: https://travis-ci.org/koajs/koa-redis
[coveralls-image]: https://img.shields.io/coveralls/koajs/koa-redis.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/koajs/koa-redis?branch=master
[david-image]: https://img.shields.io/david/koajs/koa-redis.svg?style=flat-square&label=deps
[david-url]: https://david-dm.org/koajs/koa-redis
[david-dev-image]: https://img.shields.io/david/dev/koajs/koa-redis.svg?style=flat-square&label=devDeps
[david-dev-url]: https://david-dm.org/koajs/koa-redis#info=devDependencies
[david-opt-image]: https://img.shields.io/david/optional/koajs/koa-redis.svg?style=flat-square&label=optDeps
[david-opt-url]: https://david-dm.org/koajs/koa-redis#info=devDependencies
[node-image]: https://img.shields.io/node/v/koa-redis.svg?style=flat-square
[node-url]: http://nodejs.org/download/
[download-image]: https://img.shields.io/npm/dm/koa-redis.svg?style=flat-square
[download-url]: https://npmjs.org/package/koa-redis
[gittip-image]: https://img.shields.io/gittip/dead-horse.svg?style=flat-square
[gittip-url]: https://www.gittip.com/dead-horse/
[license-image]: https://img.shields.io/npm/l/koa-redis.svg?style=flat-square
[license-url]: https://github.com/koajs/koa-redis/blob/master/LICENSE
> Redis storage for Koa session middleware/cache with Sentinel and Cluster support
Redis storage for koa session middleware/cache.
[![NPM](https://nodei.co/npm/koa-redis.svg?downloads=true)](https://nodei.co/npm/koa-redis/)
**v4.0.0+ now uses `ioredis` and has support for Sentinel and Cluster!**
## Table of Contents
* [Install](#install)
* [Usage](#usage)
* [Basic](#basic)
* [Sentinel](#sentinel)
* [Cluster](#cluster)
* [Options](#options)
* [Events](#events)
* [API](#api)
* [module(options)](#moduleoptions)
* [session.get(sid)](#sessiongetsid)
* [session.set(sid, sess, ttl)](#sessionsetsid-sess-ttl)
* [session.destroy(sid)](#sessiondestroysid)
* [session.quit()](#sessionquit)
* [session.end()](#sessionend)
* [session.status](#sessionstatus)
* [session.connected](#sessionconnected)
* [session.client](#sessionclient)
* [Benchmark](#benchmark)
* [Testing](#testing)
* [License](#license)
* [Contributors](#contributors)
## Install
[npm][]:
```sh
npm install koa-redis
```
[yarn][]:
```sh
yarn add koa-redis
```
## Usage

@@ -43,10 +64,12 @@

### Example
For more examples, please see the [examples folder of `koa-generic-session`](https://github.com/koajs/generic-session/tree/master/example).
### Basic
```js
var session = require('koa-generic-session');
var redisStore = require('koa-redis');
var koa = require('koa');
const session = require('koa-generic-session');
const redisStore = require('koa-redis');
const koa = require('koa');
var app = koa();
const app = koa();
app.keys = ['keys', 'keykeys'];

@@ -74,3 +97,3 @@ app.use(session({

function get() {
var session = this.session;
const session = this.session;
session.count = session.count || 0;

@@ -94,31 +117,98 @@ session.count++;

```
For more examples, please see the [examples folder of `koa-generic-session`](https://github.com/koajs/generic-session/tree/master/example).
### Options
### Sentinel
- *all [`node_redis`](https://www.npmjs.com/package/redis#options-is-an-object-with-the-following-possible-properties) options* - Useful things include `url`, `host`, `port`, and `path` to the server. Defaults to `127.0.0.1:6379`
- `db` (number) - will run `client.select(db)` after connection
- `client` (object) - supply your own client, all other options are ignored unless `duplicate` is also supplied
- `duplicate` (boolean) - When true, it will run `client.duplicate(options)` on the supplied `client` and use all other options supplied. This is useful if you want to select a different DB for sessions but also want to base from the same client object.
- `serialize` - Used to serialize the data that is saved into the store.
- `unserialize` - Used to unserialize the data that is fetched from the store.
- **DEPRECATED:** old options - `pass` and `socket` have been replaced by `auth_pass` and `path`, but they should be backward compatible (still work).
```js
const session = require('koa-generic-session');
const redisStore = require('koa-redis');
const koa = require('koa');
### Events
See the [`node_redis` docs](https://www.npmjs.com/package/redis#connection-events) for more info.
- `ready`
- `connect`
- `reconnecting`
- `error`
- `end`
- `warning`
const app = koa();
app.keys = ['keys', 'keykeys'];
app.use(session({
store: redisStore({
// Options specified here
// <https://github.com/luin/ioredis#sentinel>
sentinels: [
{ host: 'localhost', port: 26379 },
{ host: 'localhost', port: 26380 }
// ...
],
name: 'mymaster'
})
}));
### API
// ...
```
### Cluster
```js
const session = require('koa-generic-session');
const redisStore = require('koa-redis');
const koa = require('koa');
const app = koa();
app.keys = ['keys', 'keykeys'];
app.use(session({
store: redisStore({
// Options specified here
// <https://github.com/luin/ioredis#cluster>
isRedisCluster: true,
nodes: [
{
port: 6380,
host: '127.0.0.1'
},
{
port: 6381,
host: '127.0.0.1'
}
// ...
],
// <https://github.com/luin/ioredis/blob/master/API.md#new-clusterstartupnodes-options>
clusterOptions: {
// ...
redisOptions: {
// ...
}
}
})
}));
// ...
```
## Options
* _all [`ioredis`](https://github.com/luin/ioredis/blob/master/API.md#new-redisport-host-options) options_ - Useful things include `url`, `host`, `port`, and `path` to the server. Defaults to `127.0.0.1:6379`
* `db` (number) - will run `client.select(db)` after connection
* `client` (object) - supply your own client, all other options are ignored unless `duplicate` is also supplied
* `duplicate` (boolean) - When true, it will run `client.duplicate()` on the supplied `client` and use all other options supplied. This is useful if you want to select a different DB for sessions but also want to base from the same client object.
* `serialize` - Used to serialize the data that is saved into the store.
* `unserialize` - Used to unserialize the data that is fetched from the store.
* `isRedisCluster` (boolean) - Used for creating a Redis cluster instance per [`ioredis`][cluster] Cluster options, if set to `true`, then a new Redis cluster will be instantiated with `new Redis.Cluster(options.nodes, options.clusterOptions)` (see [Cluster docs][cluster] for more info).
* `nodes` (array) - Conditionally used for creating a Redis cluster instance when `isRedisCluster` option is `true`, this is the first argument passed to `new Redis.Cluster` and contains a list of all the nodes of the cluster ou want to connect to (see [Cluster docs][cluster] for more info).
* `clusterOptions` (object) - Conditionally used for created a Redi cluster instance when `isRedisCluster` option is `true`, this is the second argument passed to `new Redis.Cluster` and contains options, such as `redisOptions` (see [Cluster docs][cluster] for more info).
* **DEPRECATED:** old options - `auth_pass` and `pass` have been replaced with `password`, and `socket` has been replaced with `path`, however all of these options are backwards compatible.
## Events
See the [`ioredis` docs](https://github.com/luin/ioredis#connection-events) for more info.
**Note that as of v4.0.0 the `disconnect` and `warning` events are removed as `ioredis` does not support them. The `disconnect` event is deprecated, although it is still emitted when `end` events are emitted.**
## API
These are some the functions that `koa-generic-session` uses that you can use manually. You will need to initialize differently than the example above:
```js
var session = require('koa-generic-session');
var redisStore = require('koa-redis')({
const session = require('koa-generic-session');
const redisStore = require('koa-redis')({
// Options specified here
});
var app = require('koa')();
const app = require('koa')();

@@ -131,41 +221,53 @@ app.keys = ['keys', 'keykeys'];

#### module([options])
Initialize the Redis connection with the optionally provided options (see above). *The variable `session` below references this*.
### module([options](#options))
#### session.get(sid)
Initialize the Redis connection with the optionally provided options (see above). _The variable `session` below references this_.
### session.get(sid)
Generator that gets a session by ID. Returns parsed JSON is exists, `null` if it does not exist, and nothing upon error.
#### session.set(sid, sess, ttl)
Generator that sets a JSON session by ID with an optional time-to-live (ttl) in milliseconds. Yields `node_redis`'s `client.set()` or `client.setex()`.
### session.set(sid, sess, ttl)
#### session.destroy(sid)
Generator that destroys a session (removes it from Redis) by ID. Tields `node_redis`'s `client.del()`.
Generator that sets a JSON session by ID with an optional time-to-live (ttl) in milliseconds. Yields `ioredis`'s `client.set()` or `client.setex()`.
#### session.quit()
Generator that stops a Redis session after everything in the queue has completed. Yields `node_redis`'s `client.quit()`.
### session.destroy(sid)
#### session.end()
Generator that destroys a session (removes it from Redis) by ID. Tields `ioredis`'s `client.del()`.
### session.quit()
Generator that stops a Redis session after everything in the queue has completed. Yields `ioredis`'s `client.quit()`.
### session.end()
Alias to `session.quit()`. It is not safe to use the real end function, as it cuts off the queue.
#### session.connected
Boolean giving the connection status updated using `client.connected` after any of the events above is fired.
### session.status
#### session.\_redisClient
Direct access to the `node_redis` client object.
String giving the connection status updated using `client.status`.
#### session.client
Direct access to the `co-redis` wrapper around the `node_redis` client.
### session.connected
Boolean giving the connection status updated using `client.status` after any of the events above is fired.
### session.client
Direct access to the `ioredis` client object.
## Benchmark
|Server|Transaction rate|Response time|
|------|----------------|-------------|
|connect without session|**6763.56 trans/sec**|**0.01 secs**|
|koa without session|**5684.75 trans/sec**|**0.01 secs**|
|connect with session|**2759.70 trans/sec**|**0.02 secs**|
|koa with session|**2355.38 trans/sec**|**0.02 secs**|
| Server | Transaction rate | Response time |
| ----------------------- | --------------------- | ------------- |
| connect without session | **6763.56 trans/sec** | **0.01 secs** |
| koa without session | **5684.75 trans/sec** | **0.01 secs** |
| connect with session | **2759.70 trans/sec** | **0.02 secs** |
| koa with session | **2355.38 trans/sec** | **0.02 secs** |
Detailed benchmark report [here](https://github.com/koajs/koa-redis/tree/master/benchmark)
## Testing
1. Start a Redis server on `localhost:6379`. You can use [`redis-windows`](https://github.com/ServiceStack/redis-windows) if you are on Windows or just want a quick VM-based server.

@@ -176,14 +278,42 @@ 2. Clone the repository and run `npm i` in it (Windows should work fine).

## Authors
See the [contributing tab](https://github.com/koajs/koa-redis/graphs/contributors)
## Licences
(The MIT License)
## License
Copyright (c) 2015 dead-horse and other contributors
[MIT](LICENSE) © dead_horse
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
## Contributors
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
| Name | Website |
| -------------- | -------------------------- |
| **dead_horse** | |
| **Nick Baugh** | <http://niftylettuce.com/> |
##
[travis-image]: https://img.shields.io/travis/koajs/koa-redis.svg?style=flat-square
[travis-url]: https://travis-ci.org/koajs/koa-redis
[coveralls-image]: https://img.shields.io/coveralls/koajs/koa-redis.svg?style=flat-square
[coveralls-url]: https://coveralls.io/r/koajs/koa-redis?branch=master
[david-image]: https://img.shields.io/david/koajs/koa-redis.svg?style=flat-square&label=deps
[david-url]: https://david-dm.org/koajs/koa-redis
[david-dev-image]: https://img.shields.io/david/dev/koajs/koa-redis.svg?style=flat-square&label=devDeps
[david-dev-url]: https://david-dm.org/koajs/koa-redis#info=devDependencies
[license-image]: https://img.shields.io/npm/l/koa-redis.svg?style=flat-square
[license-url]: https://github.com/koajs/koa-redis/blob/master/LICENSE
[cluster]: https://github.com/luin/ioredis/blob/master/API.md#new-clusterstartupnodes-options
[npm]: https://www.npmjs.com/
[yarn]: https://yarnpkg.com/
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc