Django的缓存

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,

最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,

则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

Django中提供了6种缓存方式:

  • 开发调试
  • 内存
  • 文件
  • 数据库
  • Memcache缓存(python-memcached模块)
  • Memcache缓存(pylibmc模块)

djangoMemcache缓存分为3种形式:

需要安装: pip install python_memcached 模块

  1.  通过中间键实现(实现全栈缓存)。  process_request,  process_response

1.settings.py 配置

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',   # 这两个中间键不能位置必须放在一首,一尾,update 在上
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
]

........


CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'TIMEOUT': 5,
        'LOCATION': [('192.168.11.81:12000',1),]
    }
}


CACHE_MIDDLEWARE_SECONDS = 5  # 设置缓存时间

2.总路由中url.py:

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
   
]

3.视图中: views.py  

from django.shortcuts import render,HttpResponse
import time

def index(request):

    ctime = time.time()

    return render(request,'index.html',{'ctime': ctime})

4. 模板中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h3>{{ ctime }}</h3>    
</body>
</html>

通过以上配置就能实现全站缓存。

  2.对单个视图 (对单页面做缓存)  , 使用 装饰器。@cache_page

1.settings.py 配置

# 配置  
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': [('192.168.11.81:12000',1),] } }

如果需要其他设置:

存入memcached 的数据格式:

2.总路由中url.py:

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
   
]

3.视图中: views.py  

from django.shortcuts import render,HttpResponse
import time
 from django.views.decorators.cache import cache_page

@cache_page(5)
def index(request):

    ctime = time.time()

    return render(request,'index.html',{'ctime': ctime})

4. 模板中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h3>{{ ctime }}</h3>    </body>
</html>

页面效果是每5秒钟更新一次数据。

  3. 页面局部缓存(模板中的应用)

 1.配置中settings.py

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'TIMEOUT': 5,
        'LOCATION': [('192.168.11.81:12000',1),]
    }
}

2.总路由中url.py:

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
   
]

3.视图中: views.py  

from django.shortcuts import render,HttpResponse
import time

def index(request):

    ctime = time.time()

    return render(request,'index.html',{'ctime': ctime})

4.  模板html中

{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h3>{{ ctime }}</h3>
    {% cache 5 "kkkkkkkk" %}
            <h3>{{ ctime }}</h3>
    {% endcache %}

</body>
</html>

 参数代表的含义:

 扩展:以后可以自己写装饰器,实现单页面的缓存。

在视图中:

# 缓存装饰器
def
cache(func): def inner(request,*args,**kwargs): # 这可以打开文件或数据,看看数据库中是否有该值,有就从文件中读取并直接返回 res = func(request,*args,**kwargs) # 这可以 把数据把数据写入文件,或数据库 return res return inner

 扩展内容:

http://www.cnblogs.com/wupeiqi/articles/5246483.html

原文地址:https://www.cnblogs.com/knighterrant/p/10704234.html