前言
动态网站的基本权衡是,它们是动态的。每次用户请求页面时,Web服务器都会进行各种计算 - 从数据库查询到模板呈现再到业务逻辑 - 以创建站点访问者看到的页面。从处理开销的角度来看,这比标准的文件读取文件系统服务器要耗时多了。对于大多数Web应用程序来说,这种开销并不是什么大问题。因为大多数Web应用程序只是中小型网站
,没有拥有一流的流量。但对于中到高流量
的站点,尽可能减少开销
是至关重要的,这就是缓存的用武之地。缓存某些内容是为了保存昂贵计算的结果,这样就不必在下次执行计算。Django
框架带有一个强大的缓存系统,可以保存动态页面,因此不必为每个请求计算它们。Django
提供不同级别的缓存粒度:可以缓存特定视图的输出,也可以只缓存页面中难以生成的部分或者可以缓存整个站点。Redis
是一个内存数据库(现在已经支持内存数据持久化到硬盘当中,重新启动时,会自动从硬盘进行加载),由于其性能极高,因此经常作为中间件、缓存使用。
django应用redis缓存
django中安装第三方库,使用如下命令
pip3 install django-redis
1.settings配置
首先,我们在settings.py
中配置如下代码
CACHES = {
# default 是缓存名,可以配置多个缓存
"default": {
# 应用 django-redis 库的 RedisCache 缓存类
"BACKEND": "django_redis.cache.RedisCache",
# 配置正确的 ip和port
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
# redis客户端类
"CLIENT_CLASS": "django_redis.client.DefaultClient",
# redis连接池的关键字参数
"CONNECTION_POOL_KWARGS": {
"max_connections": 100
}
# 如果 redis 设置了密码,那么这里需要设置对应的密码,如果redis没有设置密码,那么这里也不设置
# "PASSWORD": "123456",
}
}
}
2.全站缓存
2.1 全站缓存的2个中间件
- FetchFromCacheMiddleware :从缓存中读取数据
- 缓存状态为200的
GET
和HEAD
请求的响应(除非响应头中设置不进行缓存) - 对具有不同查询参数的相同
URL
的请求的响应被认为是各自不同的页面,并且被分别单独缓存。 - 该中间件会使用与对应的
GET
请求相同的响应头来回答HEAD
请求,即可以为HEAD请求返回缓存
- 缓存状态为200的