【Django】缓存
由于Django是动态网站,所以每次请求都会去数据库中进行响应的操作。
当程序访问量大时,耗时必然会更加明显,最简单的解决方案就是使用缓存。
Django中的缓存:
即将某一个view的返回值保存至内存或memcache中,默认保存5分钟。在此时间内如果有人来访问此view,则不会去执行此view,而是直接从内存或memcache中获取此view的返回值,并返回.
Django中提供了6种缓存方式:
- 开发调试
- 内存
- 文件
- 数据库
- Memcache缓存(python-memcached模块)
- Memcache缓存(pylibmc模块)
配置
开发调试:
# 开发调试用,实际内部不做任何操作,即不会缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎,指定为开发调试
'TIMEOUT': 300, # 超时时间
'OPTIONS': {
'MAX_ENTRIES': 300, # 缓存的最大个数(默认300)
'CULL_FREQUENCY': 3, # 缓存超过最大个数后,剔除缓存个数的比例, 即:1/CULL_FREQUENCY(默认3)
},
# 'KEY_PREFIX': '', # 缓存key的前缀(默认空)
# 'VERSION': 1, # 缓存key的版本(默认1)
# 'KEY_FUNCTION': "函数名", # 生成key的函数(默认函数会生成为【前缀:版本:key】)
},
}
缓存到内存:
# 此缓存将内容保存至内存的变量中
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', # 引擎,指定为内存缓存
'LOCATION': 'unique-snowflake', # 唯一标识
'TIMEOUT': 300, # 超时时间
'OPTIONS': {
'MAX_ENTRIES': 300, # 缓存的最大个数(默认300)
'CULL_FREQUENCY': 3 # 缓存超过最大个数后,剔除缓存个数的比例, 即:1/CULL_FREQUENCY(默认3)
}
}
}
缓存到文件:
# 此缓存将内容保存至文件
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 引擎,指定为文件缓存
'LOCATION': '/Users/macbook/django_cache', # 缓存的文件夹路径(需要手动创建好文件夹)
}
}
# 注:其他配置同开发调试版本
缓存到数据库:
# 此缓存将内容保存至数据库
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 指定数据表
}
}
# 将以上配置写好之后,执行命令:python manage.py createcachetable, 将会自动创建数据表
Memcache缓存(python-memcached模块):
# 此缓存使用python-memcached模块连接memcache
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
Memcache缓存(pylibmc模块):
# 此缓存使用pylibmc模块连接memcache
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '/tmp/memcached.sock',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
应用
全站使用:
使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户。在返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将数据保存至缓存,从而实现全站缓存。
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', # 放缓存(要写在中间件列表的头部)
···
# 其它中间件
···
'django.middleware.cache.FetchFromCacheMiddleware', # 获取缓存(要写在中间件列表的尾部)
]
# 中间件缓存配置
# CACHE_MIDDLEWARE_SECONDS = 5 # 超时时间(指定int类型)
# CACHE_MIDDLEWARE_ALIAS = '' # 别名
# CACHE_MIDDLEWARE_KEY_PREFIX = '' # 关键的前缀
单独视图缓存:
# 方式一:
from django.views.decorators.cache import cache_page # 用于缓存视图
@cache_page(5) # 指定缓存时间为5秒(默认15*60)
def test(request):
pass
# 方式二:
from django.views.decorators.cache import cache_page # 用于缓存视图
urlpatterns = [
url(r'^test/$', cache_page(5)(views.test)),
# cache_page(5):指定缓存时间为5秒
# (views.test):执行的视图函数
]
局部模版使用:
# 引入TemplateTag
{% load cache %}
# 使用缓存
{% cache 超时时间(s) 缓存key %}
"""将要缓存的内容写在此处"""
{% endcache %}
关于Django缓存的更多知识:https://docs.djangoproject.com/en/1.11/topics/cache/
【Django】缓存的更多相关文章
- Django缓存使用方法
Django缓存分为Session和Cookie:Session为放在服务器端的缓存:Cookie为放在客户端(浏览器)的缓存. Session一般用来保存登录会话:Cookie一般用来保存一些个性化 ...
- Django 缓存系统
Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多. 缓存系统工 ...
- drf版本控制 和django缓存,跨域问题,
drf版本控制 基于url的get传参方式 REST_FRAMEWORK={ # "DEFAULT_AUTHENTICATION_CLASSES":["app01.aut ...
- 版本控制,django缓存,跨域问题解决
复习 分页: 1. 简单分页 2. 偏移分页 3. 加密分页 解析器:客户处理前端提交来的数据 urlencode: body体中的数据格式: key=value& formdata编码:为区 ...
- 中间件和Django缓存
中间件定义: 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类. 看下面的代码在settings里 ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- Django缓存设置
由于Django构建得是动态网站,每次客户端请求都要严重依赖数据库,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...
- [django]django缓存
发现搞了全局缓存后,刷新得不到最新数据了. 还好有过期时间 redis常用: https://www.cnblogs.com/fansik/p/5483060.html django-redis缓存: ...
- Django - 缓存应用
Django缓存应用: https://www.cnblogs.com/zuoshoushizi/p/7850281.html https://www.cnblogs.com/alice-bj/p/9 ...
- Django 2.0 学习(18):Django 缓存、信号和extra
Django 缓存.信号和extra Django 缓存 由于Django是动态网站,所以每次请求均会去数据库进行相应的操作,当程序访问量大时,耗时必然会显著增加.最简单的解决方法是:使用缓存,缓存将 ...
随机推荐
- Linux 文件系统详解
作者: Paul Brown 译者: LCTT amwps290 这篇教程将帮你快速了解 Linux 文件系统. 早在 1996 年,在真正理解文件系统的结构之前,我就学会了如何在我崭新的 Linux ...
- bzoj1270 BeijingWc2008 雷涛的小猫 DP
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1270 比较水的一道dp f1[i]为高度为i的时候的最大值 f2[i]为当前高度在第i棵树 ...
- who---显示目前登录系统的用户信息
who命令是显示目前登录系统的用户信息.执行who命令可得知目前有那些用户登入系统,单独执行who命令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个X显示器. 语法 who(选项) ...
- unity调用Android的两种方式:其二,调用aar包
上一篇我们讲了unity如何调用jar包 http://www.cnblogs.com/Jason-c/p/6743224.html, 现在我们介绍一下怎么生成aar包和unity怎么调用aar 一. ...
- 中断函数中不能使用printf的原因
vxworks 中断处理程序之所以不用printf,本质在于printf是将信息输出到标准输出设备(STDOUT)中, 整个标准输出设备是一个全局变量,由于有semTake操作,那么就会发生阻塞,vx ...
- 移动端web app开发备忘
近期要做个手机html5的页面,做些知识储备,重要的点记录下来以备兴许. 1.devicePixelRatio:定义设备物理象素和设备独立象素的比例.css中的px能够看作是设备的独立象素.通过dev ...
- 7-07. PAT排名汇总(25) (结构体 ZJU_PAT)
题目链接:http://www.patest.cn/contests/ds/7-07 编程能力測试(Programming Ability Test,简称PAT)是浙江大学计算机科学与技术学院主办的专 ...
- 阿里云aliyunlive视频直播,设置元素浮在视频上方
视频直播,视频是可以看到了.但是还需要其他的元素,比如聊天内容,小礼物效果,观看人员列表等等.怎样让其他的元素,浮在视频上方呢? 解决方案,通过打开一个frame层,设置body的背景为透明的. 新的 ...
- spring mvc获取路径参数的几种方式
一.从视图向controller传递值, controller <--- 视图 1.通过@PathVariabl注解获取路径中传递参数 (参数会被复制到路径变量) @RequestMappin ...
- 创建一个基于ViSP的图片显示程序
创建一个图片读取,并在windows下窗口显示的程序. #include <visp/vpDisplayD3D.h> #include <visp/vpDisplayGDI.h> ...