django使用緩存之drf-extensions

使用方法:
一、直接添加裝飾器@cache_response
該裝飾器裝飾的方法有兩個要求:sql

  • 它必須是繼承了rest_framework.views.APIView的類的方法
  • 它必須返回rest_framework.response.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):
        # values_list()從查詢集中只返回指定的字段
        cities = City.objects.all().values_list('name', flat=True)
        return Response(cities)

若是您第一次請求視圖,您將從SQL查詢中得到它,(~60ms response time):json

# Request
GET /cities/ HTTP/1.1
Accept: application/json

# Response
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

['Moscow', 'London', 'Paris']

第二次請求將擊中緩存。沒有sql計算,沒有數據庫查詢,(~30 ms response time):後端

# Request
GET /cities/ HTTP/1.1
Accept: application/json

# Response
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

['Moscow', 'London', 'Paris']

總結:減小響應時間取決於API方法內部的計算複雜性。緩存

 

cache_response裝飾器能夠接收兩個參數:app

@cache_response(timeout=60*60, cache='default')
  • timeout 緩存時間
  • cache 緩存使用的Django緩存後端(即CACHES配置中的鍵名稱)

 若是在使用cache_response裝飾器時未指明timeout或者cache參數,則會使用配置文件中的默認配置,能夠經過以下方法指明:spa

# DRF擴展
REST_FRAMEWORK_EXTENSIONS = {
    # 緩存時間
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
    # 緩存存儲
    'DEFAULT_USE_CACHE': 'default',
}
  • DEFAULT_CACHE_RESPONSE_TIMEOUT 緩存有效期,單位秒
  • DEFAULT_USE_CACHE 緩存的存儲方式,與配置文件中的CACHES的鍵對應。

注意,cache_response裝飾器既能夠裝飾在類視圖中的get方法上,也能夠裝飾在REST framework擴展類提供的list或retrieve方法上。使用cache_response裝飾器無需使用method_decorator進行轉換rest


二、code

相關文章
相關標籤/搜索