Valkey / Redis client (support redis protocol) based on iovalkey for egg framework
npm i @eggjs/redisValkey / Redis Plugin for egg, support egg application access to Valkey / Redis Service.
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: '@eggjs/redis',
};Configure redis information in ${app_root}/config/config.default.js:
Single Client
config.redis = {
client: {
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
password: 'auth',
db: 0,
},
}Multi Clients
config.redis = {
clients: {
foo: { // instanceName. See below
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
password: 'auth',
db: 0,
},
bar: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 1,
},
}
}Sentinel
config.redis = {
client: {
// Sentinel instances
sentinels: [
{
port: 26379, // Sentinel port
host: '127.0.0.1', // Sentinel host
},
// other sentinel instance config
],
name: 'mymaster', // Master name
password: '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.
@eggjs/redis using ioredis@5 now, if you want to use other version of iovalkey or ioredis,
you can pass the instance by config.redis.Redis:
// config/config.default.js
config.redis = {
Redis: require('ioredis'), // customize ioredis version, only set when you needed
client: {
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
password: 'auth',
db: 0,
},
}weakDependent
config.redis = {
client: {
port: 6379, // Redis port
host: '127.0.0.1', // Redis host
password: 'auth',
db: 0,
weakDependent: true, // the 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.js
module.exports = app => {
return class HomeController extends app.Controller {
async index() {
const { ctx, app } = this;
// set
await app.redis.set('foo', 'bar');
// get
ctx.body = await app.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.js
module.exports = app => {
return class HomeController extends app.Controller {
async index() {
const { ctx, app } = this;
// set
await app.redis.get('instance1').set('foo', 'bar');
// get
ctx.body = await app.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.js
exports.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.js
module.exports = app => {
return class HomeController extends app.Controller {
async index() {
const { ctx, app } = this;
// set
await app.redis.set('foo', 'bar');
// get
ctx.body = await app.redis.get('foo');
}
};
};Please open an issue here.
Made with contributors-img.