首先照例说明一下缓存的作用以及Django中可以用到的缓存方式:

  缓存的作用是用于数据项的再次加载,在设定的时间内可以无压力刷新或者再次访问该数据信息

  1. 方式一数据库缓存(Django原生的---有代码提示)
  2. 方式二(非Django原生)redis缓存------------------------------------------windows下的redis配置安装博客推荐 -----》  https://blog.csdn.net/AkiraNicky/article/details/82533316
  3. 多级缓存(Django内置了多中种缓存并存的方式的处理)

一、django几种缓存的配置

其中配置中有几点要说明,

  1. Cache的缓存默认是default (这里的名字是可以自己取的,就像下面的redis一样)
  2. 每一种方式都有LOCATION字段,名为存储的地方,default中是数据库的缓存的表名,redis_backend中为redis的库中的1号分组,写上1是为了方面查询与管理(就好像分成多个文件夹一样)
  3. Cache在Django中每一种存储方式,都有装饰器缓存方式和自定义缓存方式,也就说明了,Django中只需要更改配置信息就ok了,view中无需改动,十分方便

二、view视图层的缓存应用(详情看注释)

这里装饰器是

@cache_page(timeout=30)固定格式有代码提示(本质为方法的封装)------------也就说明了,方法二就是在这基础上自定义的-----------(这里的两种方法只能取其中之一,所以我注释掉了装饰器的代码)
# -------*******------------第1个方法数据库缓存实例,以页面为例假装比较耗时
# 方式一:---------------1.导入装饰器(本质为判断方法的封装),为了使用缓存@cache_page
# @cache_page(timeout=30) def news(request):
# 方式二:--------------2.自定义方法 #用函数名则表示所有访问本路由的共用一套缓存,缓存(第二步) cache= caches['redis_backend']#---------------------------------这两行同时存在不冲突,用的是多级缓存(redis缓存与自定义缓存)
result=cache.get("news")#--------------------------------------对应下面的set的相关参数的设置,这里是调用 #如果存在
if result:
return HttpResponse(result) new_list=[] for i in range(10):
new_list.append("最近贸易战又开始了%d"% i) #伪装耗时----------------------之后使用缓存
sleep(5)# 五秒 data={
'news_list':new_list,
} response=render(request, 'news.html', context=data)
# 方式二(第一步:):设置缓存---key='news',value=页面的内容,过期时间60秒
cache.set("news",response.content,timeout=60)#-----------------------------------照应上面的get return response

运行一次后,设置的为60秒内可以无压力刷新

三、装饰器的多级缓存(用到setting里面的配置了)

#cache_page()配置多级缓存--------cache="指定缓存的位置,写上面的redis_backend,则作相应的变换"
# default 为默认配置中 指定的数据库缓存方式
@cache_page(timeout=60,cache='default')
def jokes(request):
sleep(5) return HttpResponse("jokes_list")

从这里我们可以看出 标红的说明名字可以随便取,无所谓

如果redis装不好或者启动不了可以先用数据库学习一下

排版不好看,有兴趣的可以一起交流,注释写了很多,应该看得懂!!!

Django2.2 Cache缓存的设计以及几种方式的 多级或单级缓存处理的更多相关文章

  1. python缓存装饰器,第二种方式(二)

    来个简单的装饰器 def cached_method_result(fun): """方法的结果缓存装饰器""" @wraps(fun) d ...

  2. cache支持single/increment/increment4三种方式传输

    1.cache bypass signle---data length 已知 increment ---data length 不知 用 last data address  结束数据传输 2.cac ...

  3. Redis缓存的设计、性能、应用与数据集群同步

    Redis缓存的设计.性能.应用与数据集群同步 http://youzhixueyuan.com/design-performance-and-application-of-redis-cache.h ...

  4. mybatis13--2级缓存

    验证内置的2级缓存 Ehcache缓存的配置 01.引入需要的ehcache 和mybatis-ehcache 两个jar包 02.在mapper文件中增加  <cache type=" ...

  5. 基于TDA4863-2的单级PFC反激LED电源设计与仿真

    LED是一个非线性器件,正向电压的微小变化会引起电流的巨大变化:LED是一个半导体二极管,其伏安特性随温度变化而变化(-2mV/℃),假如温度升高,在恒压驱动下LED的电流会增加.长期超过额定电流工作 ...

  6. .NET 缓存模块设计

    上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践. 基本的缓存模块设计 最基础的缓存模块一定有一个统一的CacheHelper,如下: public interf ...

  7. 利用Java的读写锁实现缓存的设计

    Java中的读写锁: 多个读锁不互斥, 读锁与写锁互斥, 写锁与写锁互斥, 这是由JVM自行控制的,我们只要上好相应的锁即可. 缓存的设计: package com.cn.gbx; import ja ...

  8. 面试挂在了 LRU 缓存算法设计上

    好吧,有人可能觉得我标题党了,但我想告诉你们的是,前阵子面试确实挂在了 RLU 缓存算法的设计上了.当时做题的时候,自己想的太多了,感觉设计一个 LRU(Least recently used) 缓存 ...

  9. 亿级流量场景下,大型缓存架构设计实现【1】---redis篇

    *****************开篇介绍**************** -------------------------------------------------------------- ...

随机推荐

  1. 《C语言深度解剖》学习笔记之关键字

    第一章 关键字 C语言共有32个关键字. 关键字   auto 声明自动变量 int 声明整型变量 long 声明长整型变量 char 声明字符型变量 float 声明浮点型变量 short 声明短整 ...

  2. LRJ-Example-06-17-Uva10562

    main() 函数中的这两行 fgets(buf[0], maxn, stdin); sscanf(buf[0], "%d", &T); 不能简单替换为 scanf(&qu ...

  3. 详解ThinkPHP支持的URL模式有四种普通模式、PATHINFO、REWRITE和兼容模式

    URL模式     URL_MODEL设置 普通模式    0 PATHINFO模式     1 REWRITE模式     2 兼容模式     3 如果你整个应用下面的模块都是采用统一的URL模式 ...

  4. html5的开发

    1.html5的开发组织者: (1)WHATWG:由Apple.Mozilla.Google.Opera等浏览器开发者组成,成立于2004年.WHATWG开发HTML和Web应用API,同时为各浏览器 ...

  5. PL/SQL语言的学习笔记

    一.PL/SQL简介1.什么是PL/SQL程序?(PL/SQL是对SQL语言的一个扩展,从而形成的一个语言) 2.PL/SQL语言的特点(操作Orcale数据库效率最高的就是PL/SQL语言,而不是C ...

  6. HDU 1864 01背包、

    这题题意有点坑阿.感觉特别模糊. 我开始有一点没理解清楚.就是报销的话是整张整张支票报销的.也是我傻逼了 没一点常识 还有一点就是说单张支票总额不超过1000,每张支票中单类总额不超过600,我开始以 ...

  7. Python--day30--互联网协议与osi模型

  8. java数组简介

    数组(Array)是Java 语言中内置的一种基本数据存储结构,通俗的理解,就是一组数的集合,目的是用来一次存储多个数据.数组是程序中实现很多算法的基础,可以在一定程度上简化代码的书写. 备注: 数组 ...

  9. win2d 画出好看的图形

    本文告诉大家,win2d 不需要从零开始做,以前做出来的很多库其实只需要做很小修改就可以做出好看的效果,而且用在 UWP 上.本文修改原先 大神写的 GDI 图形到 win2d 上,而且可以运行起来 ...

  10. 解决 el-autocomplete 不显示及没数据时闪一下的问题

    项目中用到了elementUI中的远程搜索即 el-autocomplete 组件,估计首次使用的都会遇到一些小问题,只要你能认真看完并且耐心理解,保证能帮到你,效果图如下: 组件代码: <el ...