44.drf缓存
DRF原有缓存
Django缓存、配置:https://www.cnblogs.com/Mickey-7/p/15792083.html
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} # 配置连接池
}
}
}
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)