zoukankan      html  css  js  c++  java
  • django视图缓存的实现

    1,安装

    pip install django-redis

    setting.py

    CACHES = {
        "default":{
            "BACKEND":"django_redis.cache.RedisCache",
            "LOCATION":"redis://127.0.0.1:6379/1",
            "OPTIONS":{
                "CLIENT_CLASS":"django_redis.client.DefaultClient"
            }
        }
    }

    2.视图函数中使用缓存

    from django.utils.decorators import method_decorator
    from django.views.decorators.cache import cache_page
    class ArticleView(View):
        @method_decorator(cache_page(60 * 15))
        def get(self,request):
        return render(request, 'article/index.html', context=context)

    注意:

      给视图添加缓存是有风险的,如果视图所展示的网页中有经常动态变动的信息,那么被添加缓存命不可取。

      缓存整个视图最实用的场景应该是这个视图所展示的网页的内容基本上不怎么变动,或者说在很长一段时间内不需要变动,这样使用缓存就非常有效。

    3.URLconf中使用缓存

    上面说了函数视图使用缓存,但是我们可能还有一种场景,那就是多个 URL 指向同一个函数视图,但是我只想缓存一部分的 URL,

    这时候就可以采用在 URLconf 中使用缓存,这样就指定了哪些 URL 需要缓存。

    下面分别表示了函数视图类视图的路由中使用缓存的方式,基本一致:

    from django.views.decorators.cache import cache _page
    
    urlpatterns = [
        url(r'^foo/([0-9]{1,2})/$',cache_page(60 * 15)(my_view)),
        url(r'^$', cache_page(60 * 30)(IndexView.as_view()), name='index'),
    ]

    4,模板中使用缓存(推荐)

    模板中使用缓存是我比较推荐的一种缓存方式,因为使用这种方式可以充分的考虑缓存的颗粒度,细分颗粒度,可以保证只缓存那些适合使用缓存的 HTML 片段。

    具体的使用方式如下,首先加载 cache 过滤器,然后使用模板标签语法把需要缓存的片段包围起来即可。

    {% load cache %}
    
    {% cache 500 ‘cache_name’ %}
    
    <div>container</div>
    
    {% endcache %}

    下面这些时候可以用缓存:

    • 纯静态页面
    • 读取了数据库信息,但是不经常变动的页面,比如文章热门排行榜,这个调用数据库信息并且还要排序的完全可以使用缓存,因为不需要实时展现最新的
    • HTML 的片段,比如整个页面都经常变动,但是有个侧边栏不经常变动,就可以缓存侧边栏
    • 需要使用复杂逻辑生成的 HTML 片段,使用缓存可以减少多次重复操作
  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/zbllly/p/10297835.html
Copyright © 2011-2022 走看看