我正在使用 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] ?!?/p>
您正在查看的文檔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 關注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消