此代码段:

err = memcache.JSON.Set(c, &memcache.Item{
    Key:        mkey,
    Object:     &total,
    Expiration: 600,
})

随后与此进行第二次调用:
_, err := memcache.JSON.Get(c, mkey, &total);

...导致缓存未命中。
只需将Expiration值更改为0会导致高速缓存命中,但是后来我无法控制这些项目何时过期。

我是否误解了到期应该如何工作?

最佳答案

由于memcache.Item确实使用Time.Duration(纳秒),因此最好使用秒来指定Expiration字段:

 time.Second * 600

内存缓存文档中提到:
// Expiration is the maximum duration that the item will stay
// in the cache.
// The zero value means the Item has no expiration time.
// Subsecond precision is ignored.
// This is not set when getting items.
Expiration time.Duration

10-02 23:25