Skip to main content

slick ORM cache and invalidation for Django

Project description

Django cors cache modeule
=========================

Модуль для обеспечения полного спектра кэширования.

Кэширование в шаблонах
----------------------

===Query cache===

Кэширование доступно только для get/count запросов, остальные не являются эффективными.

===Обычный кэш===

Полностью копирует аналогичный тег в Django.

{% load cors_cache %}

{% cache "cahce_block_name" var1 var2 ... varN cache=cache2 %}
Content...
{% endcache %}

===Умный кэш===

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

smart_cache block_name [model_links]
model_links - объекты типа Model


{% load cors_cache %}

{% smart_cache "cahce_block_name" request.user cache=cache2 %}
Content...
{% end_smart_cache %}


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

{% smart_cache "cahce_block_name" request.user cache=cache2 links="news.article.user" %}
Content...
{% end_smart_cache %}

Таким образом изменяя или создавая *news.article*, ищется тег с именем
*cahce_block_name* и связанным с полем user в модели news.
Но лучше релизовать карту инвалидации, для этого случая она будет такой:

CORSCACHE_EXTENDET_LINKS = {
'news.article': {
'cahce_block_name': {'links':('user',),'cache':'cache2'},
},
}

Example settings
----------------

# -*- coding: utf-8 -*-

CORSCACHE_DEFAULT_TIME = 86400 # 24 Hour
CORSCACHE_DEFAULT_CACHE = 'level1'

# Префиксы к именам кэша
CORSCACHE_BLOCKS_PREFIX = 'blocks'
CORSCACHE_QUERYS_PREFIX = 'queryes'

CORSCACHE_ACTIVE = True
CORSCACHE_QUERYCACHE_ACTIVE = True

#
# Интелект - автоматическая отчистка связанных блоков.
# Если отчистка построена только на правилах то лучше выключить.
#
CORSCACHE_INTELLIGENCE = True

#
# Сторонние связки. [ Карта инвалидации ]
#
# Иногда невозможно реализовать динамическую привязку блока к объекту,
# Просто потому что это неимеет никакого смысла
# Ведь наша задача ограничить число запросов,
# и вот здесь помогут связки объекта с блоками.
#
# Определим какой объект должен влиять на блок
#
# 'news.article': { 'news': {'links':('user',),'cache':'cacheName'}, 'catalog.product': ('section',) }
# Он влияет на блок новостей посредством своей связи с пользователем.
# В этом случае блок у нас объявлен как:
#
# {% smart_cache "news" autor cache=cacheName %} ... {% end_smart_cache %}
#
# При изменении или создании новости сбрасывается кэш этой группу связанный с пользователем
#

# Карта инвалидации
CORSCACHE_EXTENDET_LINKS = {
# Инвалидация по моим друзьям
# Проводится при создании/удалении или изменении друга
'friendlent.friend': {
'user_info': ('user',), # Инвалидируем блок user_info связанный с user
'planes_block': ('user',), # Обновим планы
'notifi_block': ('user',), # Обновим уведомления
'notifies_index': ('user',), # Обновим уведомления index
'friendlent_general': ('user',), # Блок друзей справа
},
'profile.profile': {
'user_info': ('user',), # Инвалидируем блок user_info связанный с user
},
# Блок хочу побывать справа
'geographi.iwas': {
'wantvisited_city': {'links':('user',),'cache':'level2'},
'visited_city': {'links':('user',),'cache':'level2'},
},
# Обновление уведомлений
'reester.atom': {
'notifi_block': ('user',), # Обновим уведомления
'notifies_index': ('user',), # Обновим уведомления index
},
}

# Кэширование запросов
CORSCACHE_QUERY_CACHE = {
'auth.user':{'get':3600}, # Получить Пользователя на час
'profile.profile':{'get':3600}, # Получить профиль на час
'*.*': {'count':3600,'cache':'level2'}, # Кэшируем все count запросы на час
}

Project details


Release history Release notifications

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page