由于Django是动态网站,所以每次请求都会去数据库中进行响应的操作。

当程序访问量大时,耗时必然会更加明显,最简单的解决方案就是使用缓存。

Django中的缓存:

即将某一个view的返回值保存至内存或memcache中,默认保存5分钟。在此时间内如果有人来访问此view,则不会去执行此view,而是直接从内存或memcache中获取此view的返回值,并返回.

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

  1. 开发调试
  2. 内存
  3. 文件
  4. 数据库
  5. Memcache缓存(python-memcached模块)
  6. 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】缓存的更多相关文章

  1. Django缓存使用方法

    Django缓存分为Session和Cookie:Session为放在服务器端的缓存:Cookie为放在客户端(浏览器)的缓存. Session一般用来保存登录会话:Cookie一般用来保存一些个性化 ...

  2. Django 缓存系统

    Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多. 缓存系统工 ...

  3. drf版本控制 和django缓存,跨域问题,

    drf版本控制 基于url的get传参方式 REST_FRAMEWORK={ # "DEFAULT_AUTHENTICATION_CLASSES":["app01.aut ...

  4. 版本控制,django缓存,跨域问题解决

    复习 分页: 1. 简单分页 2. 偏移分页 3. 加密分页 解析器:客户处理前端提交来的数据 urlencode: body体中的数据格式: key=value& formdata编码:为区 ...

  5. 中间件和Django缓存

    中间件定义: 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类. 看下面的代码在settings里 ...

  6. 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器

    一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...

  7. Django缓存设置

    由于Django构建得是动态网站,每次客户端请求都要严重依赖数据库,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  8. [django]django缓存

    发现搞了全局缓存后,刷新得不到最新数据了. 还好有过期时间 redis常用: https://www.cnblogs.com/fansik/p/5483060.html django-redis缓存: ...

  9. Django - 缓存应用

    Django缓存应用: https://www.cnblogs.com/zuoshoushizi/p/7850281.html https://www.cnblogs.com/alice-bj/p/9 ...

  10. Django 2.0 学习(18):Django 缓存、信号和extra

    Django 缓存.信号和extra Django 缓存 由于Django是动态网站,所以每次请求均会去数据库进行相应的操作,当程序访问量大时,耗时必然会显著增加.最简单的解决方法是:使用缓存,缓存将 ...

随机推荐

  1. vue的鼠标移入和移出

    vue的鼠标移入和移出 需求(鼠标到预约二维码显示,预约添加背景色) 实现 <!--html部分--> <ul class="person_list"> / ...

  2. mongodb 的查询深入剖析

           db.表名.find({goods_id:3});                     //查询出 goods_id 为 3 的数据        db.表名.find({cat_i ...

  3. caioj 1413 动态规划4:打鼹鼠

    记住一定要区分n和m分别代表什么,我已经因为这个两道题浪费很多时间了 然后这个道题有点类似最长上升子序列n平方的做法,只是判断的条件不同而已 #include<cstdio> #inclu ...

  4. oracle基础入门(四)

    一:其实oracle的语法跟sql servce 挺像的只有一些个别的差异而已 1):安装Oracle的数据库一般它的表中会自带了两站表: 是 emp(员工表) , dept(部门) 单表查询 sel ...

  5. generate the call load file

    #!/usr/bin/perl -w $e911_call_percent = 0.0; $ims_node_number = 12; $local_ip = "10.86.52.2&quo ...

  6. Function的一些结论与eval函数.

    1.1 函数的创建方式 1 函数声明 2 函数表达式 3 new Function // 1 function foo() {} // 2 var foo = function() {}; // 3 ...

  7. 源码编译安装Nginx全程视频演示

    基本步骤: 1.首先停止现有web系统, #/etc/init.d/apache2 stop 2.将源码拷贝到/usr/local/src #cp /home/ditatompel/Public/Ng ...

  8. startActivityForResult and onActivityResult

    startActivityForResult and onActivityResult startActivityForResult 开启Activity 组织数据之后 发送,onActivityRe ...

  9. css3 文字溢出 换行实现方案

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. CentOS中实现与Ubuntu下apt-get install build-essential功能类似的命令

    CentOS中实现与Ubuntu下apt-get install build-essential功能类似的命令 在Ubuntu中安装完系统后,可以直接使用apt-get install build-e ...