Политика истечения срока действия AppEngine Memcache

Я ожидал следующий код 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 как-то интерпретировать даты истечения срока действия, которые слишком далеко в прошлом, относительно настоящего, а не абсолютного ??? Но даже это не соответствовало бы результату, потому что 1 мс от пута все равно должно было истечь к тому времени, когда получилось?

Какое значение я могу установить для Expiration, чтобы гарантировать немедленное истечение (и удаление!) Введенной записи? Имейте в виду, что простое использование текущей метки времени может работать ненадежно, поскольку AppEngine не предоставляет никаких гарантий синхронизации часов между серверами!

Я знаю, что желание сделать это на первый взгляд кажется бессмысленным (почему бы просто не удалить его?), Но я бы хотел использовать его здесь:AppEngine Memcache атомарный получить и удалить (предложение прямо над «Заключение»).

Ответы на вопрос(1)

Ваш ответ на вопрос