Самый быстрый способ скопировать Redis db с Node.js - PullRequest
0 голосов
/ 14 января 2020

У нас есть redis db, которая ведет себя неправильно с точки зрения использования стандартных инструментов CLI для выгрузки / копирования данных. Так что мы просто скопируем это программно. У меня есть этот код прямо сейчас:

import * as Redis from 'ioredis';
import * as async from 'async';

export type EVCb<T = any, E = any> = (err?: E, val?: T) => void;
export type Task<T> = (cb: EVCb<T>) => void;


const redis = new Redis({
  port: 6379,
  db: 0
});

const redis2 = new Redis({
  port: 6379,
  db: 1
});


export const run = (cb: EVCb<void>) => {

  const q = async.queue<Task<any>>((task, cb) => task(cb), 3);

  let scanCount: number = -5000;

  const getNext = () : number => {
    return scanCount = scanCount + 5000;
  };

  const add = () => {

    const scanCount = getNext();

    q.push(async cb => {

      try {
        const [x, v] = await redis.scan(scanCount);

        if(v.length < 1){
          return cb(null);
        }

        add();

        const d: Array<any> = await redis.mget(...v);

        let i = 0;

        const z = v.reduce((a,b) => (a.set(b, d[i++]), a), new Map());

        await redis2.mset(z);

      } catch (e) {
        return cb(e);
      }

      cb(null);

    }, err => {

      if (err) {
        console.error(err);
      }

    });

  };


  add();
  add();
  add();

  q.drain(cb);

};

это не лучший код, но он должен работать. Кто-нибудь знает, есть ли более быстрый способ скопировать все ключи / значения из одной БД в другую? Кроме того, кто-нибудь знает, почему очередь asyn c никогда не сливается?

1 Ответ

1 голос
/ 14 января 2020

Если вы хотите скопировать в тот же экземпляр Redis (из базы данных 0 в 1) - вы можете проверить ответ на «Восстановить дамп Redis в другую базу данных» и, возможно, скопировать Содержимое RDB / AOF дважды, а затем настроить его (одна копия для каждого номера БД).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...