页面数据的缓存
比如首页信息,不论用户有没有登录,它很多显示的数据时一样的。
减少了数据的查询次数:把页面使用到的数据存放在缓存中,当再次使用这些数据时,先从缓存中获取,如果获取不到再去查询数据库。减少数据库查询次数。
数据库需要查询,文件需要读取比数据库更慢,与之相比内存型的redis数据库较快。
缓存级别:
站点级缓存:直接将整个网站进行缓存。毕竟redis是使用内存,所以不合理。
视图缓存:不合理,每个用户的数据是不同的。
模板片段缓存;在视图中最后返回模板,在返回模板之前就已经把需要的数据进行查询过了,所以也不太合理。
存储缓存常用的方式:
Memcache缓存:
分布式的高速缓存系统,通常用来提高网站的访问速度。
在本地安装Memcache服务。
下载解压缓存包,在解压目录下,以管理员身份打开命令行
memcached.exe -d install
计算机 --> 鼠标右击 --> 管理
安装django-memcache
pip install python-memcached
到global_settings当中复制cache配置结构到自己的settings当中进行配置。
在settings当中配置
Memcache视图缓存
Memcache 路由缓存
在开发过程当中,是否有可能使用不同的路由指向同一个视图。比如商品的上架和下架功能,不同的路由,指向同一个视图,这个时候就需要针对路由进行缓存
本地缓存
数据库缓存
Redis数据库缓存
Mysql 缓存
创建对应存放缓存的数据表
设置数据库配置
Python manage.py createcachetable Tab_name
修改settings
缓存使用的方式:
1.全栈粒度的缓存
Django 全栈缓存通过缓存配置还有中间件来声明
首先配置settings的中间件,配置的位置必须一首一尾
Settings当中配置
CACHE_MIDDLEWARE_KEY_PREFIX = ''
同一个django下当多个网站共享缓存的时候,可以将该配置指向当前网站的识别,这个识别通常是域
也可以是其他可以唯一标识该网站的字符,目的为了防止多个网站共享缓存,缓存混淆
CACHE_MIDDLEWARE_SECONDS = 600 全局缓存的寿命
2.视图粒度缓存
3.路由粒度缓存
4.页面粒度缓存
底层缓存接口:
Set 设置cache
Get 获取 cache
Add 添加 cache
合理的缓存方式
底层的缓存API:
from django.core.cache import cache
基本的接口是set(key,value,timeout) 和get(key)
cache.set(‘my_key’,’hello word’,30)
cache.get(‘my_key’)
>>>hello word
缓存可以选择变化不大的页面内容进行缓存:
content={‘types’:types}
因为在工作中如果团队配合进行开发,在admin中没有进行清除缓存的话,那就无限缓存下去了。
所以在设置视图中缓存的时候,需要设置过期时间,避免上述情况的发生。
cache.set(‘index’,content,3600)
在请求时先尝试从缓存中请求数据。
context=cache.get(‘index_page_data’)
if context is None:
print(‘设置缓存’)
#缓存中没有数据
else:
#代码段
什么时候需要更新缓存数据?
当管理员修改信息后,需要更新,和上述提到相同。
只需要在admin中对缓存进行清除就可以。
当用户在下次访问的时候,会再次判断是否有缓存若没有则进行删除。
总结:
以上对网站本身性能的优化。
是通过减少数据库查询次数。这样的优化一定程度上可以防止被攻击。
l例如:DDOS同一时刻,很多电脑对网站发起访问。一个请求就的进行一次处理,同一时间需要查询很多次数据库。那就会造成网站被拖垮,不能提供服务。静态化和缓存就可以避免多次查询数据库。
再有使用nginx提供静态文件,nginx再去提供静态文件,效率很高,再多的访问请求nginx都会很快给出响应。所以一定程度上可以防止恶意攻击。