parsony 2.0.2 → 2.0.3
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/lib/cache/cache.js +77 -13
- package/package.json +1 -1
package/lib/cache/cache.js
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
const { promisify } = require("util");
|
|
7
7
|
const {CONFIG:{REDIS}} = require('../enums');
|
|
8
|
-
const chalk =require('chalk');
|
|
8
|
+
const chalk = require('chalk');
|
|
9
|
+
|
|
10
|
+
const promisifiedMethods = {};
|
|
9
11
|
|
|
10
12
|
let redisClient;
|
|
11
13
|
let _configs;
|
|
@@ -17,8 +19,10 @@ let _configs;
|
|
|
17
19
|
*/
|
|
18
20
|
const set = async (...args) => {
|
|
19
21
|
try {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
if (!promisifiedMethods.set) {
|
|
23
|
+
promisifiedMethods.set = promisify(redisClient.set).bind(redisClient);
|
|
24
|
+
}
|
|
25
|
+
return await promisifiedMethods.set(...args);
|
|
22
26
|
} catch (e) {
|
|
23
27
|
return undefined;
|
|
24
28
|
}
|
|
@@ -31,8 +35,10 @@ const set = async (...args) => {
|
|
|
31
35
|
*/
|
|
32
36
|
const get = async key => {
|
|
33
37
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
if (!promisifiedMethods.get) {
|
|
39
|
+
promisifiedMethods.get = promisify(redisClient.get).bind(redisClient);
|
|
40
|
+
}
|
|
41
|
+
return promisifiedMethods.get(key);
|
|
36
42
|
} catch (e) {
|
|
37
43
|
//dump error
|
|
38
44
|
}
|
|
@@ -45,8 +51,10 @@ const get = async key => {
|
|
|
45
51
|
*/
|
|
46
52
|
const del = async key => {
|
|
47
53
|
try {
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
if (!promisifiedMethods.del) {
|
|
55
|
+
promisifiedMethods.del = promisify(redisClient.del).bind(redisClient);
|
|
56
|
+
}
|
|
57
|
+
await promisifiedMethods.del(key);
|
|
50
58
|
} catch (e) {
|
|
51
59
|
//dump error
|
|
52
60
|
}
|
|
@@ -58,8 +66,10 @@ const del = async key => {
|
|
|
58
66
|
*/
|
|
59
67
|
const flushAll = async () => {
|
|
60
68
|
try {
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
if (!promisifiedMethods.flushall) {
|
|
70
|
+
promisifiedMethods.flushall = promisify(redisClient.flushall).bind(redisClient);
|
|
71
|
+
}
|
|
72
|
+
await promisifiedMethods.flushall();
|
|
63
73
|
} catch (e) {
|
|
64
74
|
//dump error
|
|
65
75
|
}
|
|
@@ -74,7 +84,7 @@ const setConfigs = configs => (_configs = configs);
|
|
|
74
84
|
/**
|
|
75
85
|
* Start Redis Caching using optional connection params
|
|
76
86
|
*/
|
|
77
|
-
const startCache = () =>{
|
|
87
|
+
const startCache = () => {
|
|
78
88
|
const options = _configs[REDIS] ||
|
|
79
89
|
{
|
|
80
90
|
host: '127.0.0.1',
|
|
@@ -87,7 +97,7 @@ const startCache = () =>{
|
|
|
87
97
|
|
|
88
98
|
redisClient.on("error", function(e) {
|
|
89
99
|
switch(e.code){
|
|
90
|
-
case'ECONNREFUSED':
|
|
100
|
+
case 'ECONNREFUSED':
|
|
91
101
|
console.error(chalk.red(`WARNING! Redis Error: ${e.message}`));
|
|
92
102
|
break;
|
|
93
103
|
default:
|
|
@@ -96,10 +106,61 @@ const startCache = () =>{
|
|
|
96
106
|
});
|
|
97
107
|
};
|
|
98
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Add to a set (duplicates ignored)
|
|
111
|
+
* @param key
|
|
112
|
+
* @param member
|
|
113
|
+
* @return {Promise.<number>} 1 if added, 0 if already existed
|
|
114
|
+
*/
|
|
115
|
+
const sadd = async (key, member) => {
|
|
116
|
+
try {
|
|
117
|
+
if (!promisifiedMethods.sadd) {
|
|
118
|
+
promisifiedMethods.sadd = promisify(redisClient.sadd).bind(redisClient);
|
|
119
|
+
}
|
|
120
|
+
return await promisifiedMethods.sadd(key, member);
|
|
121
|
+
} catch (e) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Get all members of a set
|
|
128
|
+
* @param key
|
|
129
|
+
* @return {Promise.<string[]>}
|
|
130
|
+
*/
|
|
131
|
+
const smembers = async key => {
|
|
132
|
+
try {
|
|
133
|
+
if (!promisifiedMethods.smembers) {
|
|
134
|
+
promisifiedMethods.smembers = promisify(redisClient.smembers).bind(redisClient);
|
|
135
|
+
}
|
|
136
|
+
return await promisifiedMethods.smembers(key);
|
|
137
|
+
} catch (e) {
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Get raw Redis client for direct access (promisified)
|
|
144
|
+
* @return {Proxy<RedisClient>}
|
|
145
|
+
*/
|
|
146
|
+
const getClient = () => {
|
|
147
|
+
return new Proxy(redisClient, {
|
|
148
|
+
get(target, prop) {
|
|
149
|
+
if (typeof target[prop] === 'function') {
|
|
150
|
+
if (!promisifiedMethods[prop]) {
|
|
151
|
+
promisifiedMethods[prop] = promisify(target[prop]).bind(target);
|
|
152
|
+
}
|
|
153
|
+
return promisifiedMethods[prop];
|
|
154
|
+
}
|
|
155
|
+
return target[prop];
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
|
|
99
160
|
/**
|
|
100
161
|
* Ensures singleton access to cache instance
|
|
101
162
|
*/
|
|
102
|
-
const getCache = () =>{
|
|
163
|
+
const getCache = () => {
|
|
103
164
|
return {
|
|
104
165
|
set,
|
|
105
166
|
get,
|
|
@@ -113,7 +174,10 @@ module.exports = {
|
|
|
113
174
|
get,
|
|
114
175
|
del,
|
|
115
176
|
flushAll,
|
|
177
|
+
sadd,
|
|
178
|
+
smembers,
|
|
179
|
+
getClient,
|
|
116
180
|
setConfigs,
|
|
117
181
|
startCache,
|
|
118
182
|
getCache
|
|
119
|
-
};
|
|
183
|
+
};
|