memcache如何准确地删除过期的数据?

时间:2018-09-19 16:06:14

标签: java google-app-engine memcached

我正在使用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返回过期值?

1 个答案:

答案 0 :(得分:0)

文档使用两个词evictedremoved,可以理解为interchangeable,但它们aren't

  

默认情况下,所有值都将尽可能长地保留在缓存中,直到由于内存压力而退出,由应用程序明确删除或由于其他原因(例如中断)而变得不可用。

然后in the note here,我们可以看到删除过程的工作原理:

  

延迟缓存数据的实际删除是延迟处理的。当有人尝试检索过期的项目失败时,将其删除。

在同一地点,逐出的解释如下:

  

该值最晚可以撤出,尽管出于其他原因它可以更早地撤出。增加为现有密钥存储的值不会更新其过期时间。

Eviction类似于软删除,其中值不可用但仍在Memcache中。 Removal进行实际删除。