@mulingai-npm/redis 1.2.7 → 1.2.9
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/dist/enums/redis-database.d.ts +3 -3
- package/dist/enums/redis-database.js +7 -7
- package/dist/managers/mulingstream-listener-manager.d.ts +23 -22
- package/dist/managers/mulingstream-listener-manager.js +129 -118
- package/dist/redis-client.d.ts +21 -21
- package/dist/redis-client.js +62 -62
- package/package.json +34 -33
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare enum RedisDatabase {
|
|
2
|
-
MULINGSTREAM_LISTENER = 0
|
|
3
|
-
}
|
|
1
|
+
export declare enum RedisDatabase {
|
|
2
|
+
MULINGSTREAM_LISTENER = 0
|
|
3
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RedisDatabase = void 0;
|
|
4
|
-
var RedisDatabase;
|
|
5
|
-
(function (RedisDatabase) {
|
|
6
|
-
RedisDatabase[RedisDatabase["MULINGSTREAM_LISTENER"] = 0] = "MULINGSTREAM_LISTENER";
|
|
7
|
-
})(RedisDatabase = exports.RedisDatabase || (exports.RedisDatabase = {}));
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RedisDatabase = void 0;
|
|
4
|
+
var RedisDatabase;
|
|
5
|
+
(function (RedisDatabase) {
|
|
6
|
+
RedisDatabase[RedisDatabase["MULINGSTREAM_LISTENER"] = 0] = "MULINGSTREAM_LISTENER";
|
|
7
|
+
})(RedisDatabase = exports.RedisDatabase || (exports.RedisDatabase = {}));
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import { RedisClient } from '../redis-client';
|
|
2
|
-
export type MulingstreamListenerData = {
|
|
3
|
-
listenerId: string;
|
|
4
|
-
roomId: string;
|
|
5
|
-
socketId?: string;
|
|
6
|
-
token: string;
|
|
7
|
-
name?: string;
|
|
8
|
-
firstJoined: number;
|
|
9
|
-
language?: string;
|
|
10
|
-
isActive?: boolean;
|
|
11
|
-
};
|
|
12
|
-
export declare class MulingstreamListenerManager {
|
|
13
|
-
private redisClient;
|
|
14
|
-
constructor(redisClient: RedisClient);
|
|
15
|
-
private parseHashData;
|
|
16
|
-
addListener(listenerData: Omit<MulingstreamListenerData, 'listenerId'>): Promise<string>;
|
|
17
|
-
getAllListeners(): Promise<MulingstreamListenerData[]>;
|
|
18
|
-
getListenersByRoom(roomId: string): Promise<MulingstreamListenerData[]>;
|
|
19
|
-
getListener(listenerIdOrToken: string): Promise<MulingstreamListenerData | null>;
|
|
20
|
-
removeListenerByToken(token: string): Promise<boolean>;
|
|
21
|
-
updateNameLanguage(listenerIdOrToken: string, name: string, language: string): Promise<boolean>;
|
|
22
|
-
|
|
1
|
+
import { RedisClient } from '../redis-client';
|
|
2
|
+
export type MulingstreamListenerData = {
|
|
3
|
+
listenerId: string;
|
|
4
|
+
roomId: string;
|
|
5
|
+
socketId?: string;
|
|
6
|
+
token: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
firstJoined: number;
|
|
9
|
+
language?: string;
|
|
10
|
+
isActive?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare class MulingstreamListenerManager {
|
|
13
|
+
private redisClient;
|
|
14
|
+
constructor(redisClient: RedisClient);
|
|
15
|
+
private parseHashData;
|
|
16
|
+
addListener(listenerData: Omit<MulingstreamListenerData, 'listenerId'>): Promise<string>;
|
|
17
|
+
getAllListeners(): Promise<MulingstreamListenerData[]>;
|
|
18
|
+
getListenersByRoom(roomId: string): Promise<MulingstreamListenerData[]>;
|
|
19
|
+
getListener(listenerIdOrToken: string): Promise<MulingstreamListenerData | null>;
|
|
20
|
+
removeListenerByToken(token: string): Promise<boolean>;
|
|
21
|
+
updateNameLanguage(listenerIdOrToken: string, name: string, language: string): Promise<boolean>;
|
|
22
|
+
updateSocketId(listenerIdOrToken: string, socketId: string): Promise<boolean>;
|
|
23
|
+
}
|
|
@@ -1,118 +1,129 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MulingstreamListenerManager = void 0;
|
|
4
|
-
const uuid_1 = require("uuid");
|
|
5
|
-
class MulingstreamListenerManager {
|
|
6
|
-
constructor(redisClient) {
|
|
7
|
-
this.redisClient = redisClient;
|
|
8
|
-
}
|
|
9
|
-
parseHashData(data) {
|
|
10
|
-
return {
|
|
11
|
-
listenerId: data.listenerId,
|
|
12
|
-
roomId: data.roomId,
|
|
13
|
-
socketId: data.socketId || '',
|
|
14
|
-
token: data.token,
|
|
15
|
-
name: data.name || '',
|
|
16
|
-
firstJoined: parseInt(data.firstJoined, 10),
|
|
17
|
-
language: data.language || '',
|
|
18
|
-
isActive: data.isActive === 'true'
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
// Creates a new listener.
|
|
22
|
-
// -Generates a unique listenerId and adds it to the room's set.
|
|
23
|
-
// -Stores the listener data in a Redis hash under `listener:{listenerId}`.
|
|
24
|
-
async addListener(listenerData) {
|
|
25
|
-
var _a, _b, _c;
|
|
26
|
-
// You can combine roomId + uuid, or just a uuid, up to you:
|
|
27
|
-
const listenerId = `[${listenerData.roomId}]-[${(0, uuid_1.v4)()}]`;
|
|
28
|
-
// Add listenerId to the set for that room
|
|
29
|
-
await this.redisClient.sadd(`room:${listenerData.roomId}:listeners`, listenerId);
|
|
30
|
-
// Store listener data in a hash
|
|
31
|
-
await this.redisClient.hset(`listener:${listenerId}`, {
|
|
32
|
-
listenerId,
|
|
33
|
-
roomId: listenerData.roomId,
|
|
34
|
-
socketId: (_a = listenerData.socketId) !== null && _a !== void 0 ? _a : '',
|
|
35
|
-
token: listenerData.token,
|
|
36
|
-
name: (_b = listenerData.name) !== null && _b !== void 0 ? _b : '',
|
|
37
|
-
firstJoined: listenerData.firstJoined.toString(),
|
|
38
|
-
language: (_c = listenerData.language) !== null && _c !== void 0 ? _c : '',
|
|
39
|
-
isActive: 'true'
|
|
40
|
-
});
|
|
41
|
-
return listenerId;
|
|
42
|
-
}
|
|
43
|
-
async getAllListeners() {
|
|
44
|
-
// 1) Get all keys that match 'listener:*'
|
|
45
|
-
// If you have many keys, consider using SCAN instead of KEYS to avoid performance issues.
|
|
46
|
-
const keys = await this.redisClient.keys('listener:*');
|
|
47
|
-
if (!keys || keys.length === 0) {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
// 2) Fetch each hash with HGETALL
|
|
51
|
-
const listeners = [];
|
|
52
|
-
for (const key of keys) {
|
|
53
|
-
const data = await this.redisClient.hgetall(key);
|
|
54
|
-
listeners.push(this.parseHashData(data));
|
|
55
|
-
}
|
|
56
|
-
return listeners;
|
|
57
|
-
}
|
|
58
|
-
async getListenersByRoom(roomId) {
|
|
59
|
-
// 1) Get the set of listener IDs
|
|
60
|
-
const listenerIds = await this.redisClient.smembers(`room:${roomId}:listeners`);
|
|
61
|
-
if (!listenerIds || listenerIds.length === 0) {
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
// 2) For each ID, fetch the hash from Redis
|
|
65
|
-
const listeners = [];
|
|
66
|
-
for (const id of listenerIds) {
|
|
67
|
-
const data = await this.redisClient.hgetall(`listener:${id}`);
|
|
68
|
-
if (data) {
|
|
69
|
-
listeners.push(this.parseHashData(data));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return listeners;
|
|
73
|
-
}
|
|
74
|
-
async getListener(listenerIdOrToken) {
|
|
75
|
-
// try direct lookup by listenerId:
|
|
76
|
-
const directData = await this.redisClient.hgetall(`listener:${listenerIdOrToken}`);
|
|
77
|
-
if (directData && directData.listenerId) {
|
|
78
|
-
return this.parseHashData(directData);
|
|
79
|
-
}
|
|
80
|
-
// if not found by listenerId, treat 'listenerIdOrToken' as a token and scan all listeners
|
|
81
|
-
const keys = await this.redisClient.keys('listener:*');
|
|
82
|
-
if (!keys || keys.length === 0) {
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
for (const key of keys) {
|
|
86
|
-
const data = await this.redisClient.hgetall(key);
|
|
87
|
-
if (data && data.token === listenerIdOrToken) {
|
|
88
|
-
return this.parseHashData(data);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
async removeListenerByToken(token) {
|
|
94
|
-
// find the listener by token
|
|
95
|
-
const listener = await this.getListener(token);
|
|
96
|
-
if (!listener) {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
// remove the listener ID from the room's set
|
|
100
|
-
await this.redisClient.srem(`room:${listener.roomId}:listeners`, listener.listenerId);
|
|
101
|
-
// remove the listener data (the hash)
|
|
102
|
-
await this.redisClient.del(`listener:${listener.listenerId}`);
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
async updateNameLanguage(listenerIdOrToken, name, language) {
|
|
106
|
-
const listener = await this.getListener(listenerIdOrToken);
|
|
107
|
-
if (!listener) {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
// Update the name/language on the listener’s hash key
|
|
111
|
-
await this.redisClient.hset(`listener:${listener.listenerId}`, {
|
|
112
|
-
name,
|
|
113
|
-
language
|
|
114
|
-
});
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MulingstreamListenerManager = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
class MulingstreamListenerManager {
|
|
6
|
+
constructor(redisClient) {
|
|
7
|
+
this.redisClient = redisClient;
|
|
8
|
+
}
|
|
9
|
+
parseHashData(data) {
|
|
10
|
+
return {
|
|
11
|
+
listenerId: data.listenerId,
|
|
12
|
+
roomId: data.roomId,
|
|
13
|
+
socketId: data.socketId || '',
|
|
14
|
+
token: data.token,
|
|
15
|
+
name: data.name || '',
|
|
16
|
+
firstJoined: parseInt(data.firstJoined, 10),
|
|
17
|
+
language: data.language || '',
|
|
18
|
+
isActive: data.isActive === 'true'
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// Creates a new listener.
|
|
22
|
+
// -Generates a unique listenerId and adds it to the room's set.
|
|
23
|
+
// -Stores the listener data in a Redis hash under `listener:{listenerId}`.
|
|
24
|
+
async addListener(listenerData) {
|
|
25
|
+
var _a, _b, _c;
|
|
26
|
+
// You can combine roomId + uuid, or just a uuid, up to you:
|
|
27
|
+
const listenerId = `[${listenerData.roomId}]-[${(0, uuid_1.v4)()}]`;
|
|
28
|
+
// Add listenerId to the set for that room
|
|
29
|
+
await this.redisClient.sadd(`room:${listenerData.roomId}:listeners`, listenerId);
|
|
30
|
+
// Store listener data in a hash
|
|
31
|
+
await this.redisClient.hset(`listener:${listenerId}`, {
|
|
32
|
+
listenerId,
|
|
33
|
+
roomId: listenerData.roomId,
|
|
34
|
+
socketId: (_a = listenerData.socketId) !== null && _a !== void 0 ? _a : '',
|
|
35
|
+
token: listenerData.token,
|
|
36
|
+
name: (_b = listenerData.name) !== null && _b !== void 0 ? _b : '',
|
|
37
|
+
firstJoined: listenerData.firstJoined.toString(),
|
|
38
|
+
language: (_c = listenerData.language) !== null && _c !== void 0 ? _c : '',
|
|
39
|
+
isActive: 'true'
|
|
40
|
+
});
|
|
41
|
+
return listenerId;
|
|
42
|
+
}
|
|
43
|
+
async getAllListeners() {
|
|
44
|
+
// 1) Get all keys that match 'listener:*'
|
|
45
|
+
// If you have many keys, consider using SCAN instead of KEYS to avoid performance issues.
|
|
46
|
+
const keys = await this.redisClient.keys('listener:*');
|
|
47
|
+
if (!keys || keys.length === 0) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
// 2) Fetch each hash with HGETALL
|
|
51
|
+
const listeners = [];
|
|
52
|
+
for (const key of keys) {
|
|
53
|
+
const data = await this.redisClient.hgetall(key);
|
|
54
|
+
listeners.push(this.parseHashData(data));
|
|
55
|
+
}
|
|
56
|
+
return listeners;
|
|
57
|
+
}
|
|
58
|
+
async getListenersByRoom(roomId) {
|
|
59
|
+
// 1) Get the set of listener IDs
|
|
60
|
+
const listenerIds = await this.redisClient.smembers(`room:${roomId}:listeners`);
|
|
61
|
+
if (!listenerIds || listenerIds.length === 0) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
// 2) For each ID, fetch the hash from Redis
|
|
65
|
+
const listeners = [];
|
|
66
|
+
for (const id of listenerIds) {
|
|
67
|
+
const data = await this.redisClient.hgetall(`listener:${id}`);
|
|
68
|
+
if (data) {
|
|
69
|
+
listeners.push(this.parseHashData(data));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return listeners;
|
|
73
|
+
}
|
|
74
|
+
async getListener(listenerIdOrToken) {
|
|
75
|
+
// try direct lookup by listenerId:
|
|
76
|
+
const directData = await this.redisClient.hgetall(`listener:${listenerIdOrToken}`);
|
|
77
|
+
if (directData && directData.listenerId) {
|
|
78
|
+
return this.parseHashData(directData);
|
|
79
|
+
}
|
|
80
|
+
// if not found by listenerId, treat 'listenerIdOrToken' as a token and scan all listeners
|
|
81
|
+
const keys = await this.redisClient.keys('listener:*');
|
|
82
|
+
if (!keys || keys.length === 0) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
for (const key of keys) {
|
|
86
|
+
const data = await this.redisClient.hgetall(key);
|
|
87
|
+
if (data && data.token === listenerIdOrToken) {
|
|
88
|
+
return this.parseHashData(data);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
async removeListenerByToken(token) {
|
|
94
|
+
// find the listener by token
|
|
95
|
+
const listener = await this.getListener(token);
|
|
96
|
+
if (!listener) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
// remove the listener ID from the room's set
|
|
100
|
+
await this.redisClient.srem(`room:${listener.roomId}:listeners`, listener.listenerId);
|
|
101
|
+
// remove the listener data (the hash)
|
|
102
|
+
await this.redisClient.del(`listener:${listener.listenerId}`);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
async updateNameLanguage(listenerIdOrToken, name, language) {
|
|
106
|
+
const listener = await this.getListener(listenerIdOrToken);
|
|
107
|
+
if (!listener) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
// Update the name/language on the listener’s hash key
|
|
111
|
+
await this.redisClient.hset(`listener:${listener.listenerId}`, {
|
|
112
|
+
name,
|
|
113
|
+
language
|
|
114
|
+
});
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
async updateSocketId(listenerIdOrToken, socketId) {
|
|
118
|
+
const listener = await this.getListener(listenerIdOrToken);
|
|
119
|
+
if (!listener) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
// Update the name/language on the listener’s hash key
|
|
123
|
+
await this.redisClient.hset(`listener:${listener.listenerId}`, {
|
|
124
|
+
socketId
|
|
125
|
+
});
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.MulingstreamListenerManager = MulingstreamListenerManager;
|
package/dist/redis-client.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
export interface RedisConfig {
|
|
2
|
-
host: string;
|
|
3
|
-
port: number;
|
|
4
|
-
password?: string;
|
|
5
|
-
db: number;
|
|
6
|
-
}
|
|
7
|
-
export declare class RedisClient {
|
|
8
|
-
private client;
|
|
9
|
-
constructor(config: RedisConfig);
|
|
10
|
-
set(key: string, value: string): Promise<void>;
|
|
11
|
-
get(key: string): Promise<string | null>;
|
|
12
|
-
del(key: string): Promise<number>;
|
|
13
|
-
sadd(key: string, ...values: string[]): Promise<number>;
|
|
14
|
-
srem(key: string, ...values: string[]): Promise<number>;
|
|
15
|
-
smembers(key: string): Promise<string[]>;
|
|
16
|
-
keys(pattern: string): Promise<string[]>;
|
|
17
|
-
hset(key: string, data: Record<string, string>): Promise<number>;
|
|
18
|
-
hgetall(key: string): Promise<Record<string, string>>;
|
|
19
|
-
flushAll(): Promise<string>;
|
|
20
|
-
flushDb(): Promise<string>;
|
|
21
|
-
}
|
|
1
|
+
export interface RedisConfig {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
password?: string;
|
|
5
|
+
db: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class RedisClient {
|
|
8
|
+
private client;
|
|
9
|
+
constructor(config: RedisConfig);
|
|
10
|
+
set(key: string, value: string): Promise<void>;
|
|
11
|
+
get(key: string): Promise<string | null>;
|
|
12
|
+
del(key: string): Promise<number>;
|
|
13
|
+
sadd(key: string, ...values: string[]): Promise<number>;
|
|
14
|
+
srem(key: string, ...values: string[]): Promise<number>;
|
|
15
|
+
smembers(key: string): Promise<string[]>;
|
|
16
|
+
keys(pattern: string): Promise<string[]>;
|
|
17
|
+
hset(key: string, data: Record<string, string>): Promise<number>;
|
|
18
|
+
hgetall(key: string): Promise<Record<string, string>>;
|
|
19
|
+
flushAll(): Promise<string>;
|
|
20
|
+
flushDb(): Promise<string>;
|
|
21
|
+
}
|
package/dist/redis-client.js
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RedisClient = void 0;
|
|
7
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
8
|
-
class RedisClient {
|
|
9
|
-
constructor(config) {
|
|
10
|
-
this.client = new ioredis_1.default({
|
|
11
|
-
host: config.host,
|
|
12
|
-
port: config.port,
|
|
13
|
-
password: config.password,
|
|
14
|
-
db: config.db
|
|
15
|
-
});
|
|
16
|
-
this.client.on('error', (err) => {
|
|
17
|
-
console.error('Redis error:', err);
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
// existing set/get
|
|
21
|
-
async set(key, value) {
|
|
22
|
-
await this.client.set(key, value);
|
|
23
|
-
}
|
|
24
|
-
async get(key) {
|
|
25
|
-
return this.client.get(key);
|
|
26
|
-
}
|
|
27
|
-
async del(key) {
|
|
28
|
-
return this.client.del(key);
|
|
29
|
-
}
|
|
30
|
-
// Insert one or more values into a set
|
|
31
|
-
async sadd(key, ...values) {
|
|
32
|
-
return this.client.sadd(key, values);
|
|
33
|
-
}
|
|
34
|
-
async srem(key, ...values) {
|
|
35
|
-
return this.client.srem(key, values);
|
|
36
|
-
}
|
|
37
|
-
// Get all set members
|
|
38
|
-
async smembers(key) {
|
|
39
|
-
return this.client.smembers(key);
|
|
40
|
-
}
|
|
41
|
-
// Search for all keys matching a pattern
|
|
42
|
-
// NOTE: If you have lots of keys in Redis, you should look into using SCAN instead of KEYS
|
|
43
|
-
async keys(pattern) {
|
|
44
|
-
return this.client.keys(pattern);
|
|
45
|
-
}
|
|
46
|
-
// add these methods for hash, sets, keys, etc.
|
|
47
|
-
async hset(key, data) {
|
|
48
|
-
return this.client.hset(key, data);
|
|
49
|
-
}
|
|
50
|
-
async hgetall(key) {
|
|
51
|
-
return this.client.hgetall(key);
|
|
52
|
-
}
|
|
53
|
-
// flush methods
|
|
54
|
-
async flushAll() {
|
|
55
|
-
console.log('Removing all data!');
|
|
56
|
-
return this.client.flushall();
|
|
57
|
-
}
|
|
58
|
-
async flushDb() {
|
|
59
|
-
return this.client.flushdb();
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
exports.RedisClient = RedisClient;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RedisClient = void 0;
|
|
7
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
8
|
+
class RedisClient {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.client = new ioredis_1.default({
|
|
11
|
+
host: config.host,
|
|
12
|
+
port: config.port,
|
|
13
|
+
password: config.password,
|
|
14
|
+
db: config.db
|
|
15
|
+
});
|
|
16
|
+
this.client.on('error', (err) => {
|
|
17
|
+
console.error('Redis error:', err);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
// existing set/get
|
|
21
|
+
async set(key, value) {
|
|
22
|
+
await this.client.set(key, value);
|
|
23
|
+
}
|
|
24
|
+
async get(key) {
|
|
25
|
+
return this.client.get(key);
|
|
26
|
+
}
|
|
27
|
+
async del(key) {
|
|
28
|
+
return this.client.del(key);
|
|
29
|
+
}
|
|
30
|
+
// Insert one or more values into a set
|
|
31
|
+
async sadd(key, ...values) {
|
|
32
|
+
return this.client.sadd(key, values);
|
|
33
|
+
}
|
|
34
|
+
async srem(key, ...values) {
|
|
35
|
+
return this.client.srem(key, values);
|
|
36
|
+
}
|
|
37
|
+
// Get all set members
|
|
38
|
+
async smembers(key) {
|
|
39
|
+
return this.client.smembers(key);
|
|
40
|
+
}
|
|
41
|
+
// Search for all keys matching a pattern
|
|
42
|
+
// NOTE: If you have lots of keys in Redis, you should look into using SCAN instead of KEYS
|
|
43
|
+
async keys(pattern) {
|
|
44
|
+
return this.client.keys(pattern);
|
|
45
|
+
}
|
|
46
|
+
// add these methods for hash, sets, keys, etc.
|
|
47
|
+
async hset(key, data) {
|
|
48
|
+
return this.client.hset(key, data);
|
|
49
|
+
}
|
|
50
|
+
async hgetall(key) {
|
|
51
|
+
return this.client.hgetall(key);
|
|
52
|
+
}
|
|
53
|
+
// flush methods
|
|
54
|
+
async flushAll() {
|
|
55
|
+
console.log('Removing all data!');
|
|
56
|
+
return this.client.flushall();
|
|
57
|
+
}
|
|
58
|
+
async flushDb() {
|
|
59
|
+
return this.client.flushdb();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.RedisClient = RedisClient;
|
package/package.json
CHANGED
|
@@ -1,33 +1,34 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@mulingai-npm/redis",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"main": "dist/index.js",
|
|
5
|
-
"types": "dist/index.d.ts",
|
|
6
|
-
"repository": {
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "https://github.com/mulingai/mulingai-backend.git"
|
|
9
|
-
},
|
|
10
|
-
"publishConfig": {
|
|
11
|
-
"registry": "https://registry.npmjs.org/"
|
|
12
|
-
},
|
|
13
|
-
"private": false,
|
|
14
|
-
"scripts": {
|
|
15
|
-
"dev": "rm -f tsconfig.tsbuildinfo && tsc --watch",
|
|
16
|
-
"build": "rm -f tsconfig.tsbuildinfo && tsc",
|
|
17
|
-
"prepublishOnly": "npm run build"
|
|
18
|
-
},
|
|
19
|
-
"dependencies": {
|
|
20
|
-
"ioredis": "^5.6.0"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@mulingai-npm/redis",
|
|
3
|
+
"version": "1.2.9",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/mulingai/mulingai-backend.git"
|
|
9
|
+
},
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"registry": "https://registry.npmjs.org/"
|
|
12
|
+
},
|
|
13
|
+
"private": false,
|
|
14
|
+
"scripts": {
|
|
15
|
+
"dev": "rm -f tsconfig.tsbuildinfo && tsc --watch",
|
|
16
|
+
"build": "rm -f tsconfig.tsbuildinfo && tsc",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"ioredis": "^5.6.0",
|
|
21
|
+
"uuid": "^11.1.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"concurrently": "^9.1.2",
|
|
25
|
+
"copyfiles": "^2.4.1",
|
|
26
|
+
"nodemon": "^3.1.9",
|
|
27
|
+
"typescript": "^4.9.5"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"package.json",
|
|
32
|
+
"README.md"
|
|
33
|
+
]
|
|
34
|
+
}
|