Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用节点js从redis删除密钥_Node.js_Redis - Fatal编程技术网

Node.js 使用节点js从redis删除密钥

Node.js 使用节点js从redis删除密钥,node.js,redis,Node.js,Redis,我正试图用下面的代码删除redis中的密钥,但出于某种原因,这并不是删除redis中的密钥,而是进行控制台操作。有人能帮我一下吗?我这里缺什么 import { RedisClient } from 'redis'; let rediClient: RedisClient = redis.createClient(redisPort, redisHostName, { auth_pass: authPass, no_ready_check: true, prefix:

我正试图用下面的代码删除redis中的密钥,但出于某种原因,这并不是删除redis中的密钥,而是进行控制台操作。有人能帮我一下吗?我这里缺什么

import { RedisClient } from 'redis';

let rediClient: RedisClient = redis.createClient(redisPort, redisHostName, {
    auth_pass: authPass,
    no_ready_check: true,
    prefix: KEY_PREFIX,
    retry_strategy: redisRetryStrategy,
    tls: { servername: hostName },
  });

let cursor = '0';

const scan = (pattern: string, callback: () => void) => {
  redisClient.scan(
    cursor,
    'MATCH',
    pattern,
    'COUNT',
    '1000',
    async (err, reply) => {
      console.log(err);
      if (err) {
        throw err;
      }
      cursor = reply[0];
      const keys = reply[1];
      console.log(keys);
      console.log(keys.length);
      console.log(keys[1]);
      if (keys) {
        await redisClient.del(keys[1], (deleteErr, deleteSuccess) => {
          console.log(`err ==> ${deleteErr}`);
          console.log(deleteSuccess);
        });
        console.log(` key 0 is : ${keys[0]}`);
        redisClient.del(keys[0]);
        // keys.forEach((key) => {
        //   redisClient.del(key, (deleteErr, deleteSuccess) => {
        //     console.log(`err ==> ${deleteErr}`);
        //     console.log(deleteSuccess);
        //   });
        // });
      }

      if (cursor !== '0') {
        console.log(cursor);
        return scan(pattern, callback);
      }

      return callback();
    }
  );
};

export const deleteResetPin = (pattern: string) => {
  scan(pattern, () => {
    console.log('Scan Complete');
  });
};

要求:我想使用节点js删除与模式匹配的所有键,并使用注释部分(从
键开始。forEach
)运行
扫描
功能将删除与模式匹配的所有键,但这里有几个需要修复/改进的地方:

  • 在删除键之前,将调用回调(因此也会调用日志)
  • 如果扫描回复有错误,则错误将被取消,进程将退出
  • 你把回电和承诺混为一谈
  • 您可以一次删除一组密钥
  • 以下是该函数的“承诺”版本:

    const{promisify}=require('util'),
    client=require('redis')。createClient(),
    scanAsync=promisify(client.scan).bind(client),
    delAsync=promisify(client.del).bind(client);
    异步函数scanAndDelete(模式:string):Promise{
    设游标='0';
    做{
    const reply=等待扫描异步(光标“匹配”、模式“计数”、“1000”);
    游标=回复[0];
    等待delAsync(回复[1]);
    }而(光标!='0')
    }