Django 缓存系统
Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多。
缓存系统工作原理:
对于给定的网址,尝试从缓存中找到网址,如果页面在缓存中,直接返回缓存的页面,如果缓存中没有,一系列操作(比如查数据库)后,保存生成的页面内容到缓存系统以供下一次使用,然后返回生成的页面内容。
Django settings 中 cache 默认为
{
'default' : {
'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' ,
}
}
|
也就是默认利用本地的内存来当缓存,速度很快。当然可能出来内存不够用的情况,其它的一些内建可用的 Backends 有
'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'
'django.core.cache.backends.memcached.PyLibMCCache'
|
利用文件系统来缓存:
CACHES = {
'default' : {
'BACKEND' : 'django.core.cache.backends.filebased.FileBasedCache' ,
'LOCATION' : '/var/tmp/django_cache' ,
'TIMEOUT' : 600 ,
'OPTIONS' : {
'MAX_ENTRIES' : 1000
}
}
}
|
利用数据库来缓存,利用命令创建相应的表:python manage.py createcachetable cache_table_name
CACHES = {
'default' : {
'BACKEND' : 'django.core.cache.backends.db.DatabaseCache' ,
'LOCATION' : 'cache_table_name' ,
'TIMEOUT' : 600 ,
'OPTIONS' : {
'MAX_ENTRIES' : 2000
}
}
}
|
下面用一些实例来说明如何使用 Django 缓存系统
一般来说我们用 Django 来搭建一个网站,要用到数据库等。
from django.shortcuts import render
def index(request):
# 读取数据库等 并渲染到网页
# 数据库获取的结果保存到 queryset 中
return render(request, 'index.html' , { 'queryset' :queryset})
|
像这样每次访问都要读取数据库,一般的小网站没什么问题,当访问量非常大的时候,就会有很多次的数据库查询,肯定会造成访问速度变慢,服务器资源占用较多等问题。
from django.shortcuts import render
from django.views.decorators.cache import cache_page
@cache_page ( 60 * 15 ) # 秒数,这里指缓存 15 分钟,不直接写900是为了提高可读性
def index(request):
# 读取数据库等 并渲染到网页
return render(request, 'index.html' , { 'queryset' :queryset})
|
当使用了cache后,访问情况变成了如下:
访问一个网址时, 尝试从 cache 中找有没有缓存内容
如果网页在缓存中显示缓存内容,否则生成访问的页面,保存在缓存中以便下次使用,显示缓存的页面。
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
|
Memcached 是目前 Django 可用的最快的缓存
另外,Django 还可以共享缓存。
Django 缓存机制详解http://www.sharejs.com/codes/python/6471
Django 缓存系统相关推荐
- Django缓存系统
为什么要做django缓存? 在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面. 这会消耗大量的资源,当访问用户量非常大时,就要 ...
- Django(缓存系统)
什么是缓存Cache 缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式.一般用来存储临时数据,常用介质的是读取速度很快的内存.一般来说从数据库多次把所需要的数据提取出来,要比 ...
- Django 缓存6.2
缓存 对于中等流量的网站来说,尽可能地减少开销是必要的.缓存数据就是为了保存那些需要很多计算资源的结果,这样的话就不必在下次重复消耗计算资源 Django自带了一个健壮的缓存系统来保存动态页面,避免对 ...
- django 1.8 官方文档翻译:使用Django认证系统
使用Django认证系统 这篇文档解释默认配置下Django认证系统的使用.这些配置已经逐步可以满足大部分常见项目对的需要,可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现.对于需要与默认配 ...
- django 1.8 官方文档翻译:13-1-2 使用Django认证系统
使用Django认证系统 这篇文档解释默认配置下Django认证系统的使用.这些配置已经逐步可以满足大部分常见项目对的需要,可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现.对于需要与默认配 ...
- Django缓存机制
Django缓存机制三个粒度:1 全站缓存 settings.py 全局配置文件用中间件:MIDDLEWARE = [# 'django.middleware.cache.UpdateCacheMid ...
- Memcached 缓存系统的-介绍、安装以及应用
一. memcached 是什么? memcached is a high-performance, distributed memory object caching system, generic ...
- 分布式缓存系统Memcached简介与实践
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...
- 千万级并发!如何设计一个多级缓存系统?
作者:不清不慎,目前在杭州蘑菇街公司任职,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人! 首先我们需要明白,什么是一个多级缓存系统,它有什么用.所谓多级缓存系统,就是指在一个系统 ...
最新文章
- django mysql debug_部署前准备--使用Mysql之Django Debug Toolbar安装以及配置
- oracle可以在liux上装_【Oracle】手把手教你做之Linux上安装Oracle11g
- 用Delphi写扬声器音乐
- Jasmine里的describe,it和expect函数
- spring boot配置ip_Spring Cloud 配置中心高可用搭建
- Mysql 5.6 慢日志配制
- linux 下查看文件字符编码和转换编码 360doc,Linux 下查看文件字符编码和转换编码...
- 1.爬虫系统学习--爬虫应知知识(后续还会更新)
- java 聊天机器人_java实现自动回复聊天机器人
- Android Studio使用WIFI调试应用
- 汇编——dosbox的使用以及文件的运行
- 计算机网卡大小怎么查看,查看电脑网卡是100M还是1000M的方法
- 【语音识别】基于keras的简易语音识别
- Aliyun-OSS海量存储
- 狼 我一头独狼 在狂奔 嗅找正正狼群
- Web测试的常见测试点
- SWFUpload使用
- 分布式系统之----CAP理论
- (详细)CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片
- Vue 2.0 起步(2) 组件及 vue-router实例 - 微信公众号RSS
热门文章
- php中fread()函数,php fread()函数
- java实现layui静态表格分页,layui——数据表格分页实例
- python用户名密码登录退出_用户登录登出
- aes加密字符串c++_springboot2.2.X手册:防抓包?快速实现API接口数据加密
- 河北大学计算机复试题,2016年河北大学综合卷计算机科学与技术学院之数据库系统概论复试笔试最后押题五套卷...
- 各层作用_终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的
- android 查询所有图片和视频,Android系统详解之获取图片和视频的缩略图
- 软中断和硬中断的区别
- Spring3 整合 Hibernate4实现数据库操作(1)
- dj打碟怎么学_学DJ要不要去培训学校?