Django2.2 Cache缓存的设计以及几种方式的 多级或单级缓存处理
首先照例说明一下缓存的作用以及Django中可以用到的缓存方式:
缓存的作用是用于数据项的再次加载,在设定的时间内可以无压力刷新或者再次访问该数据信息
- 方式一数据库缓存(Django原生的---有代码提示)
- 方式二(非Django原生)redis缓存------------------------------------------windows下的redis配置安装博客推荐 -----》 https://blog.csdn.net/AkiraNicky/article/details/82533316
- 多级缓存(Django内置了多中种缓存并存的方式的处理)
一、django几种缓存的配置
其中配置中有几点要说明,
- Cache的缓存默认是default (这里的名字是可以自己取的,就像下面的redis一样)
- 每一种方式都有LOCATION字段,名为存储的地方,default中是数据库的缓存的表名,redis_backend中为redis的库中的1号分组,写上1是为了方面查询与管理(就好像分成多个文件夹一样)
- 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缓存的设计以及几种方式的 多级或单级缓存处理的更多相关文章
- python缓存装饰器,第二种方式(二)
来个简单的装饰器 def cached_method_result(fun): """方法的结果缓存装饰器""" @wraps(fun) d ...
- cache支持single/increment/increment4三种方式传输
1.cache bypass signle---data length 已知 increment ---data length 不知 用 last data address 结束数据传输 2.cac ...
- Redis缓存的设计、性能、应用与数据集群同步
Redis缓存的设计.性能.应用与数据集群同步 http://youzhixueyuan.com/design-performance-and-application-of-redis-cache.h ...
- mybatis13--2级缓存
验证内置的2级缓存 Ehcache缓存的配置 01.引入需要的ehcache 和mybatis-ehcache 两个jar包 02.在mapper文件中增加 <cache type=" ...
- 基于TDA4863-2的单级PFC反激LED电源设计与仿真
LED是一个非线性器件,正向电压的微小变化会引起电流的巨大变化:LED是一个半导体二极管,其伏安特性随温度变化而变化(-2mV/℃),假如温度升高,在恒压驱动下LED的电流会增加.长期超过额定电流工作 ...
- .NET 缓存模块设计
上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践. 基本的缓存模块设计 最基础的缓存模块一定有一个统一的CacheHelper,如下: public interf ...
- 利用Java的读写锁实现缓存的设计
Java中的读写锁: 多个读锁不互斥, 读锁与写锁互斥, 写锁与写锁互斥, 这是由JVM自行控制的,我们只要上好相应的锁即可. 缓存的设计: package com.cn.gbx; import ja ...
- 面试挂在了 LRU 缓存算法设计上
好吧,有人可能觉得我标题党了,但我想告诉你们的是,前阵子面试确实挂在了 RLU 缓存算法的设计上了.当时做题的时候,自己想的太多了,感觉设计一个 LRU(Least recently used) 缓存 ...
- 亿级流量场景下,大型缓存架构设计实现【1】---redis篇
*****************开篇介绍**************** -------------------------------------------------------------- ...
随机推荐
- Python基础:22__slots__类属性
1:工厂函数 由于类型和类的统一,因而可以子类化Python数据类型.但是所有的Python 内建的转换函数现在都是工厂函数.当这些函数被调用时,你实际上是对相应的类型进行实例化.比如下面的函数都已经 ...
- 我为什么飞行 10000 公里去西班牙参加 KubeCon?
2019 年 5 月 20 日至 23 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCo ...
- HZOI 可怜与超市
网上搜不着,八成又是哪个学长留下的…… 因为考试第二题我们都好不容易才搞懂,学长有给我们扔了几道类似的题. 其实这道题思路挺好想的,就是一些细节还有复杂度比较难弄,好难调啊. 看到题的第一眼以为是树形 ...
- 提高github下载速度的方法【100%有效】可达到2MB/s
因为大家都知道的原因,在国内从github上面下载代码的速度峰值通常都是20kB/s.这种速度对于那些小项目还好,而对于大一些的并且带有很多子模块的项目来讲就跟耽误时间.而常见的的方法无非就是修改HO ...
- HDU 1236
水题~~但我做了很久: 题意:是中国人都懂了 思路:结构体排序: 以后要多用用重定义的排序手段,!!!!!多用!!多用!!多用!! #include<iostream> #include& ...
- VMware 注册码
VMware 12 Pro 永久许可证激活密钥 5A02H-AU243-TZJ49-GTC7K-3C61NVF5XA-FNDDJ-085GZ-4NXZ9-N20E6UC5MR-8NE16-H81WY- ...
- H3C 其他OSPF显示命令
- http header详解,HTTP头、请求头、响应头、实体头
Content-Language,Content-Length,Content-Type,Content-Encoding,mime分析 Accept 指定客户端能够接收的内容类型 Accept:te ...
- 免费开源3D模型设计软件汇总
免费开源3D模型设计软件汇总 3D 打印需要先通过计算机辅助设计(CAD)进行建模,再将建好的3D模型“分割”成逐层的截面,从而指导3D打印机进行逐层打印.因此用于3D打印的3D模 型大都储存或输出成 ...
- 改善Azure App Service托管应用程序性能的几个技巧
本文介绍了几个技巧,这些技巧可以改善Azure App Service托管应用程序的性能.其中一些技巧是你现在就可以进行的配置变更, 而其他技巧则可能需要对应用程序进行一些重新设计和重构. 开发者都希 ...