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裝飾器可以接收兩個引數:
- timeout:快取時間
- 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裝飾器可以接收兩個引數:
- timeout:快取時間
- 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} # 配置連線池 } } }