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


Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page