国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

drf實(shí)現(xiàn)常用數(shù)據(jù)緩存

cocopeak / 1782人閱讀

摘要:使用擴(kuò)展類使用了視圖集用于緩存返回列表數(shù)據(jù)的視圖,與擴(kuò)展類配合使用,實(shí)際是為方法添加了裝飾器用于緩存返回單一數(shù)據(jù)的視圖,與擴(kuò)展類配合使用,實(shí)際是為方法添加了裝飾器為視圖集同時(shí)補(bǔ)充和兩種緩存,與和一起配合使用。

在以往的后臺(tái)數(shù)據(jù)訪問時(shí),我們往往都會(huì)進(jìn)行數(shù)據(jù)庫查詢,基本的流程是這樣的:


圖中發(fā)生了三次請(qǐng)求,則很正常向數(shù)據(jù)庫查詢了三次。但是現(xiàn)在有這樣一個(gè)場(chǎng)景:我們有1000個(gè)人在一個(gè)十分鐘內(nèi)向一個(gè)我們網(wǎng)站都看了同一個(gè)文章,那么我們有沒有哪些可以優(yōu)化我們的后端代碼,因?yàn)檫@只是一篇文章在短時(shí)間內(nèi)就被訪問了1000次,當(dāng)然我們網(wǎng)站的文章是海量的,那我們?cè)撛趺崔k?那么我們的數(shù)據(jù)緩存就派上用場(chǎng)了,基本的流程是這樣的:

流程

在第一次請(qǐng)求的時(shí)候查看緩存中(redis)是否有數(shù)據(jù),有數(shù)據(jù)則直接返回響應(yīng)

若redis中沒有數(shù)據(jù),則查詢數(shù)據(jù)庫

查詢數(shù)據(jù)庫并將數(shù)據(jù)保存到redis中,返回響應(yīng)

這就是我們?yōu)槭裁粗徊樵兞艘淮螖?shù)據(jù)庫,若有1000次,我們?cè)诰彺鏁r(shí)間內(nèi)也只需要查詢一次數(shù)據(jù)庫,這里向redis中獲取數(shù)據(jù)也需要耗時(shí),但是由于redis數(shù)據(jù)存儲(chǔ)在內(nèi)存中,數(shù)據(jù)獲取性能較數(shù)據(jù)庫高了不止一點(diǎn)半點(diǎn)。
那么在drf項(xiàng)目中如何去實(shí)現(xiàn)呢?只需要簡單的三步

安裝
pip install drf-extensions
配置(可以省略)
# DRF擴(kuò)展
REST_FRAMEWORK_EXTENSIONS = {
    # 緩存時(shí)間
    "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擴(kuò)展類提供的list或retrieve方法上。使用cache_response裝飾器無需使用method_decorator進(jìn)行轉(zhuǎn)換。

使用擴(kuò)展類(使用了視圖集ViewSet)

ListCacheResponseMixin:用于緩存返回列表數(shù)據(jù)的視圖,與ListModelMixin擴(kuò)展類配合使用,實(shí)際是為list方法添加了cache_response裝飾器
RetrieveCacheResponseMixin:用于緩存返回單一數(shù)據(jù)的視圖,與RetrieveModelMixin擴(kuò)展類配合使用,實(shí)際是為retrieve方法添加了cache_response裝飾器
CacheResponseMixin:為視圖集同時(shí)補(bǔ)充List和Retrieve兩種緩存,與ListModelMixin和RetrieveModelMixin一起配合使用。

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

class UserViewSet(CacheResponseMixin, viewsets.ModelViewSet):#繼承順序一定在ViewSet前,其實(shí)必須在對(duì)應(yīng)的mixin前
    serializer_class = UserSerializer

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43197.html

相關(guān)文章

  • drf實(shí)現(xiàn)常用數(shù)據(jù)緩存

    摘要:使用擴(kuò)展類使用了視圖集用于緩存返回列表數(shù)據(jù)的視圖,與擴(kuò)展類配合使用,實(shí)際是為方法添加了裝飾器用于緩存返回單一數(shù)據(jù)的視圖,與擴(kuò)展類配合使用,實(shí)際是為方法添加了裝飾器為視圖集同時(shí)補(bǔ)充和兩種緩存,與和一起配合使用。 在以往的后臺(tái)數(shù)據(jù)訪問時(shí),我們往往都會(huì)進(jìn)行數(shù)據(jù)庫查詢,基本的流程是這樣的: showImg(https://segmentfault.com/img/bVbooYc?w=784&h...

    yanest 評(píng)論0 收藏0
  • drf實(shí)現(xiàn)常用數(shù)據(jù)緩存

    摘要:使用擴(kuò)展類使用了視圖集用于緩存返回列表數(shù)據(jù)的視圖,與擴(kuò)展類配合使用,實(shí)際是為方法添加了裝飾器用于緩存返回單一數(shù)據(jù)的視圖,與擴(kuò)展類配合使用,實(shí)際是為方法添加了裝飾器為視圖集同時(shí)補(bǔ)充和兩種緩存,與和一起配合使用。 在以往的后臺(tái)數(shù)據(jù)訪問時(shí),我們往往都會(huì)進(jìn)行數(shù)據(jù)庫查詢,基本的流程是這樣的: showImg(https://segmentfault.com/img/bVbooYc?w=784&h...

    ghnor 評(píng)論0 收藏0
  • Django-緩存

    摘要:自帶了一個(gè)健壯的緩存系統(tǒng)來保存動(dòng)態(tài)頁面,避免每次請(qǐng)求都重新計(jì)算。緩存中的和方法是很常見的。盡量放在第一個(gè)繼承的類設(shè)置過期時(shí)間根據(jù)自己需求加緩存。目前這個(gè)緩存使用的是內(nèi)存。 概述:對(duì)于中等流量的網(wǎng)站來說,盡可能的減少開銷是非常必要的。緩存數(shù)據(jù)就是為了保存那些需要很多計(jì)算資源的結(jié)果,這樣的話就不必在下次重復(fù)消耗計(jì)算資源。獲取數(shù)據(jù)的數(shù)據(jù)的時(shí)候就是去緩存中拿,拿到了直接返回,沒拿到就去數(shù)據(jù)庫中...

    aervon 評(píng)論0 收藏0
  • DRF跨域后端解決之django-cors-headers

    摘要:后端實(shí)現(xiàn)跨域第三方擴(kuò)展在介紹之前,我先介紹兩個(gè)概念同源策略跨域同源策略同源策略是一種約定,是瀏覽器的一種安全機(jī)制。這里同源需要協(xié)議域名端口三者都相同,否則不能進(jìn)行訪問??缬虿煌粗g的網(wǎng)站通信就是跨域。 在使用django-rest-framework開發(fā)項(xiàng)目的時(shí)候我們總是避免不了跨域的問題,因?yàn)楝F(xiàn)在大多數(shù)的項(xiàng)目都是前后端分離,前后端項(xiàng)目部署在不同的web服務(wù)器上,因?yàn)槲覀兪呛蠖顺绦騿T...

    lingdududu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<