【问题标题】:Redis client doesn't delete anythingRedis 客户端不会删除任何内容
【发布时间】:2016-07-04 09:06:43
【问题描述】:

我正在使用 node.js redis client。在运行单元测试之前,我想清除所有 redis 键。由于一些奇怪的原因,我的代码什么也没做。

const redis = require('redis');

const client = redis.createClient({
  host: conf.host,
  port: conf.port,
  prefix: conf.prefix
});

client.on('connect', err => {
  // everything is OK here. I can set and get.
});

module.exports = redis;

在开始测试之前,我想清除我的缓存:

const redis = require('file-above');

before(done => {
  redis.keys('*', function (err, rows) {
    rows.forEach(row => {
      console.log(row); // perfectly matched
      redis.del(row);
      // nothing changed. I can still get any of the rows above here
    });
  });
  done();
});

在此之后没有任何内容被删除。我尝试添加setTimeout,尝试直接使用redis.del('*', done),不匹配键。

我在 redis 包自述文件中找不到与 .del 相关的任何内容,以找出我做错了什么。

【问题讨论】:

    标签: javascript node.js caching redis


    【解决方案1】:

    如果合适,您应该使用flushall。在此处查看更多文档http://redis.io/commands/FLUSHALL。不过,关于您的实现,我认为您需要将回调传递给del

    【讨论】:

    • 该死,del 中的回调解决了我的问题。在网上某处发现 .del 是同步功能的信息。好的,谢谢帮助
    • 不幸的是我错了。什么都没有改变。我不能使用 flushall,因为它删除的数据比我想要的多。无论如何感谢您的帮助
    • 如果你在循环中调用del,你应该使用async.js或promises
    • 我已经开始输入“当然可以”。打开 IDE 将代码 sn-p 粘贴到问题中,发现循环中有一个愚蠢的错误。它有效,它有效。感谢您的参与。
    【解决方案2】:

    问题是您使用的是前缀。因此,如果您使用键功能(从文档中它不会附加任何前缀)。但是,如果您使用从 keys 函数中获取的键并使用它来删除它,它将再次附加前缀。所以你需要创建一个没有前缀选项的新redis客户端并使用它,或者你可以在调用del函数之前删除keys数组中的前缀。

    例如。 你的前缀是 'TEMP:' 如果您使用带有 '*' 的键功能,它会获取键 ['TEMP:name','TEMP:age']

    但是在 del 函数中,如果你迭代数组,会发生什么是要删除的键的名称变为 'TEMP:TEMP:name',因为 redis 在 del 函数中添加了前缀,所以密钥没有被删除。

    在遍历循环时,您可以删除键数组中的前缀

    const redis = require('file-above');
    
    before(done => {
    redis.keys('*', function (err, rows) {
    rows.forEach(row => {
      console.log(row); //"TEMP:name"
      row.substr(yourRedisPrefix.length) //this will remove your key prefix from the row so the key name will be without prefix.  "name"
      redis.del(row); // here redis adds the prefix itself. "TEMP:name"
       });
      });
      done();
     });
    

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多