在Google App Engine上使用Go语言,具有任何过期时间的Memcache项目会立即过期。

huangapple go评论89阅读模式
英文:

Memcache item with any Expiration expires immediately on Google App Engine with Go

问题

这段代码片段:

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

紧接着是第二次调用:

_, err := memcache.JSON.Get(c, mkey, &total); 

...导致缓存未命中。
将Expiration值更改为0会导致缓存命中,但我无法控制项目何时过期。

我是否误解了过期时间的工作原理?

英文:

This code snippet:

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

followed by a second call with this:

_, err := memcache.JSON.Get(c, mkey, &total); 

...results in a cache miss.
Simply changing the Expiration value to 0 results in cache hits, but then I can't control when the items expire.

Am I misreading how expiration is supposed to work?

答案1

得分: 4

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

 time.Second * 600

memcache文档中提到:

// Expiration是项目在缓存中保留的最长时间。
// 零值表示项目没有过期时间。
// 忽略亚秒精度。
// 获取项目时不设置此值。
Expiration time.Duration
英文:

Since the memcache.Item does use Time.Duration (nanosecond), it is best to specify the Expiration field using seconds:

 time.Second * 600

The memcache doc mentions:

// 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

huangapple
  • 本文由 发表于 2014年10月7日 02:22:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/26222377.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定