Как я могу очистить memcache Google App Engine при каждом развертывании сайта?

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

Обновление 1

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

Обновление 2

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

4 Solutions collect form web for “Как я могу очистить memcache Google App Engine при каждом развертывании сайта?”

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

Обновлено : посмотрите на абсолютный путь одного из ваших скриптов: это изменяется при каждом развертывании. Вы можете использовать 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 / версии / 1 ',' /base/data/home/apps/shell/1.335852500710379686/ ']

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

Итак, просто сохраните моментальный снимок (в memcache 😉 этой переменной состояния развертывания и сравните, чтобы выполнить действие по смыву.

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

  import os os.environ["CURRENT_VERSION_ID"] 

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

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

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

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

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

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

Я не тестировал это, но, возможно, если вы введете в memcache ключ с версией # при запуске экземпляра.

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

Единственный недостаток – это то, что если ключ выдворен, он может заменить memcache на хранилище данных, но затем ваше создание хранилища данных вызывает начало каждого экземпляра.

= Редактировать =

Добавьте вверху ваших названных файлов python из app.yaml

 # Check if the version is updated if memcache.get("static-version") == os.environ["CURRENT_VERSION_ID"]: pass else: memcache.flush_all() memcache.set(key="static-version", value=os.environ["CURRENT_VERSION_ID"]) 

Вы можете просто создать только админ-путь, который будет очищать кеш при его доступе.

  • Как кэшировать вызовы API Django Rest Framework?
  • Кэширование Matplotlib с Memcache (Wont Pickle)
  • Какой ключ: хранить значение для использования с Python?
  • Ошибка при установке pylibmc using pip
  • Что делать, если я хочу сохранить значение None в memcache?
  • Как incr работает со временем истечения срока действия?
  • Лучшее место для очистки кеша при перезапуске сервера django
  • Использование нескольких серверов memcache в пуле
  • Python - лучший язык программирования в мире.