Как именно memcache удаляет просроченные данные? - PullRequest
0 голосов
/ 19 сентября 2018

Я использую 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 Документация говорит, что An expired item is removed when someone unsuccessfully tries to retrieve it.

Почему истекшее значение все еще возвращается из Memcache?

1 Ответ

0 голосов
/ 26 сентября 2018

В документации используются два слова evicted и removed, которые можно понимать как взаимозаменяемые , но они не :

Byпо умолчанию все значения остаются в кэше как можно дольше, пока их не высвободят из-за нехватки памяти, не удалят приложение явно или не сделают недоступными по другой причине (например, из-за сбоя).

И в примечании здесь мы можем видеть, как работает процесс удаления:

Фактическое удаление данных из кэша с истекшим сроком хранения обрабатывается лениво.Устаревший элемент удаляется, когда кто-то безуспешно пытается его получить.

В том же месте выселение объясняется так:

Значение выселяется не позднее этоговремя, хотя это может быть выселено раньше по другим причинам.Увеличение значения, сохраненного для существующего ключа, не обновляет время его истечения.

Eviction - это что-то вроде мягкого удаления, когда значение недоступно, но все еще находится в Memcache.Removal выполняет фактическое удаление.

...