go - 尝试从 redis 中的列表 LPOP 时错误的类型操作
问题描述
我正在使用 golang 玩 redis,但是当我尝试LPOP
从列表中获取一个元素时,我不断收到错误消息。它仅在我在列表中插入第一个元素时才有效,但是当我尝试添加第二个元素时,我不断收到以下错误:
WRONGTYPE Operation against a key holding the wrong kind of value
我已阅读文档,但我仍然收到此错误,请任何人指出我做错了什么,因为我仍在调试。谢谢
testCases := []struct{
name string
key string
val string
} {
{
name: "one",
key: "color",
val: "red",
},
{
name: "two"
key: "color",
val: "blue",
},
{
name: "three"
key: "color",
val: "purple",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T){
rc := redis.NewClient{} // params added
defer rc.Close()
err := rc.Send("RPUSH", tc.key, tc.val)
require.NoError(t, err)
err = rc.Flush()
require.NoError(t, err)
v, err = redis.String(rc.Do("LPOP", tc.key))
require.NoError(t, err)
assert.Exact(t, tc.val, v)
_, err = rc.Do("SETEX", tc.key, 10, tc.val)
require.NoError(t, err)
})
}
解决方案
RPUSH 文档说:
当 key 保存的值不是列表时,将返回错误。
在循环的第一次迭代结束时,应用程序使用 SETEX 命令将“颜色”设置为字符串值。
在第二次迭代开始时对“颜色”的 RPUSH 失败,因为“颜色”不是列表。
推荐阅读
- php - PHP、MYSQL、AJAX - 过滤多选
- c# - 更改 ItemsSource 时自定义 ComboBox 抛出异常
- ios - 等待方法执行,直到在 Swift 中满足条件
- html - 设置输入标签的宽度(Bootstrap4)
- python - 如何使用 Selenium 和 Beautiful Soup 在 Python 中加快网页抓取速度?
- rust - 无法将切片索引转换为 u8 类型以插入到宏期望表达式中
- scala - 如何将 RDD[org.apache.spark.sql.Row] 转换为 RDD[org.apache.spark.mllib.linalg.Vector]
- python - RandomizedSearchCV 并行:调度作业过多导致 NaN 丢失?
- python - open() - 打开通过 UI 与通过控制台创建的文件
- swift - 是否可以指定带有时区(即 GMT 偏移量)但没有时间的 ISO 日期?