zoukankan      html  css  js  c++  java
  • django性能优化缓存view详解

    缓存提升性能:

      1、通常的view会去数据库端执行相关的查询然后交由template渲染、数据库访问通常就是性能的瓶颈所在。

      2、由于许多数据要很久才会变一次、两次连续的数据库访问通常返回的数据是一样的;更进一步数据是一样的、

      那就是说返回的response内容就是一样的。

      3、如果能直接把response缓存起来、减少对数据库的访问以提升性能、如果直接把response缓存在内存中、那么

      view性能的提升会更高。

    怎么做:

      由上面的内容可能知道、要解决缓存访问,可以分解成两个更小的问题 a:缓存谁 & b缓存在哪里?

      缓存在哪里:

        这个可能通过配置来说明、缓存的内容是保存在内容中、还是保存在文件中 ... ...

      缓存谁:

        把想缓存的对象打上标记就行、这样它就和普通的对象区分开了 

    以下用一个例子来说明缓存在django中的使用

    配置缓存对象的保存位置:

    在项目的settings.py文件中增加如下内容

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        }
    }

      我打算把对象缓存到内存里

    给view打上标记说明这个view是要缓存的

    @cache_page(60 * 15, cache="default")
    def index(request):
        print('this index ...')
        return render(request,'learning/index.html')

      @cache_page(60*15,cache="default") 的意思就是说缓存生命周期是15分钟、缓存中内存中(我们default配置的就是在内存中)

    查看效果:

      1、第一次访问

       在server端可以看到如下日志

    this index ...
    [22/Mar/2018 12:59:01] "GET /learning/ HTTP/1.1" 200 2218
    [22/Mar/2018 12:59:01] "GET /static/favicon.ico HTTP/1.1" 200 67646

      可以看到有打印“this index ...”说明这个view是有被执行的

      2、第二次访问页面、server端可以看到如下日志

    this index ...
    [22/Mar/2018 12:59:01] "GET /learning/ HTTP/1.1" 200 2218
    [22/Mar/2018 12:59:01] "GET /static/favicon.ico HTTP/1.1" 200 67646
    [22/Mar/2018 12:59:13] "GET /learning/ HTTP/1.1" 200 2218
    [22/Mar/2018 12:59:13] "GET /static/favicon.ico HTTP/1.1" 200 67646

      这一次并没有打印"this index ..." 说明view并没有执行、django直接把之前执行view的结果返回给了浏览器。

    ----------------------------------------------------------------------------------------------

  • 相关阅读:
    go语言的特殊变量 iota
    JS设计模式(三) 数据访问对象模式
    SSM之整合Redis
    JS设计模式(二) 惰性模式
    Ubuntu 安装 SQL Server
    JS设计模式(一) 单例模式
    JavaScript 面向对象编程
    SSM之框架整合
    Java实现CORS跨域请求
    数据库记录删除方式
  • 原文地址:https://www.cnblogs.com/JiangLe/p/8622413.html
Copyright © 2011-2022 走看看