@eggjs/redis 3.0.0 → 4.0.0-beta.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +169 -124
- package/dist/agent.d.ts +2 -0
- package/dist/agent.js +3 -0
- package/dist/app.d.ts +2 -0
- package/dist/app.js +3 -0
- package/dist/{commonjs/config → config}/config.default.d.ts +2 -2
- package/dist/{esm/config → config}/config.default.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/{esm/index.js → index.js} +2 -2
- package/dist/{commonjs/lib → lib}/redis.d.ts +2 -2
- package/dist/lib/redis.js +76 -0
- package/dist/types.d.ts +14 -0
- package/dist/{esm/types.js → types.js} +1 -1
- package/package.json +49 -69
- package/dist/commonjs/agent.d.ts +0 -2
- package/dist/commonjs/agent.js +0 -5
- package/dist/commonjs/app.d.ts +0 -2
- package/dist/commonjs/app.js +0 -5
- package/dist/commonjs/config/config.default.js +0 -55
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +0 -4
- package/dist/commonjs/lib/redis.js +0 -87
- package/dist/commonjs/package.json +0 -3
- package/dist/commonjs/types.d.ts +0 -11
- package/dist/commonjs/types.js +0 -3
- package/dist/esm/agent.d.ts +0 -2
- package/dist/esm/agent.js +0 -3
- package/dist/esm/app.d.ts +0 -2
- package/dist/esm/app.js +0 -3
- package/dist/esm/config/config.default.d.ts +0 -59
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/lib/redis.d.ts +0 -6
- package/dist/esm/lib/redis.js +0 -80
- package/dist/esm/package.json +0 -3
- package/dist/esm/types.d.ts +0 -11
- package/dist/package.json +0 -4
- package/src/agent.ts +0 -3
- package/src/app.ts +0 -3
- package/src/config/config.default.ts +0 -111
- package/src/index.ts +0 -1
- package/src/lib/redis.ts +0 -92
- package/src/types.ts +0 -14
- package/src/typings/index.d.ts +0 -4
package/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# @eggjs/redis
|
|
2
2
|
|
|
3
3
|
[![NPM version][npm-image]][npm-url]
|
|
4
|
-
[](https://github.com/eggjs/redis/actions/workflows/nodejs.yml)
|
|
5
|
-
[![Test coverage][codecov-image]][codecov-url]
|
|
6
4
|
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
7
5
|
[![npm download][download-image]][download-url]
|
|
8
6
|
[](https://nodejs.org/en/download/)
|
|
@@ -11,8 +9,6 @@
|
|
|
11
9
|
|
|
12
10
|
[npm-image]: https://img.shields.io/npm/v/@eggjs/redis.svg?style=flat-square
|
|
13
11
|
[npm-url]: https://npmjs.org/package/@eggjs/redis
|
|
14
|
-
[codecov-image]: https://codecov.io/gh/eggjs/redis/branch/master/graph/badge.svg
|
|
15
|
-
[codecov-url]: https://codecov.io/gh/eggjs/redis
|
|
16
12
|
[snyk-image]: https://snyk.io/test/npm/@eggjs/redis/badge.svg?style=flat-square
|
|
17
13
|
[snyk-url]: https://snyk.io/test/npm/@eggjs/redis
|
|
18
14
|
[download-image]: https://img.shields.io/npm/dm/@eggjs/redis.svg?style=flat-square
|
|
@@ -20,6 +16,10 @@
|
|
|
20
16
|
|
|
21
17
|
Valkey / Redis client (support [redis protocol](https://redis.io/docs/latest/develop/reference/protocol-spec/)) based on iovalkey for egg framework
|
|
22
18
|
|
|
19
|
+
## Version Notes
|
|
20
|
+
|
|
21
|
+
`@eggjs/redis` only supports `egg@4` now, if you are using `egg@3` or `egg@2`, you should use [`egg-redis`](https://github.com/eggjs/redis/tree/2.x).
|
|
22
|
+
|
|
23
23
|
## Install
|
|
24
24
|
|
|
25
25
|
```bash
|
|
@@ -33,69 +33,83 @@ If you want to know specific usage, you should refer to the document of [ioredis
|
|
|
33
33
|
|
|
34
34
|
## Configuration
|
|
35
35
|
|
|
36
|
-
Change `${app_root}/config/plugin.
|
|
36
|
+
Change `${app_root}/config/plugin.ts` to enable redis plugin:
|
|
37
37
|
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
```ts
|
|
39
|
+
export default {
|
|
40
|
+
redis: {
|
|
41
|
+
enable: true,
|
|
42
|
+
package: '@eggjs/redis',
|
|
43
|
+
},
|
|
42
44
|
};
|
|
43
45
|
```
|
|
44
46
|
|
|
45
|
-
Configure redis information in `${app_root}/config/config.default.
|
|
47
|
+
Configure redis information in `${app_root}/config/config.default.ts`:
|
|
46
48
|
|
|
47
49
|
**Single Client**
|
|
48
50
|
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
```ts
|
|
52
|
+
import { defineConfig } from 'egg';
|
|
53
|
+
|
|
54
|
+
export default defineConfig({
|
|
55
|
+
redis: {
|
|
56
|
+
client: {
|
|
57
|
+
port: 6379, // Redis port
|
|
58
|
+
host: '127.0.0.1', // Redis host
|
|
59
|
+
password: 'auth',
|
|
60
|
+
db: 0,
|
|
61
|
+
},
|
|
56
62
|
},
|
|
57
|
-
}
|
|
63
|
+
});
|
|
58
64
|
```
|
|
59
65
|
|
|
60
66
|
**Multi Clients**
|
|
61
67
|
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
```ts
|
|
69
|
+
import { defineConfig } from 'egg';
|
|
70
|
+
|
|
71
|
+
export default defineConfig({
|
|
72
|
+
redis: {
|
|
73
|
+
clients: {
|
|
74
|
+
foo: {
|
|
75
|
+
// instanceName. See below
|
|
76
|
+
port: 6379, // Redis port
|
|
77
|
+
host: '127.0.0.1', // Redis host
|
|
78
|
+
password: 'auth',
|
|
79
|
+
db: 0,
|
|
80
|
+
},
|
|
81
|
+
bar: {
|
|
82
|
+
port: 6379,
|
|
83
|
+
host: '127.0.0.1',
|
|
84
|
+
password: 'auth',
|
|
85
|
+
db: 1,
|
|
86
|
+
},
|
|
76
87
|
},
|
|
77
|
-
}
|
|
78
|
-
}
|
|
88
|
+
},
|
|
89
|
+
});
|
|
79
90
|
```
|
|
80
91
|
|
|
81
92
|
**Sentinel**
|
|
82
93
|
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
|
|
94
|
+
```ts
|
|
95
|
+
import { defineConfig } from 'egg';
|
|
96
|
+
|
|
97
|
+
export default defineConfig({
|
|
98
|
+
redis: {
|
|
99
|
+
client: {
|
|
86
100
|
// Sentinel instances
|
|
87
101
|
sentinels: [
|
|
88
102
|
{
|
|
89
|
-
port: 26379,
|
|
90
|
-
host: '127.0.0.1',
|
|
103
|
+
port: 26379, // Sentinel port
|
|
104
|
+
host: '127.0.0.1', // Sentinel host
|
|
91
105
|
},
|
|
92
106
|
// other sentinel instance config
|
|
93
107
|
],
|
|
94
|
-
name: 'mymaster',
|
|
108
|
+
name: 'mymaster', // Master name
|
|
95
109
|
password: 'auth',
|
|
96
|
-
db: 0
|
|
110
|
+
db: 0,
|
|
97
111
|
},
|
|
98
|
-
}
|
|
112
|
+
};
|
|
99
113
|
```
|
|
100
114
|
|
|
101
115
|
**No password**
|
|
@@ -122,71 +136,78 @@ See [ioredis API Documentation](https://github.com/redis/ioredis#basic-usage) fo
|
|
|
122
136
|
`@eggjs/redis` using `ioredis@5` now, if you want to use other version of iovalkey or ioredis,
|
|
123
137
|
you can pass the instance by `config.redis.Redis`:
|
|
124
138
|
|
|
125
|
-
```
|
|
126
|
-
// config/config.default.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
139
|
+
```ts
|
|
140
|
+
// config/config.default.ts
|
|
141
|
+
|
|
142
|
+
import { defineConfig } from 'egg';
|
|
143
|
+
|
|
144
|
+
export default defineConfig({
|
|
145
|
+
redis: {
|
|
146
|
+
Redis: require('ioredis'), // customize ioredis version, only set when you needed
|
|
147
|
+
client: {
|
|
148
|
+
port: 6379, // Redis port
|
|
149
|
+
host: '127.0.0.1', // Redis host
|
|
150
|
+
password: 'auth',
|
|
151
|
+
db: 0,
|
|
152
|
+
},
|
|
134
153
|
},
|
|
135
|
-
}
|
|
154
|
+
});
|
|
136
155
|
```
|
|
137
156
|
|
|
138
157
|
**weakDependent**
|
|
139
158
|
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
159
|
+
```ts
|
|
160
|
+
import { defineConfig } from 'egg';
|
|
161
|
+
|
|
162
|
+
export default defineConfig({
|
|
163
|
+
redis: {
|
|
164
|
+
client: {
|
|
165
|
+
port: 6379, // Redis port
|
|
166
|
+
host: '127.0.0.1', // Redis host
|
|
167
|
+
password: 'auth',
|
|
168
|
+
db: 0,
|
|
169
|
+
weakDependent: true, // the redis instance won't block app start
|
|
170
|
+
},
|
|
148
171
|
},
|
|
149
|
-
}
|
|
172
|
+
});
|
|
150
173
|
```
|
|
151
174
|
|
|
152
175
|
## Usage
|
|
153
176
|
|
|
154
177
|
In controller, you can use `app.redis` to get the redis instance, check [ioredis](https://github.com/redis/ioredis#basic-usage) to see how to use.
|
|
155
178
|
|
|
156
|
-
```
|
|
157
|
-
// app/controller/home.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
}
|
|
179
|
+
```ts
|
|
180
|
+
// app/controller/home.ts
|
|
181
|
+
|
|
182
|
+
import { Controller } from 'egg';
|
|
183
|
+
|
|
184
|
+
export default class HomeController extends Controller {
|
|
185
|
+
async index() {
|
|
186
|
+
const { ctx, app } = this;
|
|
187
|
+
// set
|
|
188
|
+
await app.redis.set('foo', 'bar');
|
|
189
|
+
// get
|
|
190
|
+
ctx.body = await app.redis.get('foo');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
170
193
|
```
|
|
171
194
|
|
|
172
195
|
### Multi Clients
|
|
173
196
|
|
|
174
197
|
If your Configure with multi clients, you can use `app.redis.get(instanceName)` to get the specific redis instance and use it like above.
|
|
175
198
|
|
|
176
|
-
```
|
|
177
|
-
// app/controller/home.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
};
|
|
189
|
-
};
|
|
199
|
+
```ts
|
|
200
|
+
// app/controller/home.ts
|
|
201
|
+
|
|
202
|
+
export default class HomeController extends Controller {
|
|
203
|
+
async index() {
|
|
204
|
+
const { ctx, app } = this;
|
|
205
|
+
// set
|
|
206
|
+
await app.redis.getSingletonInstance('instance1').set('foo', 'bar');
|
|
207
|
+
// get
|
|
208
|
+
ctx.body = await app.redis.getSingletonInstance('instance1').get('foo');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
190
211
|
```
|
|
191
212
|
|
|
192
213
|
### Clients Depend on Redis Cluster
|
|
@@ -195,42 +216,66 @@ Before you start to use Redis Cluster, please checkout the [document](https://re
|
|
|
195
216
|
|
|
196
217
|
In controller, you also can use `app.redis` to get the redis instance based on Redis Cluster.
|
|
197
218
|
|
|
198
|
-
```
|
|
199
|
-
// app/config/config.default.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
+
```ts
|
|
220
|
+
// app/config/config.default.ts
|
|
221
|
+
import { defineConfig } from 'egg';
|
|
222
|
+
|
|
223
|
+
export default defineConfig({
|
|
224
|
+
redis: {
|
|
225
|
+
client: {
|
|
226
|
+
cluster: true,
|
|
227
|
+
nodes: [
|
|
228
|
+
{
|
|
229
|
+
host: '127.0.0.1',
|
|
230
|
+
port: '6379',
|
|
231
|
+
family: 'user',
|
|
232
|
+
password: 'password',
|
|
233
|
+
db: 'db',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
host: '127.0.0.1',
|
|
237
|
+
port: '6380',
|
|
238
|
+
family: 'user',
|
|
239
|
+
password: 'password',
|
|
240
|
+
db: 'db',
|
|
241
|
+
},
|
|
242
|
+
],
|
|
243
|
+
},
|
|
219
244
|
},
|
|
220
|
-
};
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
// app/controller/home.ts
|
|
248
|
+
import { Controller } from 'egg';
|
|
249
|
+
|
|
250
|
+
export default class HomeController extends Controller {
|
|
251
|
+
async index() {
|
|
252
|
+
const { ctx, app } = this;
|
|
253
|
+
// set
|
|
254
|
+
await app.redis.set('foo', 'bar');
|
|
255
|
+
// get
|
|
256
|
+
ctx.body = await app.redis.get('foo');
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
221
260
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
261
|
+
## For the local dev
|
|
262
|
+
|
|
263
|
+
Run docker compose to start test redis service
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
docker compose -f docker-compose.yml up -d
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Run the unit tests
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
pnpm test
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Stop test redis service
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
docker compose -f docker-compose.yml down
|
|
234
279
|
```
|
|
235
280
|
|
|
236
281
|
## Questions & Suggestions
|
|
@@ -243,6 +288,6 @@ Please open an issue [here](https://github.com/eggjs/egg/issues).
|
|
|
243
288
|
|
|
244
289
|
## Contributors
|
|
245
290
|
|
|
246
|
-
[](https://github.com/eggjs/egg/graphs/contributors)
|
|
247
292
|
|
|
248
293
|
Made with [contributors-img](https://contrib.rocks).
|
package/dist/agent.d.ts
ADDED
package/dist/agent.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { RedisBoot } from "./lib/redis.js";
|
|
2
|
+
export default RedisBoot;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLGVBQWUsU0FBUyxDQUFDIn0=
|
package/dist/app.d.ts
ADDED
package/dist/app.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { RedisBoot } from "./lib/redis.js";
|
|
2
|
+
export default RedisBoot;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsZUFBZSxTQUFTLENBQUMifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RedisOptions, ClusterOptions } from 'ioredis';
|
|
1
|
+
import type { RedisOptions, ClusterOptions, Redis } from 'ioredis';
|
|
2
2
|
export interface RedisClientOptions extends RedisOptions {
|
|
3
3
|
/**
|
|
4
4
|
* Whether to enable weakDependent mode, the redis client start will not block the application start
|
|
@@ -51,7 +51,7 @@ export interface RedisConfig {
|
|
|
51
51
|
*
|
|
52
52
|
* Default to `undefined`, which means using the built-in ioredis
|
|
53
53
|
*/
|
|
54
|
-
Redis?:
|
|
54
|
+
Redis?: typeof Redis;
|
|
55
55
|
}
|
|
56
56
|
declare const _default: {
|
|
57
57
|
redis: RedisConfig;
|
|
@@ -50,4 +50,4 @@ export default {
|
|
|
50
50
|
// },
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJEQSxlQUFlO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLEVBQUU7UUFDWCxHQUFHLEVBQUUsSUFBSTtRQUNULEtBQUssRUFBRSxLQUFLO1FBQ1osa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixlQUFlO1FBQ2YsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLDBCQUEwQjtRQUMxQixjQUFjO1FBQ2QsS0FBSztRQUNMLEVBQUU7UUFDRixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixjQUFjO1FBQ2Qsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixTQUFTO1FBQ1Qsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsTUFBTTtRQUNOLEVBQUU7UUFDRixjQUFjO1FBQ2QsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLHNCQUFzQjtRQUN0Qiw0QkFBNEI7UUFDNUIsZ0JBQWdCO1FBQ2hCLE9BQU87UUFDUCxpQkFBaUI7UUFDakIsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsS0FBSztLQUNTO0NBQ2pCLENBQUMifQ==
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './types.ts';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import "./types.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUMifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ILifecycleBoot,
|
|
1
|
+
import type { ILifecycleBoot, EggApplicationCore } from 'egg';
|
|
2
2
|
export declare class RedisBoot implements ILifecycleBoot {
|
|
3
3
|
private readonly app;
|
|
4
|
-
constructor(app:
|
|
4
|
+
constructor(app: EggApplicationCore);
|
|
5
5
|
didLoad(): Promise<void>;
|
|
6
6
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { once } from 'node:events';
|
|
3
|
+
import { Redis } from 'ioredis';
|
|
4
|
+
export class RedisBoot {
|
|
5
|
+
app;
|
|
6
|
+
constructor(app) {
|
|
7
|
+
this.app = app;
|
|
8
|
+
}
|
|
9
|
+
async didLoad() {
|
|
10
|
+
const app = this.app;
|
|
11
|
+
if (app.type === 'application' && app.config.redis.app) {
|
|
12
|
+
app.addSingleton('redis', createClient);
|
|
13
|
+
}
|
|
14
|
+
else if (app.type === 'agent' && app.config.redis.agent) {
|
|
15
|
+
app.addSingleton('redis', createClient);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
let count = 0;
|
|
20
|
+
function createClient(options, app) {
|
|
21
|
+
const RedisClass = app.config.redis.Redis ?? Redis;
|
|
22
|
+
let client;
|
|
23
|
+
if ('cluster' in options && options.cluster === true) {
|
|
24
|
+
const config = options;
|
|
25
|
+
assert(config.nodes && config.nodes.length > 0, '[@eggjs/redis] cluster nodes configuration is required when use cluster redis');
|
|
26
|
+
for (const client of config.nodes) {
|
|
27
|
+
assert(client.host && client.port, `[@eggjs/redis] 'host: ${client.host}', 'port: ${client.port}' are required on config`);
|
|
28
|
+
}
|
|
29
|
+
app.coreLogger.info('[@eggjs/redis] cluster connecting');
|
|
30
|
+
client = new RedisClass.Cluster(config.nodes, config);
|
|
31
|
+
}
|
|
32
|
+
else if ('sentinels' in options && options.sentinels) {
|
|
33
|
+
const config = options;
|
|
34
|
+
assert(config.sentinels && config.sentinels.length > 0, '[@eggjs/redis] sentinels configuration is required when use redis sentinel');
|
|
35
|
+
for (const sentinel of config.sentinels) {
|
|
36
|
+
assert(sentinel.host && sentinel.port, `[@eggjs/redis] 'host: ${sentinel.host}', 'port: ${sentinel.port}' are required on config`);
|
|
37
|
+
}
|
|
38
|
+
const mask = config.password ? '***' : config.password;
|
|
39
|
+
assert(config.name && config.password !== undefined && config.db !== undefined, `[@eggjs/redis] 'name of master: ${config.name}', 'password: ${mask}', 'db: ${config.db}' are required on config`);
|
|
40
|
+
app.coreLogger.info('[@eggjs/redis] sentinel connecting start');
|
|
41
|
+
client = new RedisClass(config);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const config = options;
|
|
45
|
+
const mask = config.password ? '***' : config.password;
|
|
46
|
+
assert((config.host && config.port && config.password !== undefined && config.db !== undefined) || config.path, `[@eggjs/redis] 'host: ${config.host}', 'port: ${config.port}', 'password: ${mask}', 'db: ${config.db}' or 'path:${config.path}' are required on config`);
|
|
47
|
+
if (config.host) {
|
|
48
|
+
app.coreLogger.info('[@eggjs/redis] server connecting redis://:***@%s:%s/%s', config.host, config.port, config.db);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
app.coreLogger.info('[@eggjs/redis] server connecting %s', config.path || config);
|
|
52
|
+
}
|
|
53
|
+
client = new RedisClass(config);
|
|
54
|
+
}
|
|
55
|
+
client.on('connect', () => {
|
|
56
|
+
app.coreLogger.info('[@eggjs/redis] client connect success');
|
|
57
|
+
});
|
|
58
|
+
client.on('error', err => {
|
|
59
|
+
app.coreLogger.error('[@eggjs/redis] client error: %s', err);
|
|
60
|
+
app.coreLogger.error(err);
|
|
61
|
+
});
|
|
62
|
+
const index = count++;
|
|
63
|
+
app.lifecycle.registerBeforeStart(async () => {
|
|
64
|
+
if ('weakDependent' in options && options.weakDependent) {
|
|
65
|
+
app.coreLogger.info(`[@eggjs/redis] instance[${index}] is weak dependent and won't block app start`);
|
|
66
|
+
client.once('ready', () => {
|
|
67
|
+
app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK`);
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
await Promise.race([once(client, 'ready'), once(client, 'error')]);
|
|
72
|
+
app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK, client ready`);
|
|
73
|
+
}, `[@eggjs/redis] instance[${index}] start check`);
|
|
74
|
+
return client;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3JlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFLaEMsTUFBTSxPQUFPLFNBQVM7SUFDSCxHQUFHLENBQXFCO0lBRXpDLFlBQVksR0FBdUI7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxTQUFTLFlBQVksQ0FBQyxPQUFpRCxFQUFFLEdBQXVCO0lBQzlGLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUM7SUFFWCxJQUFJLFNBQVMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxJ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
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Singleton } from 'egg';
|
|
2
|
+
import type { Redis } from 'ioredis';
|
|
3
|
+
import type { RedisConfig } from './config/config.default.ts';
|
|
4
|
+
declare module 'egg' {
|
|
5
|
+
interface EggAppConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Redis plugin config
|
|
8
|
+
*/
|
|
9
|
+
redis: RedisConfig;
|
|
10
|
+
}
|
|
11
|
+
interface EggApplicationCore {
|
|
12
|
+
redis: Redis & Singleton<Redis>;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|