go - 我是否正确使用 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
解决方案
构造一个[]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)...)
推荐阅读
- javascript - 如何在不知道密钥名称的情况下访问密钥
- javascript - 使用正则表达式的 Javascript 字符串拆分
- javascript - 在 Javascript/momentjs 中将 UTC 日期视为本地
- node.js - 如何使用 request-promise-native 设置原始正文
- java - 如何将字符串数组拆分为多个字符串?
- angularjs - 无法调用服务中的函数
- ruby-on-rails - 无法在 ruby on rails 5.0 模型中使用活动记录时间方法
- r - 如何在 r 中为波士顿数据集创建图形
- php - 修改upload_max_filesize php.ini 不起作用
- angularjs - 如何缩小 angularjs+bootstrap4 项目