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.
Files changed (2) hide show
  1. package/lib/hookup/redis.js +87 -22
  2. package/package.json +1 -1
@@ -9,31 +9,55 @@
9
9
  let tag = ` ::: B[]NSAIF() ::: => redis.js `;
10
10
 
11
11
 
12
- const scan=async(options,db, key)=>{
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
- return new Promise((resolve, reject)=>{
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
- redisConn.select(db,function() { /* ... */ });
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 scan: '+e);
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','hmget','del','incrbyfloat','expireat','setnx','hsetnx','hmset','expire','lrange','keys'];
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, key); break;
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,
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "name": "bonsaif",
16
16
  "description": "bonsaif is a library to connect to bonsaif apis",
17
- "version": "1.10.30",
17
+ "version": "1.10.32",
18
18
  "main": "index.js",
19
19
  "directories": {
20
20
  "lib": "lib"