Skip to content

Repository files navigation

egg-redis

NPM versionNode.js CITest coverageKnown Vulnerabilitiesnpm downloadNode.js VersionPRs WelcomeCodeRabbit Pull Request Reviews

Redis client(support redis protocol) based on ioredis for egg framework

Install

npm i egg-redis --save

redis Plugin for egg, support egg application access to redis.

This plugin based on ioredis, if you want to know specific usage, you should refer to the document of ioredis.

Configuration

Change ${app_root}/config/plugin.js to enable redis plugin:

exports.redis={enable: true,package: 'egg-redis',};

Configure redis information in ${app_root}/config/config.default.js:

Single Client

config.redis={client: {port: 6379,// Redis porthost: '127.0.0.1',// Redis hostpassword: 'auth',db: 0,},}

Multi Clients

config.redis={clients: {foo: {// instanceName. See belowport: 6379,// Redis porthost: '127.0.0.1',// Redis hostpassword: 'auth',db: 0,},bar: {port: 6379,host: '127.0.0.1',password: 'auth',db: 1,},}}

Sentinel

config.redis={client: {sentinels: [{// Sentinel instancesport: 26379,// Sentinel porthost: '127.0.0.1',// Sentinel host}],name: 'mymaster',// Master namepassword: 'auth',db: 0},}

No password

Redis support no authentication access, but we are highly recommend you to use redis requirepass in redis.conf.

$vim /etc/redis/redis.conf
requirepass xxxxxxxxxx // xxxxxxxxxx is your password

Because it may be cause security risk, refer:

If you want to access redis with no password, use password: null.

See ioredis API Documentation for all available options.

Customize ioredis version

egg-redis using ioredis@4 now, if you want to use other version of ioredis, you can pass the instance by config.redis.Redis:

// config/config.default.jsconfig.redis={Redis: require('ioredis'),// customize ioredis version, only set when you neededclient: {port: 6379,// Redis porthost: '127.0.0.1',// Redis hostpassword: 'auth',db: 0,},}

weakDependent

config.redis={client: {port: 6379,// Redis porthost: '127.0.0.1',// Redis hostpassword: 'auth',db: 0,weakDependent: true,// this redis instance won't block app start},}

Usage

In controller, you can use app.redis to get the redis instance, check ioredis to see how to use.

// app/controller/home.jsmodule.exports=app=>{returnclassHomeControllerextendsapp.Controller{asyncindex(){const{ ctx, app }=this;// setawaitapp.redis.set('foo','bar');// getctx.body=awaitapp.redis.get('foo');}};};

Multi Clients

If your Configure with multi clients, you can use app.redis.get(instanceName) to get the specific redis instance and use it like above.

// app/controller/home.jsmodule.exports=app=>{returnclassHomeControllerextendsapp.Controller{asyncindex(){const{ ctx, app }=this;// setawaitapp.redis.get('instance1').set('foo','bar');// getctx.body=awaitapp.redis.get('instance1').get('foo');}};};

Clients Depend on Redis Cluster

Before you start to use Redis Cluster, please checkout the document first, especially confirm cluster-enabled yes in Redis Cluster configuration file.

In controller, you also can use app.redis to get the redis instance based on Redis Cluster.

// app/config/config.default.jsexports.redis={client: {cluster: true,nodes: [{host: '127.0.0.1',port: '6379',family: 'user',password: 'password',db: 'db',},{host: '127.0.0.1',port: '6380',family: 'user',password: 'password',db: 'db',}]},};// app/controller/home.jsmodule.exports=app=>{returnclassHomeControllerextendsapp.Controller{asyncindex(){const{ ctx, app }=this;// setawaitapp.redis.set('foo','bar');// getctx.body=awaitapp.redis.get('foo');}};};

Questions & Suggestions

Please open an issue here.

License

MIT

Contributors

Contributors

Made with contributors-img.

About

redis plugin for egg

Topics

Resources

Stars

267 stars

Watchers

11 watching

Forks

Releases

Used by

Contributors

Languages