【问题标题】:Unable to delete multiple redis keys in nodejs using 'redis' package无法使用'redis'包删除nodejs中的多个redis键
【发布时间】:2021-03-02 17:56:27
【问题描述】:

我的 redis 键遵循如下模式:

ZZprefixA-1
ZZprefixA-2
ZZprefixA-3
ZZprefixB-1
ZZprefixB-2
ZZprefixB-3
...

我想删除所有符合以下模式的键

ZZprefixA-*

我的代码如下所示:

const redis = require('redis')
const { promisify } = require('util')

const options = {
  host: REDIS_HOST,
  port: REDIS_PORT,
  prefix: 'ZZ'
  password: REDIS_PASSWORD,
}

if (REDIS_PASSWORD) {
  options.password = REDIS_PASSWORD
}

const redisClient = redis.createClient(options)

delAsync = promisify(redisClient.del).bind(redisClient)
getKeysAsync = promisify(redisClient.keys).bind(redisClient)

现在我正在尝试通过以下方式删除与模式匹配的键:

const keys = await getKeysAsync(`ZZprefixA-*`)

const result = await delAsync(keys)

console.log(result)

const dkeys = await getKeysAsync(
      `ZZprefixA-*`
    )
console.log(dkeys)

'result' 的控制台日志打印 0,'dkeys' 打印匹配的键,尽管在键上调用了 del 函数。

【问题讨论】:

    标签: javascript node.js redis


    【解决方案1】:

    prefix: 'ZZ' 选项会导致您出现问题,当您设置密钥 prefixA-1 时,redis 会自动添加前缀 ZZ,然后密钥变为 ZZprefixA-1。当你尝试删除键时,redis 也会在你得到的键ZZprefixA-1 ZZprefixA-2 ZZprefixA-3 后面加上前缀ZZ,那么你真正的删除键是ZZZZprefixA-1 ZZZZprefixA-2 ZZZZprefixA-3。虽然这些密钥不存在,所以什么也不会发生,您的密钥会被保留。

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 2011-08-29
      • 2015-12-26
      • 1970-01-01
      • 2022-01-12
      • 2020-02-23
      • 2022-01-05
      • 2023-03-06
      • 2016-04-12
      相关资源
      最近更新 更多