Как у меня может быть Google App Engine ясная кэш-память каждый раз, когда сайт развертывается?

Заголовок спрашивает все это. Содержание на сайте, я создаю изменение привычки очень быстро вообще и так Кэш-память, могло потенциально хранить данные в течение многих месяцев за исключением того, когда я поднял обновление. Существует ли способ прояснить кэш каждый раз, когда я развертываю сайт? Я использую время выполнения Python.

Обновление 1

Используя ответ jldupont я поместил следующий код в свой основной сценарий обработки запроса...

Обновление 2

Я переключился на метод, упомянутый Koen Bok в комментариях выбранного ответа, и снабдил префиксом все свои ключи кэш-памяти os.environ['CURRENT_VERSION_ID']/ с полезным кодом в 2-м обновлении ответа. Это решение, кажется, намного более изящно, чем функция, которую я отправил прежде.

25
задан Community 23 May 2017 в 11:52
поделиться

3 ответа

Вы пробовали функцию flush_all()? Доки здесь. Вам понадобится немного логики и состояния для обнаружения нового развертывания или специальный скрипт для выполнения флеш-функции.

Updated: посмотрите на абсолютный путь одного из ваших скриптов: он меняется при каждом развертывании. Вы можете использовать http://shell.appspot.com/: для экспериментов:

.
  import sys
  sys.path

['/base/python_dist/lib/python25.zip', '/base/python_lib/versions/third_party/django-0.96', '/base/python_dist/lib/python2.5/', '/base/python_dist/lib/python2.5/plat-linux2', '/base/python_dist/lib/python2.5/lib-tk', /base/python_dist/lib/python2.5/lib-dynload', '/base/python_lib/versions/1',

Посмотрите на строку с /shell/1.335852500710379686/'.

Итак, просто сделайте снимок (в memcache ;-) этой переменной состояния развертывания и сравните ее, чтобы выполнить операцию по промывке.

Обновление 2: как предложил @Koen Bok, переменная окружения CURRENT_VERSION_ID также может быть использована (часть абсолютного пути к файлам сценариев также).

 import os
 os.environ["CURRENT_VERSION_ID"]
21
ответ дан 28 November 2019 в 21:46
поделиться

При создании ключей для ваших кэшированных значений, включите версию файла, который делает кэш получает/устанавливает в ключ. Таким образом, когда новая версия файла существует, она больше не будет ссылаться на старые версии в кэше - они останутся истекающими сами по себе.

Мы используем CVS и java, поэтому мы объявляем эту переменную в каждом файле, который будет делать кэширование:

private static final String CVS_REVISION = "$Revision $";

Когда вы проверяете этот файл, вы получаете что-то вроде этого:

private static final String CVS_REVISION = "$Revision: 1.15 $";

Вы можете адаптироваться к вашему языку и системе управления версиями, если не CVS. Не забудьте кодировать специальные символы из ваших ключей. Мы обнаружили, что кодирование значений ключей URL хорошо работает для memcached

.
3
ответ дан 28 November 2019 в 21:46
поделиться

Можно просто создать путь только для администратора, который будет флешировать кэш при обращении.

.
0
ответ дан 28 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: