Заголовок спрашивает все это. Содержание на сайте, я создаю изменение привычки очень быстро вообще и так Кэш-память, могло потенциально хранить данные в течение многих месяцев за исключением того, когда я поднял обновление. Существует ли способ прояснить кэш каждый раз, когда я развертываю сайт? Я использую время выполнения Python.
Используя ответ jldupont я поместил следующий код в свой основной сценарий обработки запроса...
Я переключился на метод, упомянутый Koen Bok в комментариях выбранного ответа, и снабдил префиксом все свои ключи кэш-памяти os.environ['CURRENT_VERSION_ID']/
с полезным кодом в 2-м обновлении ответа. Это решение, кажется, намного более изящно, чем функция, которую я отправил прежде.
Вы пробовали функцию 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"]
При создании ключей для ваших кэшированных значений, включите версию файла, который делает кэш получает/устанавливает в ключ. Таким образом, когда новая версия файла существует, она больше не будет ссылаться на старые версии в кэше - они останутся истекающими сами по себе.
Мы используем CVS и java, поэтому мы объявляем эту переменную в каждом файле, который будет делать кэширование:
private static final String CVS_REVISION = "$Revision $";
Когда вы проверяете этот файл, вы получаете что-то вроде этого:
private static final String CVS_REVISION = "$Revision: 1.15 $";
Вы можете адаптироваться к вашему языку и системе управления версиями, если не CVS. Не забудьте кодировать специальные символы из ваших ключей. Мы обнаружили, что кодирование значений ключей URL хорошо работает для memcached
.Можно просто создать путь только для администратора, который будет флешировать кэш при обращении.
.