@eggjs/redis 3.1.0 → 4.0.0-beta.27
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 +144 -120
- 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/{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 +48 -79
- 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 -88
- 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 -81
- 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 -125
- package/src/types.ts +0 -14
- package/src/typings/index.d.ts +0 -4
- /package/dist/{commonjs/config → config}/config.default.d.ts +0 -0
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,57 +33,70 @@ 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
|
-
client: {
|
|
52
|
-
port: 6379, // Redis port
|
|
53
|
-
host: '127.0.0.1', // Redis host
|
|
54
|
-
password: 'auth',
|
|
55
|
-
db: 0,
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**Multi Clients**
|
|
51
|
+
```ts
|
|
52
|
+
import { defineConfig } from 'egg';
|
|
61
53
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
foo: {
|
|
66
|
-
// instanceName. See below
|
|
54
|
+
export default defineConfig({
|
|
55
|
+
redis: {
|
|
56
|
+
client: {
|
|
67
57
|
port: 6379, // Redis port
|
|
68
58
|
host: '127.0.0.1', // Redis host
|
|
69
59
|
password: 'auth',
|
|
70
60
|
db: 0,
|
|
71
61
|
},
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Multi Clients**
|
|
67
|
+
|
|
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
|
+
},
|
|
77
87
|
},
|
|
78
88
|
},
|
|
79
|
-
};
|
|
89
|
+
});
|
|
80
90
|
```
|
|
81
91
|
|
|
82
92
|
**Sentinel**
|
|
83
93
|
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
|
|
94
|
+
```ts
|
|
95
|
+
import { defineConfig } from 'egg';
|
|
96
|
+
|
|
97
|
+
export default defineConfig({
|
|
98
|
+
redis: {
|
|
99
|
+
client: {
|
|
87
100
|
// Sentinel instances
|
|
88
101
|
sentinels: [
|
|
89
102
|
{
|
|
@@ -123,71 +136,78 @@ See [ioredis API Documentation](https://github.com/redis/ioredis#basic-usage) fo
|
|
|
123
136
|
`@eggjs/redis` using `ioredis@5` now, if you want to use other version of iovalkey or ioredis,
|
|
124
137
|
you can pass the instance by `config.redis.Redis`:
|
|
125
138
|
|
|
126
|
-
```
|
|
127
|
-
// config/config.default.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
+
},
|
|
135
153
|
},
|
|
136
|
-
};
|
|
154
|
+
});
|
|
137
155
|
```
|
|
138
156
|
|
|
139
157
|
**weakDependent**
|
|
140
158
|
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
+
},
|
|
149
171
|
},
|
|
150
|
-
};
|
|
172
|
+
});
|
|
151
173
|
```
|
|
152
174
|
|
|
153
175
|
## Usage
|
|
154
176
|
|
|
155
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.
|
|
156
178
|
|
|
157
|
-
```
|
|
158
|
-
// app/controller/home.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
}
|
|
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
|
+
}
|
|
171
193
|
```
|
|
172
194
|
|
|
173
195
|
### Multi Clients
|
|
174
196
|
|
|
175
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.
|
|
176
198
|
|
|
177
|
-
```
|
|
178
|
-
// app/controller/home.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
};
|
|
190
|
-
};
|
|
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
|
+
}
|
|
191
211
|
```
|
|
192
212
|
|
|
193
213
|
### Clients Depend on Redis Cluster
|
|
@@ -196,42 +216,46 @@ Before you start to use Redis Cluster, please checkout the [document](https://re
|
|
|
196
216
|
|
|
197
217
|
In controller, you also can use `app.redis` to get the redis instance based on Redis Cluster.
|
|
198
218
|
|
|
199
|
-
```
|
|
200
|
-
// app/config/config.default.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
+
},
|
|
220
244
|
},
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
// app/controller/home.
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
}
|
|
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
|
+
}
|
|
235
259
|
```
|
|
236
260
|
|
|
237
261
|
## For the local dev
|
|
@@ -245,7 +269,7 @@ docker compose -f docker-compose.yml up -d
|
|
|
245
269
|
Run the unit tests
|
|
246
270
|
|
|
247
271
|
```bash
|
|
248
|
-
|
|
272
|
+
pnpm test
|
|
249
273
|
```
|
|
250
274
|
|
|
251
275
|
Stop test redis service
|
|
@@ -264,6 +288,6 @@ Please open an issue [here](https://github.com/eggjs/egg/issues).
|
|
|
264
288
|
|
|
265
289
|
## Contributors
|
|
266
290
|
|
|
267
|
-
[](https://github.com/eggjs/egg/graphs/contributors)
|
|
268
292
|
|
|
269
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==
|
|
@@ -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
|
package/package.json
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/redis",
|
|
3
|
-
"version": "
|
|
4
|
-
"publishConfig": {
|
|
5
|
-
"access": "public"
|
|
6
|
-
},
|
|
3
|
+
"version": "4.0.0-beta.27",
|
|
7
4
|
"description": "Valkey / Redis plugin for egg",
|
|
5
|
+
"type": "module",
|
|
8
6
|
"eggPlugin": {
|
|
9
|
-
"name": "redis"
|
|
10
|
-
"exports": {
|
|
11
|
-
"import": "./dist/esm",
|
|
12
|
-
"require": "./dist/commonjs",
|
|
13
|
-
"typescript": "./src"
|
|
14
|
-
}
|
|
7
|
+
"name": "redis"
|
|
15
8
|
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/index.js",
|
|
11
|
+
"./agent": "./dist/agent.js",
|
|
12
|
+
"./app": "./dist/app.js",
|
|
13
|
+
"./config/config.default": "./dist/config/config.default.js",
|
|
14
|
+
"./lib/redis": "./dist/lib/redis.js",
|
|
15
|
+
"./types": "./dist/types.js",
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
16
24
|
"keywords": [
|
|
17
25
|
"egg",
|
|
18
26
|
"eggPlugin",
|
|
@@ -21,84 +29,45 @@
|
|
|
21
29
|
"Valkey",
|
|
22
30
|
"database"
|
|
23
31
|
],
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
"url": "git+https://github.com/eggjs/redis.git"
|
|
27
|
-
},
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"homepage": "https://github.com/eggjs/egg/tree/next/plugins/redis",
|
|
28
34
|
"bugs": {
|
|
29
35
|
"url": "https://github.com/eggjs/egg/issues"
|
|
30
36
|
},
|
|
31
|
-
"
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/eggjs/egg.git",
|
|
40
|
+
"directory": "plugins/redis"
|
|
41
|
+
},
|
|
32
42
|
"author": "jtyjty99999",
|
|
33
|
-
"license": "MIT",
|
|
34
43
|
"engines": {
|
|
35
|
-
"node": ">= 18.
|
|
44
|
+
"node": ">= 22.18.0"
|
|
36
45
|
},
|
|
37
46
|
"dependencies": {
|
|
38
|
-
"@eggjs/core": "^6.4.1",
|
|
39
47
|
"ioredis": "^5.4.2"
|
|
40
48
|
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"egg": "4.1.0-beta.27"
|
|
51
|
+
},
|
|
41
52
|
"devDependencies": {
|
|
42
|
-
"@
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"prettier": "^3.5.3",
|
|
53
|
-
"rimraf": "6",
|
|
54
|
-
"snap-shot-it": "^7.9.10",
|
|
55
|
-
"tshy": "3",
|
|
56
|
-
"tshy-after": "1",
|
|
57
|
-
"typescript": "5"
|
|
53
|
+
"@types/node": "^24.6.2",
|
|
54
|
+
"detect-port": "^2.1.0",
|
|
55
|
+
"oxlint": "^1.19.0",
|
|
56
|
+
"rimraf": "^6.0.1",
|
|
57
|
+
"tsdown": "^0.15.4",
|
|
58
|
+
"typescript": "^5.9.3",
|
|
59
|
+
"vitest": "4.0.0-beta.16",
|
|
60
|
+
"@eggjs/mock": "7.0.0-beta.27",
|
|
61
|
+
"@eggjs/tsconfig": "3.1.0-beta.27",
|
|
62
|
+
"egg": "4.1.0-beta.27"
|
|
58
63
|
},
|
|
64
|
+
"main": "./dist/index.js",
|
|
65
|
+
"module": "./dist/index.js",
|
|
66
|
+
"types": "./dist/index.d.ts",
|
|
59
67
|
"scripts": {
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"clean": "rimraf dist",
|
|
67
|
-
"prepublishOnly": "tshy && tshy-after && attw --pack",
|
|
68
|
-
"prepare": "husky"
|
|
69
|
-
},
|
|
70
|
-
"lint-staged": {
|
|
71
|
-
"*": "prettier --write --ignore-unknown --cache",
|
|
72
|
-
"*.{ts,js,json,md,yml}": [
|
|
73
|
-
"prettier --ignore-unknown --write",
|
|
74
|
-
"oxlint --fix"
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
"type": "module",
|
|
78
|
-
"tshy": {
|
|
79
|
-
"exports": {
|
|
80
|
-
".": "./src/index.ts",
|
|
81
|
-
"./package.json": "./package.json"
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
"exports": {
|
|
85
|
-
".": {
|
|
86
|
-
"import": {
|
|
87
|
-
"types": "./dist/esm/index.d.ts",
|
|
88
|
-
"default": "./dist/esm/index.js"
|
|
89
|
-
},
|
|
90
|
-
"require": {
|
|
91
|
-
"types": "./dist/commonjs/index.d.ts",
|
|
92
|
-
"default": "./dist/commonjs/index.js"
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
"./package.json": "./package.json"
|
|
96
|
-
},
|
|
97
|
-
"files": [
|
|
98
|
-
"dist",
|
|
99
|
-
"src"
|
|
100
|
-
],
|
|
101
|
-
"types": "./dist/commonjs/index.d.ts",
|
|
102
|
-
"main": "./dist/commonjs/index.js",
|
|
103
|
-
"module": "./dist/esm/index.js"
|
|
104
|
-
}
|
|
68
|
+
"build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json",
|
|
69
|
+
"typecheck": "tsc --noEmit",
|
|
70
|
+
"lint": "oxlint --type-aware",
|
|
71
|
+
"test": "vitest run"
|
|
72
|
+
}
|
|
73
|
+
}
|