我正在使用com.google.appengine.api.memcache.MemcacheService与Google Memcache一起使用。
在存储值时,我将到期时间设置为60秒。但是即使经过几分钟,该值仍然会从缓存中返回。
使用Memcache的代码:
// Config
int expirationSeconds = 60;
Expiration expiration = Expiration.byDeltaSeconds(expirationSeconds);
MemcacheService memcache = MemcacheServiceFactory.getMemcacheService();
// Write operation
memcache.put(id, value, expiration);
// Read operation
memcache.get(id);
在这种情况下,我希望该值不存在,因为Memcache documentation表示An expired item is removed when someone unsuccessfully tries to retrieve it
。
为什么仍从Memcache返回过期值?
答案 0 :(得分:0)
文档使用两个词evicted
和removed
,可以理解为interchangeable,但它们aren't:
默认情况下,所有值都将尽可能长地保留在缓存中,直到由于内存压力而退出,由应用程序明确删除或由于其他原因(例如中断)而变得不可用。
然后in the note here,我们可以看到删除过程的工作原理:
延迟缓存数据的实际删除是延迟处理的。当有人尝试检索过期的项目失败时,将其删除。
在同一地点,逐出的解释如下:
该值最晚可以撤出,尽管出于其他原因它可以更早地撤出。增加为现有密钥存储的值不会更新其过期时间。
Eviction
类似于软删除,其中值不可用但仍在Memcache中。 Removal
进行实际删除。