skip to navigation
skip to content

django-cors-cache 0.0.0

slick ORM cache and invalidation for Django

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 запросы на час
        }