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

2021-10-11 22:30:02 字數 1723 閱讀 8793

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

圖中發生了三次請求,則很正常向資料庫查詢了三次。但是現在有這樣乙個場景:我們有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

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 rest_framework_extensions.cache.mixins import cacheresponsemixin

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

serializer_class = userserializer

drf實現常用資料快取

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

Python快取技術實現過程詳解

一段非常簡單 普通呼叫方式 def console1 a,b print 進入函式 return a,b print console1 3,a print console1 2,b print console1 3.0,a 很簡單的一段 傳入兩個引數。然後列印輸出。輸出結果 進入函式 3,a 進入函...

DRF設定redis快取

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