@eggjs/redis

Valkey / Redis client (support redis protocol) based on iovalkey for egg framework
Version Notes
@eggjs/redis only supports egg@4 now, if you are using egg@3 or egg@2, you should use egg-redis.
Install
npm i @eggjs/redis
Valkey / 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.
Configuration
Change ${app_root}/config/plugin.ts to enable redis plugin:
export default {
redis: {
enable: true,
package: '@eggjs/redis',
},
};
Configure redis information in ${app_root}/config/config.default.ts:
Single Client
import { defineConfig } from 'egg';
export default defineConfig({
redis: {
client: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 0,
},
},
});
Multi Clients
import { defineConfig } from 'egg';
export default defineConfig({
redis: {
clients: {
foo: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 0,
},
bar: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 1,
},
},
},
});
Sentinel
import { defineConfig } from 'egg';
export default defineConfig({
redis: {
client: {
sentinels: [
{
port: 26379,
host: '127.0.0.1',
},
],
name: 'mymaster',
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 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
@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:
import { defineConfig } from 'egg';
export default defineConfig({
redis: {
Redis: require('ioredis'),
client: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 0,
},
},
});
weakDependent
import { defineConfig } from 'egg';
export default defineConfig({
redis: {
client: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 0,
weakDependent: true,
},
},
});
Usage
In controller, you can use app.redis to get the redis instance, check ioredis to see how to use.
import { Controller } from 'egg';
export default class HomeController extends Controller {
async index() {
const { ctx, app } = this;
await app.redis.set('foo', 'bar');
ctx.body = await app.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.
export default class HomeController extends Controller {
async index() {
const { ctx, app } = this;
await app.redis.getSingletonInstance('instance1').set('foo', 'bar');
ctx.body = await app.redis.getSingletonInstance('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.
import { defineConfig } from 'egg';
export default defineConfig({
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',
},
],
},
},
});
import { Controller } from 'egg';
export default class HomeController extends Controller {
async index() {
const { ctx, app } = this;
await app.redis.set('foo', 'bar');
ctx.body = await app.redis.get('foo');
}
}
For the local dev
Run docker compose to start test redis service
docker compose -f docker-compose.yml up -d
Run the unit tests
pnpm test
Stop test redis service
docker compose -f docker-compose.yml down
Questions & Suggestions
Please open an issue here.
License
MIT
Contributors

Made with contributors-img.