0

我似乎有使用 HDEL 命令界面的正确用法,但似乎删除了 0 条记录。我在这里错过了什么吗?

以下是有用的代码片段:

这不起作用:

keysToDeleteArr []string //this has valid key values from upstream

s.transClient.Do("MULTI")
_, err := s.transClient.Do("HDEL", myhash, keysToDeleteArr)
s.transClient.Do("EXEC")

给出输出 (int64) 0 // 删除的键数

这确实有效:

s.transClient.Do("MULTI")
for _, keyToDelete := range keysToDeleteArr {
  _, err := s.transClient.Do("HDEL", myhash, keyToDelete)
}
s.transClient.Do("EXEC")

为每个 HDEL 提供一个输出 (int64) 1。从文档和 redigo lib 上的静态代码分析来看,切片似乎是可接受的参数fields

4

1 回答 1

1

构造一个[]interface{}包含命令参数的。将切片interface{}作为可变参数传递给 Do 方法:

args := make([]interface{}, 0, len(keysToDeleteArr) + 1)
args = append(args, myhash)
for _, v := range keysToDeleteArr {
    args = append(args, v)
}
 _, err := s.transClient.Do("HDEL", args...)

使用 Redigo 的Args在一行中执行上面的代码:

 _, err := s.transClient.Do("HDEL", redis.Args{}.Add(myhash).AddFlat(keysToDeleteArr)...)
于 2021-10-19T01:26:06.973 回答