Redis client(support redis protocol) based on ioredis for egg framework
npm i egg-redis --saveredis 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.
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 passwordBecause 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.
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},}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');}};};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');}};};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');}};};Please open an issue here.
Made with contributors-img.