django使用缓存之drf-extensions
2024-09-07 22:45:32
使用方法:
1、直接添加装饰器@cache_response
该装饰器装饰的方法有两个要求:
- 它必须是继承了rest_framework.views.APIView的类的方法
- 它必须返回rest_framework.response.Response 的实例
例子:
from rest_framework.response import Response
from rest_framework import views
from rest_framework_extensions.cache.decorators import (
cache_response
)
from myapp.models import City class CityView(views.APIView):
@cache_response()
def get(self, request, *args, **kwargs):
# values_list()从查询集中只返回指定的字段
cities = City.objects.all().values_list('name', flat=True)
return Response(cities)
如果您第一次请求视图,您将从SQL查询中获得它,(~60ms response time):
# Request
GET /cities/ HTTP/1.1
Accept: application/json # Response
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8 ['Moscow', 'London', 'Paris']
第二次请求将击中缓存。没有sql计算,没有数据库查询,(~30 ms response time):
# Request
GET /cities/ HTTP/1.1
Accept: application/json # Response
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8 ['Moscow', 'London', 'Paris']
总结:减少响应时间取决于API方法内部的计算复杂性。
cache_response装饰器可以接收两个参数:
@cache_response(timeout=60*60, cache='default')
- timeout 缓存时间
- cache 缓存使用的Django缓存后端(即CACHES配置中的键名称)
如果在使用cache_response装饰器时未指明timeout或者cache参数,则会使用配置文件中的默认配置,可以通过如下方法指明:
# DRF扩展
REST_FRAMEWORK_EXTENSIONS = {
# 缓存时间
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
# 缓存存储
'DEFAULT_USE_CACHE': 'default',
}
- DEFAULT_CACHE_RESPONSE_TIMEOUT 缓存有效期,单位秒
- DEFAULT_USE_CACHE 缓存的存储方式,与配置文件中的CACHES的键对应。
注意,cache_response装饰器既可以装饰在类视图中的get方法上,也可以装饰在REST framework扩展类提供的list或retrieve方法上。使用cache_response装饰器无需使用method_decorator进行转换
2、
最新文章
- noip复习模板
- 【C语言入门教程】4.4 指针 与 指针变量
- 1063. Set Similarity (25)
- 使用ImageCreate()创建一个代表空白图像的变量
- 12款最佳Linux命令行终端工具, 20款优秀的 Linux 终端仿真器
- Redis info参数总结(转)
- Entity Framework做IN查询
- SecurityManager一:理解AccessController.doPrivileged()
- Base Pattern基本模式_Gateway入口
- java 非法字符过滤 , 半角/全角替换
- 【Android】 Sqlite3 not found
- Drainage Ditches - poj 1273(网络流模板)
- 离robots.txt启动网络爬虫之旅
- iOS 图片旋转方法
- 线程UI同步
- JavaScript 系统知识点图库
- Linux shell if判断语句
- Linux 查看网络状态工具
- Notes on Operating System
- Python全栈之路----函数----局部变量
热门文章
- 单身狗福利!利用java实现每天给对象发情话,脱单指日可待!
- python lambda表达式应用
- C#——时间之不同国家的显示格式
- [leetcode]669. Trim a Binary Search Tree寻找范围内的二叉搜索树
- 当layui与分页相遇--bootstrap何去何从
- Java学习日报7.25
- java线程,进程,多线程
- 软件性能测试分析与调优实践之路-Web中间件的性能分析与调优总结
- JavaScript DOM编程艺术(第2版)的简单总结
- Maven+Spring 框架,ModelAndView在页面取值不成功