2017-02-06 4 views
0

Я использую Google App Engine для своего приложения и для уменьшения затрат на хранилище данных я широко использую memcache.Google App Engine - истечение срока действия Memcache

Пример фрагмента кода, приведенный ниже,

val = memcache.get('forum') 
if val is None: 
     val = 'stackoverflow' 
     memcache.add('forum', val, time=600) 

return val 

Истечение времени я поставил это в течение 10 минут (600/60 = 10 мин), а значение не находится в кэше в течение 10 минут, но в приложение двигателя Memcache документ его говорит, что значения не будут выселены, как показано ниже (поскольку время только необязательный параметр)

добавить (ключ, значение, время = 0, min_compress_len = 0, пространство имен = нет) источник Устанавливает значение ключа, если элемент еще не находится в memcache.

Параметры ключ - ключ для установки. Подробные сведения см. В документации к клиенту.

value - Значение для установки. Любой тип. Если комплекс, будет маринован.

время - дополнительно срок годности, либо относительное число секунд от текущего времени (до 1 месяца), либо абсолютное время эпохи Unix. По умолчанию пункты не истекают, хотя элементы могут быть выведены из-за давления памяти. Поплавковые значения будут округлены до ближайшей целой секунды. min_compress_len - Игнорированная опция для совместимости. namespace - строка , указывающая необязательное пространство имен, которое будет использоваться в запросе. Возвращает Истина, если добавлена. Ошибка при ошибке.

Я также использую выделенный кэш память, он говорит, что ничего не истечет, но в моем случае деталь истекает, когда я установить время (в течение, например: время = 600s), почему это так ??

+0

Введенный вами текст документа говорит о том, что значение по умолчанию никогда не истекает, однако вы поставляете время, поэтому оно будет. Другими словами, поскольку вы задаете параметр времени, вы переопределяете поведение по умолчанию. –

+0

Спасибо Тиму, я думал, что его необязательный параметр - и, хотя мы его укажем, элементы истекут только из-за давления памяти. Вы уверены, что если мы укажем время, то элементы истекают после этого времени. Поскольку мои затраты на движок Google довольно высоки - я нахожу способ его оптимизировать, перемещая все данные в memcache для более высокого времени истечения 1 дня, и могу ли я знать, стоит ли это делать? –

+0

Вы сказали в своем первоначальном вопросе: «Но в моем случае элементы истекают, когда я устанавливаю время (например: time = 600s), почему это так?» Из вашего первоначального описания он работает как задокументированный. Исключение этого параметра означает, что он никогда не истекает. –

ответ

1

От How cached data expires (курсив мой):

Приложение может обеспечить время истечения срока действия, когда значение хранится, а либо количество секунд, по сравнению с тем, когда добавляется значение, или как абсолютное Время эпохи Unix в будущем (несколько секунд от полночь 1 января 1970 года). Значение выдается не позднее этого времени, хотя оно может быть выселено ранее по другим причинам.

+0

Да, я прочитал об этом, и если мы предоставим вам срок действия - значение будет выведено по завершении времени, мои затраты на движок Google будут довольно высокими - я нахожу способ его оптимизировать, перемещая все данные в memcache для более высокого времени истечения 1 дня, и могу ли я знать, стоит ли это делать? –

+0

Ваши затраты на БД снизятся, но ваши затраты на memcache повысятся. $ 1,44/ГБ/день (эквивалентно чтению 2.4M). Может быть достойным (или нет) в зависимости от вашей структуры данных и ее шаблона использования (скорость попадания кеша, размер элемента и т. Д.). В моем случае я предпочел обычный memcache (бесплатно), но только выбранные (очень используемые) данные, кэшированные, без истечения срока действия (при необходимости). –