由于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. git diff的文字说明

    -U<n>--unified=<n> Generate diffs with <n> lines of context instead of the usual t ...

  2. BZOJ 3787 Gty的文艺妹子序列(分块+树状数组+前缀和)

    题意 给出n个数,要求支持单点修改和区间逆序对,强制在线. n,m<=50000 题解 和不带修改差不多,预处理出smaller[i][j]代表前i块小于j的数的数量,但不能用f[i][j]代表 ...

  3. uname---用于打印当前系统相关信息

    uname命令用于打印当前系统相关信息(内核版本号.硬件架构.主机名称和操作系统类型等). 语法 uname(选项) 选项 -a或--all:显示全部的信息: -m或--machine:显示电脑类型: ...

  4. caioj 1412 动态规划3:a+b问题(完全背包方案数)

    每个素数就是一个物品,然后就相当于求完全背包方案数 把max改成+就好了. #include<cstdio> #include<vector> #include<cstr ...

  5. python中的类与继承

    Class 类的定义以及实例的建立 Python中,类通过 class 关键字定义. 例如最简单的一个类定义可以为: class Person(object): pass Python 的编程习惯,类 ...

  6. rsyslog学习

    http://blog.csdn.net/zhaoyangjian724/article/details/52116809 http://blog.csdn.net/zhangxihangzhuan/ ...

  7. 13 hbase源码系列(十三)缓存机制MemStore与Block Cache

    这一章讲hbase的缓存机制,这里面涉及的内容也是比较多,呵呵,我理解中的缓存是保存在内存中的特定的便于检索的数据结构就是缓存. 之前在讲put的时候,put是被添加到Store里面,这个Store是 ...

  8. java关闭资源,自制关闭资源工具类

    在网上看到一篇关于关闭资源的正确方式:http://blog.csdn.net/bornforit/article/details/6896775 该博文中的总结: (1)使用finally块来关闭物 ...

  9. bootstrap结合google code prettify的问题

    发现prettify不能显示行号,于是上网找了解决方法: 只使用prettify的js的文件,不使用css文件,另外添加这段css: .com { color: #93a1a1; } .lit { c ...

  10. HDU 5386 Cover(模拟)

    Cover Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Subm ...