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

首先照例说明一下缓存的作用以及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装不好或者启动不了可以先用数据库学习一下

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

原文地址:https://www.cnblogs.com/cybg/p/12149644.html

时间: 2024-08-02 03:41:46

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

Mockplus演示和分享原型设计的8种方式

Mockplus目前是国内比较流行的原型设计工具,功能上,相比Axure不算全面和强大,但在不少功能上有它独到之处. Axure有个比较让人头疼的地方,就是对于移动App项目的预览和演示比较麻烦,而这个方面,Mockplus展现了它的便利.在演示原型方面,Mockplus提供了多达8种方式,确实很丰富,也很实用.这里想給大家介绍和分享. 第一个方法:直接演示 适用场合:设计时,便于设计者非常快速地看到原型效果.操作方式:在设计时,按下F5.演示支持环境:Mockplus软件. 第二个方法:在线发

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

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

mybatis13--2级缓存

验证内置的2级缓存 创建对应的dao public interface StudentDao { /** * 验证mybatis2级缓存! */ Student selectStudentById(Integer sId); } 创建对应的mapper文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3

缓存模块设计

NET 缓存模块设计 上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践. 基本的缓存模块设计 最基础的缓存模块一定有一个统一的CacheHelper,如下: public interface ICacheHelper { T Get<T>(string key); void Set<T>(string key, T value); void Remove(string key); } 然后业务层是这样调用的 public User Get(in

MyBatis的二级缓存的设计原理

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个 SqlSession对象会使用一个 Executor对象来完成会话操作, MyBatis的二级缓存机制的关键就是对这个 Executor对象做文章.如果用户配置了" cacheEnabled=true",那么 MyBatis在为 Sql

缓存架构设计细节二三事

本文主要讨论这么几个问题: (1)"缓存与数据库"需求缘起 (2)"淘汰缓存"还是"更新缓存" (3)缓存和数据库的操作时序 (4)缓存和数据库架构简析 一.需求缘起 场景介绍 缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化. 例如对于用户的余额信息表account(uid, money),业务上的需求是: (1)查询用户的余额,SELECT money FROM account WHERE uid=XXX

.NET 缓存模块设计

上一篇谈了我对缓存的概念,框架上的理解和看法,这篇承接上篇讲讲我自己的缓存模块设计实践. 基本的缓存模块设计 最基础的缓存模块一定有一个统一的CacheHelper,如下: public interface ICacheHelper { T Get<T>(string key); void Set<T>(string key, T value); void Remove(string key); } 然后业务层是这样调用的 public User Get(int id) { if

OSChina客户端源码学习(2)--缓存的设计

一.缓存的作用 请求数据的时候,首先进行判断,是否可以从缓存中获取数据,如果满足条件,则直接从缓存中获取数据.否则请求新的数据.这样比没有缓存的情况下,每次都要从服务器请求数据要快,而且,没有网的情况下,也可以浏览已经缓存了的数据,极大的提高了用户的体验. 二.源码解析 源码中用到缓存的地方有: 1 请求数据之前,先判断是否可以从缓存中获取,如果满足条件,则直接从缓存中读取,否则,向服务器请求新的数据. // 获取缓存的目录 private String getCacheKey() { retu

分布式系统开发常见问题-1. session的复制与共享 2. 分布式缓存的设计

1. session的复制与共享 在web应用中,为了应对大规模访问,必须实现应用的集群部署.要实现集群部署主要需要实现session共享机制,使得多台应用服务器之间会话统一, tomcat等多数主流web服务器都采用了session复制以及实现session的共享. 但问题还是很明显的: 在节点持续增多的情况下,session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化较快时,性能下降更加显著.这种特性使得web应用的水平扩展受到了限制. session