网站访问效率优化的一大方法,缓存(cache)。缓存针对动态网站起作用居多,动态网站的数据来源于数据库或者其他的存储容器。当用户访问页面的时候,我们需要先查询数据,然后动态的将数据渲染到也买你,当数据量较大并且访问频繁的时候,容易导致响应效率低下,服务器压力变大,用户体验差。所以我们引入了缓存这个概念缓存的概念:
缓存是一类可以更快读取数据的介质统称,也是指其他可以加快诗句读取的存储方式。一般用来存储临时数据,常用的介质是读取速度很快的内存。通俗来讲,就是在我们第一次访问也页面时,就将数据库查询到的数据临时的放在一个地方,这个地方可以是内存,数据库,本地当中。在之后访问同样的数据的时候,直接访问刚才临时存放的地方,而不需要重新访问数据库,并查询这样就大大的提高了页面的响应效率,降低服务器压力。
Memcached是Django原生的最快速,最高效的分布式的高速缓存系统,它是一个完全基于内存的缓存服务器。它用于动态Web应用以减轻数据库负载从而显著的提高网站的性能,也是Django中到目前为止最有效率的可用缓存。
在桌面上找到计算机图标,点击鼠标右键,点管理
点击服务和应用程序,然后点击服务
在列表中找到Memcached Server,并启动服务
CACHES = {
'default': {
'BACKEND':
'django.core.cache.backends.memcached.MemcachedCache',#申明使用memcache进行缓存
'LOCATION': [
'127.0.0.1:11211'
]#memcached地址
}
}
Django可以将其缓存的数据存储在数据库中,如果你有一个快速,索引良好的数据库服务器,这对好
在命令行中输入python manage.py createcachetable Tab_name(自定义表明)
CACHES = {
'default': {
'BACKEND':
'django.core.cache.backends.db.DatabaseCache',#申明使用数据库进行缓存
'LOCATION': 'cache_table' #放缓存的表
}
}
在命令行输入pip install django-redis 和 pip install redis
关闭redis服务不能通过直接关闭窗口,需要再开一个命令行窗口用命令行
如果你想有内存缓存的优点,但是却没能力运行Memcached的时候你可以考虑memcached。但是本地内存缓存不是特别有效率。
CACHES = {
'default': {
'BACKEND':
'django.core.cache.backends.locmem.LocMemCache',#默认使用本地缓存
}
}
这是最简单最暴力的缓存方式,因为它缓存整个网站。
注意:UpdateCache中间件必须要放在第一个位,FetchFromCache中间件必须放在最后(因为中间件的顺序决定着运行的顺序)
CACHE_MIDDLEWARE_ALIAS-----------------------------------用于存储的高速缓存别名
CACHE_MIDDLEWARE_SECONDS-----------------------------全局缓存的秒数(既每个页面应该被缓存的秒数),默认600。
CACHE_MIDDLEWARE_KEY_PREFIX-------------------------同一个django下当多个网站共享缓存的时候,可以将该配置指向当前网站的识别,识别通常是域名,也可以是其他可以唯一标识该网站的字符,目的为了防止多个网站共享缓存,缓存混淆
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 600
CACHE_MIDDLEWARE_KEY_PREFIX = 'www.demo.com'
使用缓存框架的更细化的方式是缓存单个视图的输出。需要在视图中导入一个模块django.views.decorators.cache import cache_page,其中cache_page是一个装饰器自动缓存视图的响应
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) #参数60 * 15 为缓存数据的生命周期为900秒
def my_view(request)
...
from django.views.decorators.cache import cache_page
urlpatterns = [
path('index/',cache_page(60 * 15)(my_views)),
]
使用缓存模板标记来缓存模板片段,要让你的模板可以访问此代码,请将{% load cache %}放在模板顶部。{% cache %}模板标签将块的内容缓存给定的时间量。它至少需要两个参数:以秒为单位的高速缓存超时以及给出高速缓存片段的名称。 如果时时间为无,片段将永久缓存。 该名称将被视为不使用变量。
{% load cache %}
{% cache 500 sidebar %}
...
{% endcache %}
当你不想缓存整个视图,只是想缓存某个从数据库查询的结果,有时候缓存整个渲染页面并不会给你带来太多的好处。
Django公开了一个简单的底层缓存API。你可以使用整个API将对象以任意界别的粒度存储在缓存中。
from django.core.cache import cache
cache.get(): 从缓存中获取数据
cache.add(): 添加一个缓存
cache.set(): 修改或添加缓存
例:
from django.core.cache import cache
def demo_views(request):
store_data = cache.get('store_data') #从缓存中取数据,如果没有返回None
if store_data: #判断缓存中是否有store_data
view_data = store_data #如果有就直接从缓存中取出,用于渲染页面
else:
data = Store.objects.all() #如果没有就先从数据库中查询出数据
cache.set('store_data',data,30) #并将查询到的数据存入缓存
view_data = data #用于渲染页面
return render(request,'store/index.html',locals())