我期待以下的AppEngine代碼:應用服務引擎內存緩存期滿策略
MemcacheService memcache = MemcacheServiceFactory.getMemcacheService();
memcache.put("Foo", "Bar", Expiration.onDate(new Date(1)));
System.out.println(memcache.get("Foo"));
System.out.println(memcache.put("Foo", "Baz", null, SetPolicy.ADD_ONLY_IF_NOT_PRESENT));
,得到以下輸出:
null
true
即通過在1970年將條目設置到緩存中時設置到期日期,我期望它立即被丟棄並可供重用。
相反,我得到:
Bar
false
即入口仍在。
現在,奇怪的是,如果我我的代碼更改爲Expiration.onDate(new Date())
(不1
),即做put操作之前設定的到期向右,我做獲得預期的「空,真」。
難道Memcache會以某種方式解釋過去相對於現在而言過於遙遠的過期日期而不是絕對的嗎?但即使這樣也不符合結果,因爲1ms的投入仍然應該在獲勝的時候過期?!?
我可以將過期設置爲什麼值,以確保放入條目立即到期(和刪除!)?請記住,簡單地使用當前時間戳可能無法可靠地工作,因爲AppEngine不提供跨服務器的任何時鐘同步保證!
我知道想要做到這一點乍一看聽起來毫無意義(爲什麼不只是刪除它?),但我想在這裏使用它:AppEngine Memcache atomic get-and-delete(在「結論」上方的句子)。