bonsaif 1.10.30 → 1.10.32
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/hookup/redis.js +87 -22
- package/package.json +1 -1
package/lib/hookup/redis.js
CHANGED
|
@@ -9,31 +9,55 @@
|
|
|
9
9
|
let tag = ` ::: B[]NSAIF() ::: => redis.js `;
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
const scan=async(options,db,
|
|
12
|
+
const scan=async(options,db, cursor, pattern, count)=>{ // SCAN cursor [MATCH pattern] [COUNT count]
|
|
13
13
|
const exec = require("./exec");
|
|
14
14
|
const redisConn = await exec.redisConn(options);
|
|
15
15
|
const start = Date.now();
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
cursor = cursor!=null ? cursor : '0';
|
|
18
|
+
pattern = pattern!=null ? pattern : '*';
|
|
19
|
+
count = count!=null ? count : 100;
|
|
20
|
+
|
|
21
|
+
return new Promise((resolve, reject)=>{
|
|
22
|
+
try{
|
|
23
|
+
redisConn.select(db,function() { /* ... */ });
|
|
24
|
+
|
|
25
|
+
let args = [cursor];
|
|
26
|
+
if (pattern) {
|
|
27
|
+
args.push('MATCH', pattern);
|
|
28
|
+
}
|
|
29
|
+
if (count) {
|
|
30
|
+
args.push('COUNT', count);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
redisConn.scan(args, function (err, res) {
|
|
34
|
+
if (err) {
|
|
35
|
+
reject(err);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const end = Date.now();
|
|
40
|
+
const time = end - start;
|
|
41
|
+
|
|
42
|
+
// res[0] es el nuevo cursor, res[1] es el array de keys
|
|
43
|
+
resolve({
|
|
44
|
+
"cursor": res[0],
|
|
45
|
+
"keys": res[1],
|
|
46
|
+
"count": res[1].length,
|
|
47
|
+
"time": utl.milisegundosASegundos(time)
|
|
48
|
+
});
|
|
49
|
+
|
|
17
50
|
try{
|
|
18
|
-
|
|
19
|
-
const redisScan = require('node-redis-scan');
|
|
20
|
-
const scanner = new redisScan(redisConn);
|
|
21
|
-
scanner.scan(key, (err, matchingKeys) => {
|
|
22
|
-
if (err) throw(err);
|
|
23
|
-
const end = Date.now();
|
|
24
|
-
const time = end - start;
|
|
25
|
-
resolve({"count":matchingKeys.length, "keys":matchingKeys, "time":utl.milisegundosASegundos(time)});
|
|
26
|
-
|
|
27
|
-
try{
|
|
28
|
-
exec.redisClose(redisConn);
|
|
29
|
-
}catch(e){
|
|
30
|
-
utl.log('err.scan '+e);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
51
|
+
exec.redisClose(redisConn);
|
|
33
52
|
}catch(e){
|
|
34
|
-
utl.log('err
|
|
53
|
+
utl.log('err.scan '+e);
|
|
35
54
|
}
|
|
36
|
-
})
|
|
55
|
+
});
|
|
56
|
+
}catch(e){
|
|
57
|
+
utl.log('err scan: '+e);
|
|
58
|
+
reject(e);
|
|
59
|
+
}
|
|
60
|
+
})
|
|
37
61
|
}
|
|
38
62
|
|
|
39
63
|
const set=async(options, db, key, value, expire )=>{
|
|
@@ -252,6 +276,36 @@ const smembers=async( options, db, key, toJson )=>{ // SMEMBERS key
|
|
|
252
276
|
})
|
|
253
277
|
}
|
|
254
278
|
|
|
279
|
+
const sinter=async(options, db, keys)=>{ // SINTER key [key ...]
|
|
280
|
+
const exec = require("./exec");
|
|
281
|
+
const redisConn = await exec.redisConn(options);
|
|
282
|
+
const start = Date.now();
|
|
283
|
+
|
|
284
|
+
// Asegurarse de que keys sea un array
|
|
285
|
+
if (!Array.isArray(keys)) {
|
|
286
|
+
keys = [keys];
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return new Promise((resolve, reject)=>{
|
|
290
|
+
try{
|
|
291
|
+
redisConn.select(db,function() { /* ... */ }); //base 1
|
|
292
|
+
redisConn.sinter(keys, function (err, res) {
|
|
293
|
+
const end = Date.now();
|
|
294
|
+
const time = end - start;
|
|
295
|
+
|
|
296
|
+
resolve({"sinter":keys, "err":err, "res":res, "time":utl.milisegundosASegundos(time)});
|
|
297
|
+
try{
|
|
298
|
+
exec.redisClose(redisConn);
|
|
299
|
+
}catch(e){
|
|
300
|
+
utl.log('err.sinter '+e);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}catch(e){
|
|
304
|
+
utl.log('err sinter'+e);
|
|
305
|
+
}
|
|
306
|
+
})
|
|
307
|
+
}
|
|
308
|
+
|
|
255
309
|
const scard=async( options, db, key )=>{ // SCARD key
|
|
256
310
|
const exec = require("./exec");
|
|
257
311
|
const redisConn = await exec.redisConn(options);
|
|
@@ -730,7 +784,7 @@ const api=async(options, dbm, json)=>{
|
|
|
730
784
|
let lstop = json.stop!=null?json.stop*1:-1;
|
|
731
785
|
let {field:id, val:vid} = getFirstField(filter);
|
|
732
786
|
|
|
733
|
-
let ltdml = ['hfind','upsert','set','get','scan','incrby','sadd','srem','smembers','hset','hgetall','
|
|
787
|
+
let ltdml = ['sinter','sunionstore','scard','hmget','hfind','upsert','set','get','scan','incrby','sadd','srem','smembers','hset','hgetall','del','incrbyfloat','expireat','setnx','hsetnx','hmset','expire','lrange','keys'];
|
|
734
788
|
for (let x of ltdml){
|
|
735
789
|
if (utl.ObjectEmpty(json,x)){
|
|
736
790
|
dml = x; break;
|
|
@@ -739,20 +793,26 @@ const api=async(options, dbm, json)=>{
|
|
|
739
793
|
|
|
740
794
|
try{ eval(` key = json.${dml}; `); } catch(e){}
|
|
741
795
|
|
|
796
|
+
let keysArray = json.keys!=null ? json.keys : [];
|
|
797
|
+
let fieldsArray = json.fields!=null ? json.fields : [];
|
|
798
|
+
let destination = json.destination!=null ? json.destination : '';
|
|
799
|
+
let cursor = json.cursor!=null ? json.cursor : '0';
|
|
800
|
+
let pattern = json.pattern!=null ? json.pattern : key;
|
|
801
|
+
let scan_count = json.count!=null ? json.count : 100;
|
|
802
|
+
|
|
742
803
|
let r;
|
|
743
804
|
switch (dml){
|
|
744
805
|
case 'set': r = await set(options,dbm,key,value,expire); break;
|
|
745
806
|
case 'get': r = await get(options,dbm,key); break;
|
|
746
807
|
case 'hfind': r = await hfind(options,dbm,key,filter,order,limit); break;
|
|
747
808
|
case 'upsert': r = await upsert(options,dbm,key,value,id,vid,expire); break;
|
|
748
|
-
case 'scan': r = await scan(options,dbm,
|
|
809
|
+
case 'scan': r = await scan(options,dbm,cursor,pattern,scan_count); break;
|
|
749
810
|
case 'incrby': r = await incrby(options,dbm,key,value,expire,counter); break;
|
|
750
811
|
case 'sadd': r = await sadd(options,dbm,key,value,expire); break;
|
|
751
812
|
case 'srem': r = await srem(options,dbm,key,value); break;
|
|
752
813
|
case 'smembers': r = await smembers(options,dbm,key,toJson); break;
|
|
753
814
|
case 'hset': r = await hset(options,dbm,key,value,expire); break;
|
|
754
815
|
case 'hgetall': r = await hgetall(options,dbm,key); break;
|
|
755
|
-
case 'hmget': r = await hmget(options,dbm,key,value); break;
|
|
756
816
|
case 'del': r = await del(options,dbm,key); break;
|
|
757
817
|
case 'incrbyfloat': r = await incrbyfloat(options,dbm,key,value,expire,counter); break;
|
|
758
818
|
case 'expireat': r = await expireat(options,dbm,key,expire); break;
|
|
@@ -762,6 +822,10 @@ const api=async(options, dbm, json)=>{
|
|
|
762
822
|
case 'expire': r = await expire(options,dbm,key,expire); break;
|
|
763
823
|
case 'lrange': r = await lrange(options,dbm,key,lstart,lstop); break;
|
|
764
824
|
case 'keys': r = await keys(options,dbm,key); break;
|
|
825
|
+
case 'sinter': r = await sinter(options,dbm,Array.isArray(key) ? key : [key]); break;
|
|
826
|
+
case 'hmget': r = await hmget(options,dbm,key,fieldsArray); break;
|
|
827
|
+
case 'sunionstore': r = await sunionstore(options,dbm,destination,keysArray); break;
|
|
828
|
+
case 'scard': r = await scard(options,dbm,key); break;
|
|
765
829
|
default: r = {"dml":"404", "err":"dml not found."};
|
|
766
830
|
}
|
|
767
831
|
|
|
@@ -857,6 +921,7 @@ module.exports ={
|
|
|
857
921
|
sadd,
|
|
858
922
|
srem,
|
|
859
923
|
smembers,
|
|
924
|
+
sinter,
|
|
860
925
|
scard,
|
|
861
926
|
sunionstore,
|
|
862
927
|
hset,
|