Политика истечения срока действия 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 атомарный получить и удалить (предложение прямо над «Заключение»).