我正在使用 go-redis 并尝试对我正在做的 Set 设置过期时间。文档中的示例显示 -func ExampleClient_Set() { // Last argument is expiration. Zero means the key has no // expiration time. err := rdb.Set("key", "value", 0).Err() if err != nil { panic(err) } // key2 will expire in an hour. err = rdb.Set("key2", "value", time.Hour).Err() if err != nil { panic(err) }}从我可以从time文档中收集到的内容(https://golang.org/pkg/time/),time.Hour应该返回“Hour 返回 t 指定的一天内的小时,范围为 [0, 23]。 ”,这将使到期值根据代码运行的时间而有所不同......我确信这不是他们想要的,而且我确信编写模块的人更了解 Go比我,我无法想象这就是它的实际作用。被难住了,我阅读了 Set 的 go-redis 代码(https://github.com/go-redis/redis/blob/0658532833205c238a41687728cb13c294504162/commands.go#L839),它看起来需要几秒钟,除非你有什么设置,然后它需要毫秒,所以我通过了它120,它在第一次运行时花了一个废话说“你要求 120ns,但最小值是 1ms”......我添加了一堆零,它几乎很快就过期了正如我所做的那样Set,所以我最终放弃了,只是决定寻求一些帮助以正确地完成它,而不是在我想要的每个值上添加一堆零并希望它正常工作。我现在有时间。分钟-基于示例,我假设这给了我一分钟,但我实际上想要两个,并且在阅读了所有这些并尝试了所有这些事情之后,我不知道如何实现这一目标。非常感谢您的帮助!
3 回答
慕虎7371278
TA贡献1802条经验 获得超4个赞
从我可以从时间文档中收集到的内容(https://golang.org/pkg/time/),time.Hour应该返回“Hour 返回 t 指定的一天内的小时,范围 [0, 23] 。”
您正在查看的文档time.Time.Hour
,您可以像这样使用它:
now := time.Now() fmt.Println(now.Hour())
您正在寻找的文档是常量time.Hour
,它被time.Duration
定义为60 * Minute
– 它恰好向您展示了如何获得您正在寻找的两分钟。
2 * time.Minute
喵喔喔
TA贡献1735条经验 获得超5个赞
您将time.Hour与Time.Hour()混淆了。
time.Hour
是一个常数,表示一小时的持续时间。这就是您示例中的代码所使用的。
Time.Hour()
is 是一个time.Time
值的方法,它返回指定日期内的小时,正如您从文档中引用的那样。
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
Set
API 需要的是类型time.Duration
。如果需要两分钟,请使用:
err := rdb.Set("key", "value", 2*time.Minute).Err()
您正在查看 的文档Time.Hour()
,而不是time.Hour
.
- 3 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消