日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

drf实现常用数据缓存

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 drf实现常用数据缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在以往的后臺數據訪問時,我們往往都會進行數據庫查詢,基本的流程是這樣的:


圖中發生了三次請求,則很正常向數據庫查詢了三次。但是現在有這樣一個場景:我們有1000個人在一個十分鐘內向一個我們網站都看了同一個文章,那么我們有沒有哪些可以優化我們的后端代碼,因為這只是一篇文章在短時間內就被訪問了1000次,當然我們網站的文章是海量的,那我們該怎么辦?那么我們的數據緩存就派上用場了,基本的流程是這樣的:

流程

  • 在第一次請求的時候查看緩存中(redis)是否有數據,有數據則直接返回響應
  • 若redis中沒有數據,則查詢數據庫
  • 查詢數據庫并將數據保存到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 Cityclass 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 CacheResponseMixinclass UserViewSet(CacheResponseMixin, viewsets.ModelViewSet):#繼承順序一定在ViewSet前,其實必須在對應的mixin前serializer_class = UserSerializer

    def-extensions官方文檔:http://chibisov.github.io/drf...

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的drf实现常用数据缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。