DRF原有缓存

 
Django为基于类的视图提供了一个 method_decorator 装饰器,用于为类视图添加缓存类别的装饰器, cache_page 和 vary_on_cookie
cache_page可以指定缓存时间(单位秒)
class UserViewSet(viewsets.Viewset):
# 为每个用户缓存2个小时的请求url
# cache_page 装饰器只缓存返回200状态的 GET 和 HEAD 响应
@method_decorator(cache_page(60*60*2))
@method_decorator(vary_on_cookie)
def geyUserList(self, request, format=None):
...
 

drf-extensions缓存

drf-extensions缓存流程

  • 收到用户请求时,会根据对应的参数生成一个key
  • 通过对应的key去差值是否有对应的value,有的话封装成对应的response返回
  • 如果没有对应的value,则执行视图方法,并将结果存储,以便下次使用

使用drf-extensions缓存

#安装
pip3.9 install drf-extensions
drf-extensions提供的cache_response装饰器可以直接应用于get方法上,而无需使用method_decorator进行转换
适用于继承了rest_framework.views.APIView的类,且需要返回一个rest_framework.response.Response的实例
#导包
from rest_framework_extensions.cache.decorators import cache_response
使用@cache_response对视图类的方法进行缓存
class getInfoLIst(APIView):
authentication_classes = [JwtQueryParamsAuthentication, ]
@cache_response(60*60,cache='info_cache')
def get(self, request, *args, **kwargs):
...

cache_response装饰器参数

  • timeout:缓存有效时间,默认为None,永久缓存
  • key_func:指定缓存键,默认情况下,每个来自@cache_response装饰器的缓存数据都由key存储,使用DefaultKeyConstructor计算
  • cache:指定装饰器在缓存结果时使用特定的缓存,一般情况下使用默认的default 缓存
  • cache_errors:默认情况下,每个response都会被缓存,包括错误,如果第一次请求的时候中间出现错误,那么在缓存有效期内,每一次的请求都将会直接将之前缓存的错误信息返回给我们
# 不提供参数的话,可以在settings中配置公共缓存配置
REST_FRAMEWORK_EXTENSIONS = {
# 缓存时间
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
# 缓存存储
'DEFAULT_USE_CACHE': 'default',
#cache_error
'DEFAULT_CACHE_ERRORS':False

CacheResponseMixin

drf-extensions扩展对于缓存提供了三个扩展类:
  • ListCacheResponseMixin : 提供了缓存返回列表数据的视图,本质是为 mixins.ListModelMixin 的list()添加了cache_response装饰器
  • RetrieveCacheResponseMixin:用于返回单一数据的是图,本质是为 mixins.RetrieveModelMixin 添加了cache_response装饰器
  • CacheResponseMixin:提供了List和Retrieve两种缓存,与ListModelMixin和RetrieveModelMixin一起配合使用
 
from rest_framework_extensions.cache.mixins import CacheResponseMixin

# 需要将CacheResponseMixin加入到我们的试图类函数第一个继承类位置
class UserViewSet(CacheResponseMixin,viewsets.ModelViewSet):
serializer_class = UserSerializer
....

drf-extensions使用redis缓存

#安装
django-redis pip3.9 install django-redis
#settings
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",  
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
       "PASSWORD":"r_password"
"CONNECTION_POOL_KWARGS": {"max_connections": 100} # 配置连接池
}
}
}

44.drf缓存的更多相关文章

  1. DRF缓存

    对于现在的动态网站来讲,所有的界面展示都是通过客户端请求服务端,服务端再去请求数据库,然后将请求到的数据渲染后返回给客户端.用户每次访问页面都需要去请求数据库,如果同时有多个人访问的话,对于我们的数据 ...

  2. drf 缓存扩展

    drf缓存给了一个非常方便的扩展,使用起来相当方便 1-   安装 pip install drf-extensions 2-配置 在settings里面增加两项配置 # drf扩展REST_FRAM ...

  3. DRF JWT的用法 & Django的自定义认证类 & DRF 缓存

    JWT 相关信息可参考: https://www.jianshu.com/p/576dbf44b2ae DRF JWT 的使用方法: 1. 安装 DRF JWT # pip install djang ...

  4. DRF 缓存解决方案 drf-extensions / redis

    drf-extensions 概述 drf-extensions组件内部提供了 DRF  的本地内存方式的缓存方式 本地内存方式缓存在项目重启后则会消失 官方点击 这里 安装 pip3 install ...

  5. iOS tableview 优化总结

    根据网络上的优化方法进行了总括.并未仔细进行语言组织.正在这些优化方法进行学习,见另一篇文章 提高app流畅度 1.cell子控件创建写在 initWithStyle:reuseIdentifier ...

  6. PHP开发APP接口

    第1章 APP接口简介 - 课程简介 (:) - APP接口介绍 (:) - 客户端APP通信 (:) 最近学习 - 客户端APP通信格式区别 (:) - APP接口做的哪些事儿 (:) 第2章 封装 ...

  7. 如何用php写app接口[原创]

    人生就如一列永不停止的列车,no one knows when or where to stop.总有那些美好,值得永远怀念.也总有那些希望,值得你无怨无悔的付出,追逐.去年年底带着女儿一起坐火车会湖 ...

  8. Python 经典面试题汇总之框架篇

    前端和框架 1.谈谈你对http协议的认识 浏览器本质,socket客户端遵循Http协议 HTTP协议本质:通过\r\n分割的规范,请求响应之后断开链接 ==> 短连接.无状态 具体: Htt ...

  9. Django+Vue打造购物网站(十)

    首页.商品数量.缓存和限速功能开发 将环境切换为本地,vue也切换为本地 轮播图 goods/serializers.py class BannerSerializer(serializers.Mod ...

随机推荐

  1. MySQL的三值逻辑

    MySQL 采用三值逻辑 SELECT 1 = 1; SELECT 1 = 2; SELECT 1 = NULL; SELECT 1 != NULL; 上面四条语句的结果分别为: 可见MySQL采用三 ...

  2. 牛客网 十二桥问题(状压DP)

    https://ac.nowcoder.com/acm/contest/1104/B 注意到\(\text{K}\)只有\(12\),因此对起点与每个毕经边对应的点单源最短路,\(\text{DP}\ ...

  3. 稳定好用的短连接生成平台,支持API批量生成

    ​ https://www.5w.fit/ 01 安全:快码拥有两种模式:防封模式和极速模式,防封模式使短链更加安全! 02 无流量劫持:快码短链绝不劫持流量! 03 极速:专属大量服务器,支持高并发 ...

  4. 052_末晨曦Vue技术_处理边界情况之程序化的事件侦听器

    程序化的事件侦听器 点击打开视频讲解更详细 现在,你已经知道了 $emit 的用法,它可以被 v-on 侦听,但是 Vue 实例同时在其事件接口中提供了其它的方法.我们可以: 通过 $on(event ...

  5. 如何给load average 退烧

    故障现象:top - 14:02:56 up 250 days, 18:33, 7 users, load average: 142.92, 142.85, 142.80Tasks: 731 tota ...

  6. Matery主题添加Pjax

    如何给matery主题添加Pjax? Pjax优点 1.减轻服务端压力 2.按需请求,每次只需加载页面的部分内容,而不用重复加载一些公共的资源文件和不变的页面结构,大大减小了数据请求量,以减轻对服务器 ...

  7. mybatisplus-Service CRUD 接口

    通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前 ...

  8. 详解MySQL隔离级别

    一个事务具有ACID特性,也就是(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性),本文主要讲解一下其中的Isolation,也 ...

  9. 【java】学习路径38-数学模型分析:不同方式复制文件所需的时间

    测试文件:一段72kb的文本.约5.6MB大小的pdf论文.约38.9MB大小的无损音频文件. demo001 论<到灯塔去>的凝视主题.pdf irreplaceable.movpkg ...

  10. pod资源的健康检查-liveness探针的httpGet使用

    使用liveness探针httpget方式检测pod健康,httpGet方式使用的最多 [root@k8s-master1 tanzhen]# cat nginx_pod_httpGet.yaml a ...