首页 > 解决方案 > 我是否正确使用 redigo HDEL?

问题描述

我似乎有使用 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

标签: goredisredigo

解决方案


构造一个[]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)...)

推荐阅读