Django項目之使用緩存進行數據查詢

省市區的數據是經常被用戶查詢使用的,而且數據基本不變化,所以我們可以將省市區數據進行緩存處理,減少數據庫的查詢次數。

在Django REST framework中使用緩存,可以通過drf-extensions擴展來實現。

關於擴展使用緩存的文檔,可參考鏈接http://chibisov.github.io/drf-extensions/docs/#caching

安裝

pip install drf-extensions

使用方法

1) 直接添加裝飾器

可以在使用rest_framework_extensions.cache.decorators中的cache_response裝飾器來裝飾返回數據的類視圖的對象方法,如

class CityView(views.APIView):
    @cache_response()
    def get(self, request, *args, **kwargs):
        ...

cache_response裝飾器可以接收兩個參數

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

如果在使用cache_response裝飾器時未指明timeout或者cache參數,則會使用配置文件中的默認配置,可以通過如下方法指明:

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

注意:

1.cache_response裝飾器既可以裝飾在類視圖中的get方法上,

2.也可以裝飾在REST framework擴展類提供的list或retrieve方法上。

3.使用cache_response裝飾器無需使用method_decorator進行轉換。

2)使用drf-extensions提供的擴展類

drf-extensions擴展對於緩存提供了三個擴展類:

  • ListCacheResponseMixin

    用於緩存返回列表數據的視圖,與ListModelMixin擴展類配合使用,實際是爲list方法添加了cache_response裝飾器

  • RetrieveCacheResponseMixin

    用於緩存返回單一數據的視圖,與RetrieveModelMixin擴展類配合使用,實際是爲retrieve方法添加了cache_response裝飾器

  • CacheResponseMixin

    爲視圖集同時補充List和Retrieve兩種緩存,與ListModelMixin和RetrieveModelMixin一起配合使用。

三個擴展類都是在rest_framework_extensions.cache.mixins中。

緩存數據保存位置與有效期的設置

我們想把緩存數據保存在redis中,且設置有效期,可以通過在配置文件中定義的方式來實現。

在配置文件中增加

# DRF擴展
REST_FRAMEWORK_EXTENSIONS = {
    # 緩存時間
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
    # 緩存存儲 default 表示緩存設置中設置的默認存儲位置
    'DEFAULT_USE_CACHE': 'default',
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章