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的结果返回给了浏览器。

 

 

 

 

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

 

posted on 2018-03-22 11:16  蒋乐兴的技术随笔  阅读(374)  评论(0编辑  收藏  举报

导航