由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回
Django的缓存的功能需要在全局设置参数settings.py中设置,在文件中加入如下配置能容
setting.py
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': os.path.join(BASE_DIR, 'cache'), 'TIMEOUT': 600, 'OPTIONS': { 'MAX_ENTRIES': 1000 } } }
配置中参数的意义
BACKEND :表示要选择缓存的模式,范例缓存采用本地文件来进行缓存。django中支持的全部缓存格式如下:
'django.core.cache.backends.db.DatabaseCache' #使用数据库缓存 'django.core.cache.backends.dummy.DummyCache' 'django.core.cache.backends.filebased.FileBasedCache' #本地文件缓存 'django.core.cache.backends.locmem.LocMemCache' #本地内存缓存 'django.core.cache.backends.memcached.MemcachedCache' #使用memcache缓存 'django.core.cache.backends.memcached.PyLibMCCache'
在 github 上也有用 redis 做 Django的缓存系统的开源项目:https://github.com/niwibe/django-redis
LOCATION :表示本地缓存的存储位置,范例中是存储在mydjango项目中的cache目录下
TIMEOUT :表示超时时间,单位是秒。超过指定时间缓存就会整体刷新清空掉。
MAX_ENRIES: 对于内存,文件系统和数据库后端,高速缓存允许的最大条目数,超出这个数则旧值将被删除。 这个参数默认是300
CULL_PERCENTAGE :当达到 max_entries 的时候,被删除的条目比率。 实际的比率是 1/cull_percentage ,所以设置cull_frequency=2就是在达到 max_entries 的时候去除一半数量的缓存。
把 cull_frequency 的值设置为 0 意味着当达到 max_entries 时,缓存将被清空。 这将以很多缓存丢失为代价,大大提高接受访问的速度。
在mydjango项目目录下创建一个cache目录用于存放缓存文件
在app01应用目录下的views.py里创建一个返回在前端返回当前时间的cache_time()函数
/app01/views.py
from django.shortcuts import HttpResponse import time #导入cache模块 from django.views.decorators.cache import cache_page """ 给要缓存的页面函数加上装饰器,这个函数的执行结果就会被缓存到文件里 括号里的内容60秒*15 也就是15分钟 """ @cache_page(60 * 15) def cache_time(request): now=time.strftime('%Y-%m-%d %H:%M:%S') return HttpResponse(now)
配置mydjango子目录下的urls.py添加函数与url之间的映射关系
/mydjango/urls.py
#!/usr/bin/env python # coding:utf-8 from django.conf.urls import url,include from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^cache_time/$', views.cache_time), ]
最后打开浏览器不停的刷新,看到页面时间一直保持不动。就说明缓存已经生效了。
最后查看一下刚才创建的cache目录是否已经产生缓存文件
备注:我们在settings.py 通过TIMEOUT设置了一个超时时间,在views.py里通过装饰器@cache_page(60 * 15)也设置了一个超时时间。可以这样理解,settings.py函数里的超时时间是一个全局默认的超时时间。如果我们在views.py里给函数设置了@cache_page(60 * 15),那么这个函数的超时时间就是15分钟。如果我们没有指定缓存时间的话,就按settings.py设置的默认值超时。