zoukankan      html  css  js  c++  java
  • django给视图添加缓存功能

    在开发过程中,有些视图只是查询数据,而且查询的数据一般不会变化。例如,做地址模块时,省市县都是不会变的。如果用户每次请求地址视图时,都要执行视图返回数据,会给服务端带来不必要的压力。这时候可以用到缓存。

    • 视图缓存的原理

    当第一个用户访问地址视图时,返回所有省市县。如果用redis来做缓存存储的话,那么会以键对的方式把数据保存在redis。键是url,值是数据。(当然,两者都会被编码)。接下来有用户访问地址视图时,会先在redis上找,找到的话直接返回。如果找不到,才会到达视图,执行查询等操作,返回给用户。(同时也继续存储在redis)

    • 使用前的配置

    (1)安装视图缓存拓展包

    pip install drf-extensions

    (2)在settings.py上配置

    # drf扩展: 缓存配置, 获取省份和区县接口使用到
    REST_FRAMEWORK_EXTENSIONS = {
        # 缓存时间(1小时)
        'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
        # 缓存到哪里 (caches中配置的default)
        'DEFAULT_USE_CACHE': 'default',
    }
    • 怎么用

    使用方式有两种。

    • 方式一:在类的方法上添加装饰器实现缓存

    示例:

    class CityView(views.APIView):
        # 如果在使用cache_response装饰器时未指明timeout或者cache参数,则会使用配置文件中的默认配置
        @cache_response(timeout=60*60, cache='default')
        def get(self, request, *args, **kwargs):
            pass
    • 方式二:使用drf-extensions提供的扩展类

    1. ListCacheResponseMixin
        用于缓存返回列表数据的视图,与ListModelMixin扩展类配合使用,实际是为list方法添加了cache_response装饰器

    2. RetrieveCacheResponseMixin
        用于缓存返回单一数据的视图,与RetrieveModelMixin扩展类配合使用,实际是为retrieve方法添加了cache_response装饰器

    3. CacheResponseMixin
        为视图集同时补充List和Retrieve两种缓存,与ListModelMixin和RetrieveModelMixin一起配合使用。

    示例:

    class AreasViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
        ...
  • 相关阅读:
    LeetCode 669. 修剪二叉搜索树(Trim a Binary Search Tree)
    LeetCode 872. 叶子相似的树(Leaf-Similar Trees)
    LeetCode 513. 找树左下角的值(Find Bottom Left Tree Value)
    LeetCode 223. 矩形面积(Rectangle Area)
    LeetCode 704. 二分查找(Binary Search)
    LeetCode 74. 搜索二维矩阵(Search a 2D Matrix)
    LeetCode 240. 搜索二维矩阵 II(Search a 2D Matrix II) 37
    Html5 Css实现方形图片 圆形显示
    css 图片 圆形显示区域
    Visual Studio常用的快捷键
  • 原文地址:https://www.cnblogs.com/chichung/p/9993317.html
Copyright © 2011-2022 走看看