django-cors-cache

slick ORM cache and invalidation for Django


License
BSD-3-Clause
Install
pip install django-cors-cache==0.0.0

Documentation

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