django是动态网站,一般来说客户端向服务端发起请求,需要实时的去views执行函数,并从数据库取出数据,再由template模板进行渲染,最后返回给客户端,一旦访问量增大,服务端的压力也会变得很高;在django中对于用户的访问,采取设置缓存的形式,当用户一定时间内下一次访问相同的网站,则会返回缓存中的内容,请求就不用经过views、models和template的处理;
1、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缓存(python-memcached模块) 'django.core.cache.backends.memcached.PyLibMCCache' # Memcache缓存(pylibmc模块)
2、setting文件中设置:
①、利用文件进行缓存:
CACHES = { 'default': {
# 设置缓存的形式 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
# 文件的保存路径 'LOCATION': '/var/django_cache', 'TIMEOUT': 600, 'OPTIONS': { 'MAX_ENTRIES': 1000 } } }
②、利用数据库进行缓存:
CACHES = { 'default': { # 缓存形式设置为数据库 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 数据库的名字 'LOCATION': 'cache_table_name', 'TIMEOUT': 600, 'OPTIONS': { 'MAX_ENTRIES': 2000 } } }
利用数据库的形式进行缓存,需要先创建数据库,执行一条命令:
python manage.py createcachetable cache_table_name
3、views中的设置:
# 导入缓存模块
from django.views.decorators.cache import cache_page # 验证缓存 @cache_page(60 * 0.5) # 设置缓存时间 def caches(request): current_time = time.time()
# 读取数据并渲染到网页中 return HttpResponse(current_time)
django缓存机制大概的理解:访问一个网址时,尝试去cache中检查是否有当前网页的缓存内容,如果网页在缓存中,则直接从缓存中取出,返回给客户端,否则的话,缓存中自动存储当前访问的页面,以便下次使用;
4、设置缓存应用的位置:
①、缓存机制加到中间件里实现全站缓存:
MIDDLEWARE_CLASSES = [ 'django.middleware.cache.UpdateCacheMiddleware', #增加 必须放最上 'django.middleware.cache.FetchFromCacheMiddleware', #增加 必须放最后 ] CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_SECONDS = 10 # 失效的时间 秒 CACHE_MIDDLEWARE_KEY_PREFIX = 'ValexCache' # 区分网站
②、单独视图中实现缓存机制:
方式1、views.py 增加装饰器:
# 导入缓存模块 from django.views.decorators.cache import cache_page # 验证缓存 @cache_page(60 * 0.5) # 设置缓存时间 def caches(request): current_time = time.time() # 读取数据并渲染到网页中 return HttpResponse(current_time)
方式2、路由中配置使用缓存机制:
from form_app import views from django.views.decorators.cache import cache_page urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login, name='login'), # 路由中配置,cache_page(5)(views.caches), 数字为秒 url(r'^cache/', cache_page(5)(views.caches), name='cache'), ]
③、局部使用缓存机制:
a. 引入TemplateTag {% load cache %} b. 使用缓存 {% cache 5000 缓存key %} # 5000秒 缓存内容 {% endcache %}