Django-캐싱

무언가를 캐시하는 것은 비용이 많이 드는 계산 결과를 저장하여 다음에 필요할 때 수행하지 않도록하는 것입니다. 다음은 캐싱이 작동하는 방식을 설명하는 의사 코드입니다.

given a URL, try finding that page in the cache

if the page is in the cache:
   return the cached page
else:
   generate the page
   save the generated page in the cache (for next time)
   return the generated page

Django는 필요할 때 다시 계산하지 않도록 동적 페이지를 저장할 수있는 자체 캐싱 시스템을 제공합니다. Django Cache 프레임 워크의 좋은 점은 캐시 할 수 있다는 것입니다.

  • 특정보기의 출력입니다.
  • 템플릿의 일부입니다.
  • 귀하의 전체 사이트.

Django에서 캐시를 사용하려면 먼저 캐시가 유지 될 위치를 설정해야합니다. 캐시 프레임 워크는 다양한 가능성을 제공합니다. 캐시는 데이터베이스, 파일 시스템 또는 메모리에 직접 저장할 수 있습니다. 설정은settings.py 프로젝트의 파일.

데이터베이스에서 캐시 설정

프로젝트 settings.py 파일에 다음을 추가하십시오.

CACHES = {
   'default': {
      'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
      'LOCATION': 'my_table_name',
   }
}

이것이 작동하고 설정을 완료하려면 캐시 테이블 'my_table_name'을 생성해야합니다. 이를 위해 다음을 수행해야합니다.

python manage.py createcachetable

파일 시스템에서 캐시 설정

프로젝트 settings.py 파일에 다음을 추가하십시오.

CACHES = {
   'default': {
      'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
      'LOCATION': '/var/tmp/django_cache',
   }
}

메모리에 캐시 설정

이것은 가장 효율적인 캐싱 방법입니다.이를 사용하려면 메모리 캐시에 대해 선택한 Python 바인딩 라이브러리에 따라 다음 옵션 중 하나를 사용할 수 있습니다.

CACHES = {
   'default': {
      'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
      'LOCATION': '127.0.0.1:11211',
   }
}

Or

CACHES = {
   'default': {
      'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
      'LOCATION': 'unix:/tmp/memcached.sock',
   }
}

전체 사이트 캐싱

Django에서 캐시를 사용하는 가장 간단한 방법은 전체 사이트를 캐시하는 것입니다. 이는 프로젝트 settings.py에서 MIDDLEWARE_CLASSES 옵션을 편집하여 수행됩니다. 옵션에 다음을 추가해야합니다-

MIDDLEWARE_CLASSES += (
   'django.middleware.cache.UpdateCacheMiddleware',
   'django.middleware.common.CommonMiddleware',
   'django.middleware.cache.FetchFromCacheMiddleware',
)

여기서 순서는 중요합니다. 업데이트는 Fetch 미들웨어보다 먼저 와야합니다.

그런 다음 동일한 파일에서 다음을 설정해야합니다.

CACHE_MIDDLEWARE_ALIAS – The cache alias to use for storage.
CACHE_MIDDLEWARE_SECONDS – The number of seconds each page should be cached.

뷰 캐싱

전체 사이트를 캐시하지 않으려면 특정보기를 캐시 할 수 있습니다. 이것은cache_pageDjango와 함께 제공되는 데코레이터. 결과를 캐시하고 싶다고합시다.viewArticles 보기-

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)

def viewArticles(request, year, month):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

보시다시피 cache_page보기 결과를 매개 변수로 캐시 할 시간 (초)이 걸립니다. 위의 예에서 결과는 15 분 동안 캐시됩니다.

Note − 위의보기가지도에 표시되기 전에 확인했듯이 −

urlpatterns = patterns('myapp.views',
   url(r'^articles/(?P<month>\d{2})/(?P<year>\d{4})/', 'viewArticles', name = 'articles'),)

URL이 매개 변수를 사용하기 때문에 각 호출이 개별적으로 캐시됩니다. 예를 들어, / myapp / articles / 02 / 2007에 대한 요청은 / myapp / articles / 03 / 2008에 별도로 캐시됩니다.

뷰 캐싱은 url.py 파일에서 직접 수행 할 수도 있습니다. 그러면 다음과 같은 결과가 위와 같습니다. myapp / url.py 파일을 편집하고 관련 매핑 된 URL (위)을 다음과 같이 변경하십시오.

urlpatterns = patterns('myapp.views',
   url(r'^articles/(?P<month>\d{2})/(?P<year>\d{4})/', 
   cache_page(60 * 15)('viewArticles'), name = 'articles'),)

물론 myapp / views.py에서는 더 이상 필요하지 않습니다.

템플릿 조각 캐싱

템플릿의 일부를 캐시 할 수도 있습니다.이 작업은 cache꼬리표. 우리를 가져 가자hello.html 템플릿 −

{% extends "main_template.html" %}
{% block title %}My Hello Page{% endblock %}
{% block content %}

Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}

the first day of month.
{% elif today == 30 %}

the last day of month.
{% else %}

I don't know.
{%endif%}

<p>
   {% for day in days_of_week %}
   {{day}}
</p>

{% endfor %}
{% endblock %}

콘텐츠 블록을 캐시하기 위해 템플릿은 다음과 같습니다.

{% load cache %}
{% extends "main_template.html" %}
{% block title %}My Hello Page{% endblock %}
{% cache 500 content %}
{% block content %}

Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}

the first day of month.
{% elif today == 30 %}

the last day of month.
{% else %}

I don't know.
{%endif%}

<p>
   {% for day in days_of_week %}
   {{day}}
</p>

{% endfor %}
{% endblock %}
{% endcache %}

위에서 볼 수 있듯이 캐시 태그에는 2 개의 매개 변수가 필요합니다. 블록을 캐시 할 시간 (초)과 캐시 조각에 이름을 지정할 수 있습니다.