drf实现常用数据缓存

栏目: 数据库 · 发布时间: 5年前

内容简介:在以往的后台数据访问时,我们往往都会进行数据库查询,基本的流程是这样的:图中发生了三次请求,则很正常向数据库查询了三次。但是现在有这样一个场景:我们有1000个人在一个十分钟内向一个我们网站都看了同一个文章,那么我们有没有哪些可以优化我们的后端代码,因为这只是一篇文章在短时间内就被访问了1000次,当然我们网站的文章是海量的,那我们该怎么办?那么我们的数据缓存就派上用场了,基本的流程是这样的:

在以往的后台数据访问时,我们往往都会进行数据库查询,基本的流程是这样的:

drf实现常用数据缓存

图中发生了三次请求,则很正常向数据库查询了三次。但是现在有这样一个场景:我们有1000个人在一个十分钟内向一个我们网站都看了同一个文章,那么我们有没有哪些可以优化我们的后端代码,因为这只是一篇文章在短时间内就被访问了1000次,当然我们网站的文章是海量的,那我们该怎么办?那么我们的数据缓存就派上用场了,基本的流程是这样的:

drf实现常用数据缓存

流程

  1. 在第一次请求的时候查看缓存中(redis)是否有数据,有数据则直接返回响应
  2. redis 中没有数据,则查询数据库
  3. 查询数据库并将数据保存到redis中,返回响应

这就是我们为什么只查询了一次数据库,若有1000次,我们在缓存时间内也只需要查询一次数据库,这里向redis中获取数据也需要耗时,但是由于redis数据存储在内存中,数据获取性能较数据库高了不止一点半点。

那么在drf项目中如何去实现呢?只需要简单的三步

安装

pip install drf-extensions

配置(可以省略)

# DRF扩展
REST_FRAMEWORK_EXTENSIONS = {
    # 缓存时间
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
}

使用

  • 使用cache_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):
        cities = City.objects.all().values_list('name', flat=True)
        return Response(cities)

注意,cache_response装饰器既可以装饰在类视图中的get方法上,也可以装饰在REST framework扩展类提供的list或retrieve方法上。使用cache_response装饰器无需使用method_decorator进行转换。

  • 使用扩展类(使用了视图集ViewSet)

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

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

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

from myapps.serializers import UserSerializer
from rest_framework_extensions.cache.mixins import CacheResponseMixin

class UserViewSet(CacheResponseMixin, viewsets.ModelViewSet):#继承顺序一定在ViewSet前
    serializer_class = UserSerializer

以上所述就是小编给大家介绍的《drf实现常用数据缓存》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First HTML与CSS(第2版)

Head First HTML与CSS(第2版)

Elisabeth Robson、Eric Freeman / 徐阳、丁小峰 / 中国电力出版社 / 2013-9 / 98.00元

是不是已经厌倦了那些深奥的HTML书?你可能在抱怨,只有成为专家之后才能读懂那些书。那么,找一本新修订的《Head First HTML与CSS(第2版)》吧,来真正学习HTML。你可能希望学会HTML和CSS来创建你想要的Web页面,从而能与朋友、家人、粉丝和狂热的顾客更有效地交流。你还希望使用最新的HTML5标准,能够保证随时间维护和扩展你的Web页面,使它们在所有浏览器和移动设备中都能正常工......一起来看看 《Head First HTML与CSS(第2版)》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具