zoukankan      html  css  js  c++  java
  • 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装不好或者启动不了可以先用数据库学习一下

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

  • 相关阅读:
    浅谈Dynamic 关键字系列之三(下):ExpandoObject,DynamicObject,DynamicMetaObject
    完全详解Silverlight 下载文件
    在内部循环中Continue外部循环
    浅谈Dynamic 关键字系列之四:dynamic为什么比反射快
    Android学习笔记(三)基础知识(2)
    Android学习笔记(一) 使用选择部件
    Android学习笔记(四)时钟、时间
    每周一道数据结构(三)树、二叉树、最优二叉树
    Linux内核设计与实现笔记(二) 内存管理、进程地址空间
    Windows下Hadoop eclipse开发平台搭建
  • 原文地址:https://www.cnblogs.com/cybg/p/12149644.html
Copyright © 2011-2022 走看看