Spec-Zone.ru › Werkzeug 0.16

Кэш

Предупреждение

Устаревшее с версии 0.15: Будет удалено в версии 1.0. Вынесено в cachelib.

werkzeug.contrib.cache

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

Это намного дороже, чем просто загрузка файла из файловой системы и отправка его посетителю.

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

Как работает кэширование

Кэширование довольно просто. В основном у вас есть объект кэша, расположенный где-то, который подключен к удаленному кэшу, файловой системе или чему-то еще. Когда поступает запрос, вы проверяете, есть ли текущая страница уже в кэше, и если да, то возвращаете ее из кэша. В противном случае вы генерируете страницу и помещаете ее в кэш. (Или фрагмент страницы, вам не нужно кэшировать все целиком)

Вот простой пример кэширования боковой панели на 5 минут:

def get_sidebar(user):
    identifier = 'sidebar_for/user%d' % user.id
    value = cache.get(identifier)
    if value is not None:
        return value
    value = generate_sidebar_for(user=user)
    cache.set(identifier, value, timeout=60 * 5)
    return value

Создание объекта кэша

Чтобы создать объект кэша, просто импортируйте систему кэширования из модуля cache и инициализируйте его. Затем вы можете начать работать с этим объектом:

>>> from werkzeug.contrib.cache import SimpleCache
>>> c = SimpleCache()
>>> c.set("foo", "value")
>>> c.get("foo")
'value'
>>> c.get("missing") is None
True

Пожалуйста, имейте в виду, что вам необходимо создать кэш и поместить его в доступное место (либо в качестве глобального модуля, который можно импортировать, либо просто поместить его в ваше приложение WSGI).

API системы кэширования

class werkzeug.contrib.cache.BaseCache(default_timeout=300)

Базовый класс для систем кэширования. Все системы кэширования реализуют этот API или его надмножество.

Параметры: default_timeout – стандартный таймаут (в секундах), используемый, если таймаут не указан в set(). Таймаут 0 означает, что кэш никогда не истекает.
add(key, value, timeout=None)

Действует так же, как set(), но не перезаписывает значения уже существующих ключей.

Параметры:
  • ключ – ключ для установки
  • значение – значение для ключа
  • timeout – таймаут кэширования для ключа в секундах (если не указано, используется стандартный таймаут). Таймаут 0 означает, что кэш никогда не истекает.
Возвращает:

То же, что и set(), но также False для уже существующих ключей.

Тип возвращаемого значения:

boolean

clear()

Очищает кэш. Имейте в виду, что не все кэши поддерживают полную очистку кэша.

Возвращает: Была ли очищена кэшированная система.
Тип возвращаемого значения: boolean
dec(key, delta=1)

Уменьшает значение ключа на delta. Если ключ еще не существует, он инициализируется значением -delta.

Для поддерживаемых кэшей это атомарная операция.

Параметры:
  • ключ – ключ для инкремента.
  • delta – разница для вычитания.
Возвращает:

Новое значение или None в случае ошибок на стороне бэкенда.

delete(key)

Удалить key из кэша.

Параметры: ключ – ключ для удаления.
Возвращает: Существовал ли ключ и был ли удален.
Тип возвращаемого значения: boolean
delete_many(*keys)

Удаляет несколько ключей одновременно.

Параметры: ключи – функция принимает несколько ключей в качестве позиционных аргументов.
Возвращает: Были ли удалены все заданные ключи.
Тип возвращаемого значения: boolean
get(key)

Ищет ключ в кэше и возвращает значение для него.

Параметры: ключ – ключ для поиска.
Возвращает: Значение, если оно существует и доступно, иначе None.
get_dict(*keys)

Как get_many(), но возвращает словарь:

d = cache.get_dict("foo", "bar")
foo = d["foo"]
bar = d["bar"]
Параметры: ключи – функция принимает несколько ключей в качестве позиционных аргументов.
get_many(*keys)

Возвращает список значений для заданных ключей. Для каждого ключа создается элемент в списке:

foo, bar = cache.get_many("foo", "bar")

Имеет ту же обработку ошибок, что и get().

Параметры: ключи – функция принимает несколько ключей в качестве позиционных аргументов.
has(key)

Проверяет, существует ли ключ в кэше, не возвращая его. Это недорогая операция, которая обходит загрузку фактических данных на бэкенде.

Этот метод является необязательным и может быть не реализован во всех кэшах.

Параметры: ключ – ключ для проверки
inc(key, delta=1)

Увеличивает значение ключа на delta. Если ключ еще не существует, он инициализируется значением delta.

Для поддерживаемых кэшей это атомарная операция.

Параметры:
  • ключ – ключ для инкремента.
  • delta – разница для добавления.
Возвращает:

Новое значение или None в случае ошибок на стороне бэкенда.

set(key, value, timeout=None)

Добавляет новую пару ключ/значение в кэш (перезаписывает значение, если ключ уже существует в кэше).

Параметры:
  • ключ – ключ для установки
  • значение – значение для ключа
  • timeout – таймаут кэширования для ключа в секундах (если не указано, используется стандартный таймаут). Таймаут 0 означает, что кэш никогда не истекает.
Возвращает:

True если ключ был обновлен, False в случае ошибок на стороне бэкенда. Ошибки сериализации, однако, вызовут подкласс pickle.PickleError.

Тип возвращаемого значения:

boolean

set_many(mapping, timeout=None)

Устанавливает несколько ключей и значений из отображения.

Параметры:
  • отображение – отображение с ключами/значениями для установки.
  • timeout – таймаут кэширования для ключа в секундах (если не указано, используется стандартный таймаут). Таймаут 0 означает, что кэш никогда не истекает.
Возвращает:

Были ли установлены все заданные ключи.

Тип возвращаемого значения:

boolean

Системы кэширования

class werkzeug.contrib.cache.NullCache(default_timeout=300)

Кэш, который ничего не кеширует. Это может быть полезно для юнит-тестирования.

Параметры: default_timeout – фиктивный параметр, игнорируемый, но необходимый для совместимости с другими кэшами.
class werkzeug.contrib.cache.SimpleCache(threshold=500, default_timeout=300)

Простой кэш в памяти для однопроцессорных сред. Этот класс в основном используется для сервера разработки и не является полностью потокобезопасным. Он пытается использовать как можно больше атомарных операций и никаких блокировок для простоты, но при высокой нагрузке может произойти ситуация, когда ключи добавляются несколько раз.

Параметры:
  • threshold – максимальное количество элементов, хранимых в кэше, прежде чем он начнёт удалять некоторые из них.
  • default_timeout – значение по умолчанию для таймаута, используемое, если таймаут не указан в set(). Таймаут 0 означает, что кэш никогда не истекает.
class werkzeug.contrib.cache.MemcachedCache(servers=None, default_timeout=300, key_prefix=None)

Кэш, использующий memcached в качестве бэкенда.

Первый аргумент может быть объектом, напоминающим API memcache.Client, или кортежем/списком адресов сервера. Если передается кортеж/список, Werkzeug пытается импортировать наиболее подходящую библиотеку memcache.

Этот кэш ищет следующие пакеты/модули, чтобы найти bindings для memcached:

  • pylibmc
  • google.appengine.api.memcached
  • memcached
  • libmc

Примечания к реализации: Этот бэкенд кэша обходит некоторые ограничения memcached, чтобы упростить интерфейс. Например, ключи в формате Unicode кодируются в utf-8 на лету. Методы, такие как get_dict(), возвращают ключи в том же формате, что и входные данные. Кроме того, все методы get молча игнорируют ошибки ключей, чтобы не создавать проблем при передаче недоверенных данных пользователя методам get, что часто происходит в веб-приложениях.

Параметры:
  • servers – список или кортеж адресов сервера, или же memcache.Client, или совместимый клиент.
  • default_timeout – значение по умолчанию для таймаута, используемое, если таймаут не указан в set(). Таймаут 0 означает, что кэш никогда не истекает.
  • key_prefix – префикс, добавляемый перед всеми ключами. Это позволяет использовать один и тот же сервер memcached для различных приложений. Имейте в виду, что clear() также очистит ключи с другим префиксом.
class werkzeug.contrib.cache.GAEMemcachedCache

Этот класс устарел в пользу MemcachedCache, который теперь также поддерживает Google App Engine.

Изменено в версии 0.8: Устарел в пользу MemcachedCache.

class werkzeug.contrib.cache.RedisCache(host='localhost', port=6379, password=None, db=0, default_timeout=300, key_prefix=None, **kwargs)

Использует Redis хранилище ключей-значений в качестве бэкенда кэша.

Первый аргумент может быть строкой, обозначающей адрес Redis сервера, или объектом, напоминающим экземпляр класса redis.Redis.

Примечание: Python Redis API уже обрабатывает кодирование строк unicode на лету.

Введено в версии 0.7.

Введено в версии 0.8: key_prefix был добавлен.

Изменено в версии 0.8: Этот бэкенд кэша теперь правильно сериализует объекты.

Изменено в версии 0.8.3: Этот бэкенд кэша теперь поддерживает аутентификацию по паролю.

Изменено в версии 0.10: **kwargs теперь передается в redis объект.

Параметры:
  • host – адрес Redis сервера или объект, API которого совместим с официальным Python Redis клиентом (redis-py).
  • port – номер порта, на котором Redis сервер слушает соединения.
  • password – пароль для аутентификации на Redis сервере.
  • db – база данных (индекс, начиная с нуля) на Redis сервере для подключения.
  • default_timeout – значение по умолчанию для таймаута, используемое, если таймаут не указан в set(). Таймаут 0 означает, что кэш никогда не истекает.
  • key_prefix – префикс, который должен быть добавлен ко всем ключам.

Любые дополнительные ключевые аргументы будут переданы в redis.Redis.

class werkzeug.contrib.cache.FileSystemCache(cache_dir, threshold=500, default_timeout=300, mode=384)

Кэш, хранящий элементы в файловой системе. Этот кэш зависит от того, что он единственный пользователь cache_dir. Абсолютно убедитесь, что никто, кроме этого кэша, не хранит файлы там, иначе кэш будет случайным образом удалять файлы.

Параметры:
  • cache_dir – каталог, в котором хранятся файлы кэша.
  • threshold – максимальное количество элементов, хранимых в кэше, прежде чем он начнёт удалять некоторые. Значение порога 0 означает, что порога нет.
  • default_timeout – значение по умолчанию для таймаута, используемое, если таймаут не указан в set(). Таймаут 0 означает, что кэш никогда не истекает.
  • mode – режим файла для файлов кэша, по умолчанию 0600
class werkzeug.contrib.cache.UWSGICache(default_timeout=300, cache='')

Реализует кэш с использованием фреймворка кэширования uWSGI.

Примечание

Этот класс не может использоваться при работе под PyPy, потому что реализация API uWSGI для PyPy отсутствует необходимая функциональность.

Параметры:
  • default_timeout – таймаут по умолчанию в секундах.
  • cache – имя экземпляра кэша для подключения, например: mycache@localhost:3031, по умолчанию пустая строка, что означает, что uWSGI будет кешировать в локальном экземпляре. Если кэш находится в том же экземпляре, что и приложение Werkzeug, вам нужно только указать имя кэша.

© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/0.16.x/contrib/cache/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API