什么情况下使用缓存

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. Step by Step 配置使用HTTPS的ASP.NET Web应用
  2. Dynamics AX 2012 R2 业务系列
  3. J2EE中getParameter与getAttribute以及EL表达式${requestScope}和${param[]}
  4. 《Entity Framework 6 Recipes》中文翻译——第十章EntityFramework存储过程处理(八)
  5. 基础命名空间:序列化_自定义序列化 System.Runtime.Serialization
  6. poj1966Cable TV Network(无向图最小点割集 ISAP+邻接矩阵)
  7. 射频识别技术漫谈(18)——Mifare Desfire
  8. HDU 2815 Mod Tree
  9. linux利用命令重置大量密码
  10. ESP8266小知识与注意事项
  11. android TextView描边
  12. python中用psutil模块,yagmail模块监控CPU、硬盘、内存使用,阈值后发送邮件
  13. G - Throw nails
  14. 4,EasyNetQ-Request Response
  15. [转载]WebConfig配置文件详解
  16. CodeBlocks "no such file or directory" 错误解决方案(创建类找不到头文件)
  17. 读Bayes' Theorem
  18. 529. Minesweeper
  19. 学习build-web-application-with-golang第四章内容
  20. [转]Linux下RPM软件包的安装及卸载 yum操作

热门文章

  1. Beta版本讨论
  2. 使用NestedScrollView+ViewPager+RecyclerView+SmartRefreshLayout打造酷炫下拉视差效果并解决各种滑动冲突
  3. psp进度统计
  4. PAT 2016 数据的交换输出
  5. 侧边导航栏css示例
  6. 为elasticSearch开发c++接口
  7. javascript extend
  8. Spring之事务操作(配置文件)
  9. Java之Set的使用场景
  10. 【转】结构struct 联合Union和枚举Enum的细节讨论