提问人:baris 提问时间:3/14/2023 更新时间:3/14/2023 访问量:933
使用 Golang 的 Redis 包执行 HSET 操作时超出了上下文截止时间
context deadline exceeded performing hset operation using golang's redis package
问:
触发 的代码如下:HashMapSet
ctx = context.WithValue(ctx, "isCli", true)
numberOfCreatedGroups := 0
for _, ip := range ips {
time.Sleep(time.Millisecond * time.Duration(delay))
if err := ih.dc.add(ctx, ip, uint32(0)); err != nil {
log.WithFields(log.Fields{
GroupIp: ip,
}).Info(err)
continue
} else {
numberOfCreatedGroups += 1
}
}
该函数还调用以下函数:add
_, err := db.Repo.HashMapSet(ctx, key, groupIp, id)
其中 HashMapSet 函数调用实际的 HSet 函数,如下所示。
func (r *repository) HashMapSet(ctx context.Context, key string, values ...interface{}) (int64, error) {
intCmd := r.Client.HSet(ctx, key, values...)
log.WithFields(log.Fields{"key": key, "values": values, "result": intCmd}).Debug("repo-hashmapset")
return intCmd.Result()
}
以下是我看到的输出:
DEBU[2023-03-13T22:44:35.191449159+03:00] repo-hashmapset key=ig_groupids/55 result="hset ig_groupids/55 239.254.1.175 432: context deadline exceeded" values="[239.254.1.175 432]"
INFO[2023-03-13T22:44:35.191572577+03:00] context deadline exceeded group-ip=239.254.1.175
DEBU[2023-03-13T22:44:35.211896763+03:00] repo-hashmapset key=ig_groupids/55 result="hset ig_groupids/55 239.254.1.176 432: context deadline exceeded" values="[239.254.1.176 432]"
INFO[2023-03-13T22:44:35.212052712+03:00] context deadline exceeded group-ip=239.254.1.176
DEBU[2023-03-13T22:44:35.232327292+03:00] repo-hashmapset key=ig_groupids/55 result="hset ig_groupids/55 239.254.1.177 432: context deadline exceeded" values="[239.254.1.177 432]"
INFO[2023-03-13T22:44:35.232373678+03:00] context deadline exceeded group-ip=239.254.1.177
DEBU[2023-03-13T22:44:35.252736679+03:00] repo-hashmapset key=ig_groupids/55 result="hset ig_groupids/55 239.254.1.178 432: context deadline exceeded" values="[239.254.1.178 432]"
INFO[2023-03-13T22:44:35.252776536+03:00] context deadline exceeded group-ip=239.254.1.178
DEBU[2023-03-13T22:44:35.273120216+03:00] repo-hashmapset
它与吗?因为在我看来,这里的所有调用都使用了相同的上下文。在 9 到 10 秒等一段时间后,应用程序开始生成这些输出。我使用的不是.它也可能与创建或初始化 Redis 连接的方式有关吗?在启动阶段,我没有通过任何超时或类似的东西。context.WitValue
context deadline exceeded
redis
redis-sentinel
答: 暂无答案
评论
context.WithValue
if ctx.Err() != nil { break }
context.WithTimeout
context deadline exceeded
context.Background()