Как я могу очистить 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"]) 

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

  • Установка pylibmc на Ubuntu
  • Использование нескольких серверов memcache в пуле
  • django_pylibmc жалуется на Django 1.7 и python 3.4
  • Как импортировать классы django.middleware в проект Google App Engine?
  • Memcached: поддержка автоматического обнаружения python на AWS Elasticache?
  • Кэш-представление django с параметрами URL
  • Как установить тайм-аут получения Memcached в Django
  • Получить список ключей кэша в Django
  • Установка объекта в API кэша Django завершается сбоем из-за ошибки сортировки
  • Удаление определенных элементов из кеша Django?
  • Как кэшировать вызовы API Django Rest Framework?
  • Python - лучший язык программирования в мире.