1. 程式人生 > >django Rest Framework---快取通過drf-extensions擴充套件來實現

django Rest Framework---快取通過drf-extensions擴充套件來實現

 什麼情況下使用快取

1.不經常更新的資料

2.使用者經常訪問的一些頁面,比如商品列表頁、商品詳情頁等

3.使用者經常修改的一些操作:購物車、訂單中心等

關於DRF快取擴充套件可以參考文件:http://chibisov.github.io/drf-extensions/docs/#caching

安裝

pip install drf-extensions

使用方法

1.使用裝飾器進行特定快取

可以使用@cache_response對檢視類的方法進行特定快取

class CityView(views.APIView):
    @cache_response(60 * 15,cache ='special_cache')
    def get(self,request,* args,** kwargs):
        ...

cache_response裝飾器可以接收兩個引數:

  1. timeout:快取時間
  2. cache:快取配置。預設是django的快取,使用memcache

如果不提供引數的話,也可以在settings中配置公共的快取配置:

複製程式碼
# DRF擴充套件
REST_FRAMEWORK_EXTENSIONS = {
    # 快取時間
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
    # 快取儲存
    'DEFAULT_USE_CACHE': 'default',
}
複製程式碼

 

2.使用drf-extensions提供的擴充套件類

drf-extensions擴充套件對於快取提供了三個擴充套件類:

  • ListCacheResponseMixin : 提供了快取返回列表資料的檢視,本質是為 mixins.ListModelMixin 的list()添加了cache_response裝飾器; get/。
  • RetrieveCacheResponseMixin:用於返回單一資料的是圖,本質是為 mixins.RetrieveModelMixin 添加了cache_response裝飾器;get/1/。
  • CacheResponseMixin:提供了List和Retrieve兩種快取,與ListModelMixin和RetrieveModelMixin一起配合使用。

 

from rest_framework_extensions.cache.mixins import CacheResponseMixin


class UserViewSet(CacheResponseMixin,viewsets.ModelViewSet):
    serializer_class = UserSerializer
    ....

 

將快取儲存在redis中

django預設的快取是memcache,memcache將快取放在記憶體中,不支援持久化,意味著我們重啟之後,快取就丟失了。

drf-extensions預設使用的是django的快取配置。我們還可以將快取儲存到redis中。

安裝django-redis

pip install django-redis

簡體中文版django-redis文件:http://django-redis-chs.readthedocs.io/zh_CN/latest/

作為 cache backend 使用配置

複製程式碼
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100} # 配置連線池
        }
    }
}

1.不經常更新的資料

2.使用者經常訪問的一些頁面,比如商品列表頁、商品詳情頁等

3.使用者經常修改的一些操作:購物車、訂單中心等

關於DRF快取擴充套件可以參考文件:http://chibisov.github.io/drf-extensions/docs/#caching

安裝

pip install drf-extensions

使用方法

1.使用裝飾器進行特定快取

可以使用@cache_response對檢視類的方法進行特定快取

class CityView(views.APIView):
    @cache_response(60 * 15,cache ='special_cache')
    def get(self,request,* args,** kwargs):
        ...

cache_response裝飾器可以接收兩個引數:

  1. timeout:快取時間
  2. cache:快取配置。預設是django的快取,使用memcache

如果不提供引數的話,也可以在settings中配置公共的快取配置:

複製程式碼
# DRF擴充套件
REST_FRAMEWORK_EXTENSIONS = {
    # 快取時間
    'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
    # 快取儲存
    'DEFAULT_USE_CACHE': 'default',
}
複製程式碼

 

2.使用drf-extensions提供的擴充套件類

drf-extensions擴充套件對於快取提供了三個擴充套件類:

  • ListCacheResponseMixin : 提供了快取返回列表資料的檢視,本質是為 mixins.ListModelMixin 的list()添加了cache_response裝飾器; get/。
  • RetrieveCacheResponseMixin:用於返回單一資料的是圖,本質是為 mixins.RetrieveModelMixin 添加了cache_response裝飾器;get/1/。
  • CacheResponseMixin:提供了List和Retrieve兩種快取,與ListModelMixin和RetrieveModelMixin一起配合使用。

 

from rest_framework_extensions.cache.mixins import CacheResponseMixin


class UserViewSet(CacheResponseMixin,viewsets.ModelViewSet):
    serializer_class = UserSerializer
    ....

 

將快取儲存在redis中

django預設的快取是memcache,memcache將快取放在記憶體中,不支援持久化,意味著我們重啟之後,快取就丟失了。

drf-extensions預設使用的是django的快取配置。我們還可以將快取儲存到redis中。

安裝django-redis

pip install django-redis

簡體中文版django-redis文件:http://django-redis-chs.readthedocs.io/zh_CN/latest/

作為 cache backend 使用配置

複製程式碼
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100} # 配置連線池
        }
    }
}