Node-redis: рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рджрд┐рд╕ре░ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: NodeRedis/node-redis

рдирдорд╕реНрддреЗ, node_redis рд╕рд╛рде HMGET рдпрд╛ KEYS рдЬреИрд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рджред

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

:+1: рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

@aletorrado рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рдереА рдФрд░ рдореИрдВ HKEYS cmd . рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде HSCAN cmd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрдардиреАрдп рдзрд╛рд░рд╛ рдмрдирд╛рдИ:

const redis = require('redis');
const connectionParams = {};

class HKeysReadable extends require('stream').Readable {
  constructor(key, chunkSize, opt) {
    opt = opt || {};
    opt.objectMode = true;
    super(opt);
    this._cursor = 0;
    this.key = key;
    this.chunkSize = chunkSize;
    this.client = redis.createClient(connectionParams);
  }

  _read() {
    if (this._cursor === '0') {
      this.push(null);
      return this.client.quit();
    }

    this.client.hscan(this.key, this._cursor, 'COUNT', this.chunkSize, (err, res) => {
        if (err) {
          this.push(null);
          this.client.quit();
          return process.nextTick(() => this.emit('error', err));
        }

        this._cursor = res[0];

        /**
         *
         SCAN returns value as an array of two values, the first value is the new cursor to use in the next call,
         the second value is an array of elements like: [key1, val1, key2, val2, key3, val3, .....]
         In this stream, we need the keys only so we reduce that array to get only the odd values which contain the keys

         */
        let keys = res[1].reduce((accumulator, val, index)=> {
          if (!(index % 2)) {
            accumulator.push(val);
          }

          return accumulator;
        }, []);

        if (keys.length > 0) {
          this.push(keys);
        }
      }
    );
  }
};

@BridgeAR рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдХреНрдпрд╛ рд░реЗрдбрд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рднреА рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ?

рдмрдврд╝рд┐рдпрд╛ @ рд╣реЛрд╕рдо-рдХрд┐рд░рд╛рдпрд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд░реЗрдбрд┐рд╕ рдХрдорд╛рдВрдб (рдпрд╛рдиреА рд╕реНрдХреИрди, рдПрд╕рдПрд╕рд╕реАрдПрдПрди, рдПрдЪрдПрд╕рд╕реАрдПрдПрди, рдЬреЗрдбрдПрд╕рд╕реАрдПрдПрди) рдХреЗ рд╢реНрд╡реЗрддрд╕реВрдЪреАрдмрджреНрдз рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП node_redis рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рд╕реЗ рдХрд░реНрд╕рд░ рдХреЛ рдЕрдореВрд░реНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@ рд╣реЛрд╕рдо-рдХрд┐рд░рд╛рдпрд╛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: +1:

@BridgeAR рдХреВрд▓, рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛

рдХреНрдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕