我是否正确使用 redigo HDEL?

Am I using redigo HDEL correctly?

我似乎对使用 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 // # of keys deleted

这确实有效:

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

为每个 HDEL 提供输出 (int64) 1。从 documentation 和 redigo lib 上的静态代码分析来看,切片似乎是 fields

可接受的参数

构造一个包含命令参数的[]interface{}。将 interface{} 的切片作为 variadic argument:

传递给 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)...)