drf實現常用資料快取

2021-09-12 18:18:31 字數 1877 閱讀 7900

在以往的後台資料訪問時,我們往往都會進行資料庫查詢,基本的流程是這樣的:

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

在第一次請求的時候檢視快取中(redis)是否有資料,有資料則直接返回響應

若redis中沒有資料,則查詢資料庫

查詢資料庫並將資料儲存到redis中,返回響應

這就是我們為什麼只查詢了一次資料庫,若有1000次,我們在快取時間內也只需要查詢一次資料庫,這裡向redis中獲取資料也需要耗時,但是由於redis資料儲存在記憶體中,資料獲取效能較資料庫高了不止一點半點。

那麼在drf專案中如何去實現呢?只需要簡單的三步

pip install drf-extensions
# drf擴充套件

rest_framework_extensions =

from rest_framework.response import response

from rest_framework import views

from rest_framework_extensions.cache.decorators import (

cache_response

)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進行轉換。listcacheresponsemixin:用於快取返回列表資料的檢視,與listmodelmixin擴充套件類配合使用,實際是為list方法新增了cache_response裝飾器

retrievecacheresponsemixin:用於快取返回單一資料的檢視,與retrievemodelmixin擴充套件類配合使用,實際是為retrieve方法新增了cache_response裝飾器

cacheresponsemixin:為檢視集同時補充list和retrieve兩種快取,與listmodelmixin和retrievemodelmixin一起配合使用。

from rest_framework_extensions.cache.mixins import cacheresponsemixin

class userviewset(cacheresponsemixin, viewsets.modelviewset):#繼承順序一定在viewset前,其實必須在對應的mixin前

serializer_class = userserializer

def-extensions官方文件:

python快取技術 drf實現常用資料快取

在以往的後台資料訪問時,我們往往都會進行資料庫查詢,基本的流程是這樣的 圖中發生了三次請求,則很正常向資料庫查詢了三次。但是現在有這樣乙個場景 我們有1000個人在乙個十分鐘內向乙個我們 都看了同乙個文章,那麼我們有沒有哪些可以優化我們的後端 因為這只是一篇文章在短時間內就被訪問了1000次,當然我...

DRF設定redis快取

說明 最近自己在做乙個 的drf專案,也是為了檢驗一下自己學習的效果。快取工具 redis資料庫 實現快取步驟 1 安裝drf extensions drf extensions是 drf 框架的自定義擴充套件的集合,其中就包含有快取的擴充套件。pip install drf extensions ...

drf版本控制 django快取

內建的版本控制類 from rest framework.versioning import queryparameterversioning,acceptheaderversioning,namespaceversioning,urlpathversioning 各版本的傳參方式 基於url的ge...