• django Rest Framework缓存通过drf-extensions扩展来实现


    什么情况下使用缓存

    1.不经常更新的数据

    2.用户经常访问的一些页面,比如商品列表页、商品详情页等

    3.用户经常修改的一些操作:购物车、订单中心等

    关于DRF缓存扩展可以参考文档:http://chibisov.github.io/drf-extensions/docs/#caching

    安装

    pip install drf-extensions

    使用方法

    1.使用装饰器进行特定缓存

    可以使用@cache_response对视图类的方法进行特定缓存

    class CityView(views.APIView):
        @cache_response(60 * 15,cache ='special_cache'def get(self,request,* args,** kwargs):
            ...

    cache_response装饰器可以接收两个参数:

    1. timeout:缓存时间
    2. cache:缓存配置。默认是django的缓存,使用memcache

    如果不提供参数的话,也可以在settings中配置公共的缓存配置:

    复制代码
    # DRF扩展
    REST_FRAMEWORK_EXTENSIONS = {
        # 缓存时间
        'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
        # 缓存存储
        'DEFAULT_USE_CACHE': 'default',
    }
    复制代码

    2.使用drf-extensions提供的扩展类

    drf-extensions扩展对于缓存提供了三个扩展类:

    • ListCacheResponseMixin : 提供了缓存返回列表数据的视图,本质是为 mixins.ListModelMixin 的list()添加了cache_response装饰器; get/。
    • RetrieveCacheResponseMixin:用于返回单一数据的是图,本质是为 mixins.RetrieveModelMixin 添加了cache_response装饰器;get/1/。
    • CacheResponseMixin:提供了List和Retrieve两种缓存,与ListModelMixin和RetrieveModelMixin一起配合使用。
    from rest_framework_extensions.cache.mixins import CacheResponseMixin
    

    class UserViewSet(CacheResponseMixin,viewsets.ModelViewSet):
    serializer_class
    = UserSerializer
    ....

    将缓存保存在redis中

    django默认的缓存是memcache,memcache将缓存放在内存中,不支持持久化,意味着我们重启之后,缓存就丢失了。

    drf-extensions默认使用的是django的缓存配置。我们还可以将缓存保存到redis中。

    安装django-redis

    pip install django-redis

    简体中文版django-redis文档:http://django-redis-chs.readthedocs.io/zh_CN/latest/

    作为 cache backend 使用配置

    复制代码
    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "CONNECTION_POOL_KWARGS": {"max_connections": 100} # 配置连接池
            }
        }
    }
    复制代码
  • 相关阅读:
    前端插件集合
    建立controller
    W3C对DOM2.0定义的标准事件
    事件代理和委托学习
    css3属性flex弹性布局设置三列(四列)分布样式
    css+html 关于文本的总结(整理中)
    jquery阻止事件冒泡的3种方式
    web前端打印总结
    前端打印插件
    object实现小老鼠交互
  • 原文地址:https://www.cnblogs.com/huanghongzheng/p/11734139.html
Copyright © 2020-2023  润新知