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