django의 캐시 메커니즘
1. 캐시 설정
1. Memcached
만약 당신이 신출내기라면 똑똑히 알아야 한다.
구성 방법:
django.core.cache.backends.memcached.MemcachedCache
django.core.cache.backends.memcached.PyLibMCCache
localhost (127.0.0.1) port 11211
에서 실행되고 python-memcached
라이브러리를 사용했다. CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
/tmp/memcached.sock
, 의존python-memcached
: CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
/tmp/memcached.sock
에서 실행되고 unix:/
접두사 없이pylibmc 라이브러리에 의존합니다. CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '/tmp/memcached.sock',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:21423',
'172.19.26.244:11213',
]
}
}
사실 현재는 리디스가 캐시로서 더 좋고 서열화도 지원합니다.
2. 데이터베이스 캐시
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', #
}
}
# : python manage.py createcachetable
redis 캐시
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
session backend
로 사용SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': 'c:/foo/bar',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
# ( 300,None ,0 )
'TIMEOUT': 300,
'OPTIONS':{
# ( 300)
'MAX_ENTRIES': 300,
# , , :1/CULL_FREQUENCY( 3)
'CULL_FREQUENCY': 3,
},
}
}
#
from django.views.decorators.cache import cache_page@cache_page(5) # ,5
def student_list(request, *args, **kwargs):
students = models.Student.objects.all()
print('students')
return render(request, 'student_list.html', {'students': students})
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
'TIMEOUT': 300, # ( 300,None ,0 )
'OPTIONS':{
# ( 300)
'MAX_ENTRIES': 300,
# , , :1/CULL_FREQUENCY( 3)
'CULL_FREQUENCY': 3,
},
'KEY_PREFIX': '', # key ( )
'VERSION': 1, # key ( 1)
'KEY_FUNCTION': # key ( :【 : :key】)
}
}
CACHES = {
'default': {
'BACKEND': 'path.to.backend',
}
}
TIMEOUT
: 캐시의 기본 만료 시간은 초 단위이고 기본 300초 None은 영원히 만료되지 않는다는 것을 의미한다.0으로 설정하면 캐시가 즉시 효력을 상실합니다. (캐시가 의미가 없습니다.)OPTIONS
: 캐시 백엔드에 따라 선택할 수 있는 매개 변수입니다.KEY_PREFIX
: Django 서버에서 사용하는 모든 캐시 키의 문자열입니다.VERSION
: Django 서버에서 생성된 기본 버전 번호입니다.KEY_FUNCTION
: 함수의 점 경로를 포함하는 문자열입니다. 이 함수는 접두사, 버전과 키를 최종 캐시 키로 조합하는 방법을 정의합니다.CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT': 60,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'OPTIONS': {
'server_max_value_length': 1024 * 1024 * 2,
}
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
'OPTIONS': {
'binary': True,
'username': 'user',
'password': 'pass',
'behaviors': {
'ketama': True,
}
}
}
}
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', #
# ...
'django.middleware.cache.FetchFromCacheMiddleware', # ]
update
중간부품은 목록의 시작 위치에 놓아야 하고, fectch
중간부품은 마지막에 놓아야 한다.이것은 Django가 중간부품을 사용하는 규칙입니다. 이것은 순서 관계가 있고 위에서 아래로 순서대로 실행됩니다.요청이 오면 중간부품 프로세스를 실행합니다request 방법, 이럴 때 캐시에 데이터가 있는지 없는지,fectch 중간부품에 프로세스가 하나 있음request 방법은 캐시 데이터를 가져오는 데 사용되며, 루트가 일치하지 않으면 데이터를 되돌려주기 때문에 마지막에 두어야 합니다.데이터가 브라우저에 되돌아갈 때 캐시를 업데이트하고 캐시에 넣기 때문에 업데이트 중간부분에 프로세스가 있습니다response 방법은 캐시 데이터를 업데이트하는 데 사용되기 때문에 맨 위에 놓습니다.CACHE_MIDDLEWARE_ALIAS :
CACHE_MIDDLEWARE_SECONDS : page .
CACHE_MIDDLEWARE_KEY_PREFIX :
cache_page
를 정의했습니다. 사용은 매우 간단합니다. from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
cache_page
는 매개 변수를 받아들입니다. timeout, 초 단위입니다.상례에서 my_view()
보기의 결과는 15분간 캐시됩니다. (가독성을 높이기 위해 60* 15로 작성됨) urlpatterns = [
url(r'^foo/([0-9]{1,2})/$', my_view),
]
그러면 /foo/23/
와 /foo/1/
에 보내는 요청은 각각 캐시됩니다.그러나 명확한 URL(예를 들어 /foo/23/
이 요청되면 다시 이 URL을 가리키는 요청은 캐시된 내용을 사용합니다.cache_page
도 일부 추가 파라미터를 사용할 수 있다. 예를 들어cache, 이 파라미터는 구체적으로 사용하는 캐시 백엔드를 가리킨다.@cache_page(60 * 15, cache="special_cache")
def my_view(request):
...
key_prefix
를 사용하여 각 보기에 구체적인 캐시 접두사를 지정할 수 있다. @cache_page(60 * 15, key_prefix="site1")
def my_view(request):
...
cache
템플릿 탭을 사용하여 템플릿의 한 부분을 캐시할 수 있다.이 라벨을 사용하려면 먼저 모델의 맨 위에 {% load cache %}
를 추가해야 한다.{% cache %}
은 지정된 시간 동안 캐시 레이블 블록에 포함됩니다.최소한 두 개의 인자가 필요합니다. 캐시 시간 (초 단위) 과 캐시 세션에 대한 이름입니다.이렇게: {% load cache %}
{% cache 500 sidebar %}
.. sidebar ..
{% endcache %}
{% cache %}
탭에 이 캐시 세션을 구분하는 매개 변수를 전달하면 다음과 같다. {% load cache %}
{% cache 500 sidebar request.user.username %}
.. sidebar for logged in user ..
{% endcache %}
{% cache 600 sidebar %} ... {% endcache %}
{% cache my_timeout sidebar %} ... {% endcache %}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.