关于Django的缓存设置
1.关于缓存
在不断学习中不断总结,首先理解什么时Django的缓存机制,动态网站的特点即是动态的。每次用户请求页面时,Web服务器都会进行各种计算 ,例如从数据库查询到模板呈现再到业务逻辑 ,最终形成访问者看到的页面。从处理开销的角度来看,这比静态的文件读取文件系统要昂贵得多。
对于大多数Web应用程序来说,这种开销并不是什么大问题。大多数Web应用程序只是中小型网站。但对于中到高流量的站点,尽可能减少开销是至关重要的。
这就是缓存的用武之地。
2,在Django中如何简单实现
在这给大家演示一下在drf中缓存功能如何实现,我们可以下载一个drf-extensions
#导入第三方包
from rest_framework_extensions.cache.mixins import CacheResponseMixin
#直接在view中进行配置
class GoodsListViewSet(CacheResponseMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
pass
3.关于缓存功能在数据库上的实现
这里以redis为例,如果我们将数据缓存到redis中,会产生一个问题,我们保存数据是以json格式还是以html格式?
第二,不同的用户使用不同的过滤器产生的数据也不同,也就是用户的请求参数不同,缓存数据也不同
这里我们可以安装Django-redis来帮我们解决问题
https://django-redis-chs.readthedocs.io/zh_CN/latest/
4.api限速
随着我们的web项目越来越大,对ip访问限速十分有必要,api限速主要针对爬虫,无节制的爬虫会对我们的服务器造成巨大压力,避免误伤我们也对对访问实行时间限制,好在drf里面自带throttle,我们可以直接配置:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle', #匿名限速
'rest_framework.throttling.UserRateThrottle' #用户限速
),
'DEFAULT_THROTTLE_RATES': {
'anon': '2/minute',
'user': '3/minute'
}
}
这里为什么需要对User限速?因为爬虫会模拟用户登录。最后我们将AnonRateThrottle或UserRateThrottle配置到ViewSet中即可实现访问限速功能