Spec-Zone.ru › Werkzeug 0.15

Кэш

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

Устарело начиная с версии 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(), но не перезаписывает значения уже существующих ключей.

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

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

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

boolean

clear()

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

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

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

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

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

Новое значение или None для ошибок бэкенда.

delete(key)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Новое значение или None для ошибок бэкенда.

set(key, value, timeout=None)

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

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

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

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

boolean

set_many(mapping, timeout=None)

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

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

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

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

boolean

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

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

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

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

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

Параметры:
  • 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 Appengine.

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

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

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

Первый аргумент может быть строкой, обозначающей адрес сервера 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.15.x/contrib/cache/

Spec-Zone.ru

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