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

Posted cybg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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装不好或者启动不了可以先用数据库学习一下

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

以上是关于Django2.2 Cache缓存的设计以及几种方式的 多级或单级缓存处理的主要内容,如果未能解决你的问题,请参考以下文章

Java进阶篇缓存底层设计(LRULFUFIFOCache)

Java进阶篇缓存底层设计(LRULFUFIFOCache)

硬核分析 Java 内存 Cache 设计与最佳实践 - GuavaCache 篇

缓存更新的几种方法

Django2.2基本应用结构以及基本模板

js 去掉缓存的几种方式