Django缓存详解

                                      Django缓存详解

网站访问效率优化的一大方法,缓存(cache)。缓存针对动态网站起作用居多,动态网站的数据来源于数据库或者其他的存储容器。当用户访问页面的时候,我们需要先查询数据,然后动态的将数据渲染到也买你,当数据量较大并且访问频繁的时候,容易导致响应效率低下,服务器压力变大,用户体验差。所以我们引入了缓存这个概念缓存的概念:

缓存的概念:

缓存是一类可以更快读取数据的介质统称,也是指其他可以加快诗句读取的存储方式。一般用来存储临时数据,常用的介质是读取速度很快的内存。通俗来讲,就是在我们第一次访问也页面时,就将数据库查询到的数据临时的放在一个地方,这个地方可以是内存,数据库,本地当中。在之后访问同样的数据的时候,直接访问刚才临时存放的地方,而不需要重新访问数据库,并查询这样就大大的提高了页面的响应效率,降低服务器压力。

 

设置缓存:

1.Memcached:

MemcachedDjango原生的最快速最高效分布式的高速缓存系统,它是一个完全基于内存的缓存服务器。它用于动态Web应用以减轻数据库负载从而显著的提高网站的性能,也是Django中到目前为止最有效率的可用缓存。

 安装Memcached服务:

  • 下载解压Memcached压缩包,在解压目录下,以管理员身份打开命令行

Django缓存详解_第1张图片

  • 在命令行中输入memcached.exe -d install 回车

  • 开启Memcached服务

在桌面上找到计算机图标,点击鼠标右键,点管理

Django缓存详解_第2张图片

点击服务和应用程序,然后点击服务

Django缓存详解_第3张图片

在列表中找到Memcached Server,并启动服务

Django缓存详解_第4张图片

安装memcached的插件python-memcache

  • 在命令行中输入pip install python-memcached

settings中配置

CACHES = {
    'default': {
        'BACKEND':         
        'django.core.cache.backends.memcached.MemcachedCache',#申明使用memcache进行缓存
        'LOCATION': [
            '127.0.0.1:11211'
        ]#memcached地址
    }
}

 

2.数据库缓存

Django可以将其缓存的数据存储在数据库中,如果你有一个快速,索引良好的数据库服务器,这对好

Mysql数据库:

  •  首先创建一个对应存放缓存的数据表

在命令行中输入python manage.py createcachetable  Tab_name(自定义表明)

  • 修改settings配置
CACHES = {
    'default': {
        'BACKEND':         
        'django.core.cache.backends.db.DatabaseCache',#申明使用数据库进行缓存
        'LOCATION': 'cache_table'     #放缓存的表
    }
}

Redis数据库:

  • 安装Redis数据库

在命令行输入pip install django-redis  pip install redis

  • 启动Redis服务

Django缓存详解_第5张图片

关闭redis服务不能通过直接关闭窗口,需要再开一个命令行窗口用命令行

3.本地内存缓存:

如果你想有内存缓存的优点,但是却没能力运行Memcached的时候你可以考虑memcached。但是本地内存缓存不是特别有效率。

settings中设置

CACHES = {
    'default': {
        'BACKEND':         
        'django.core.cache.backends.locmem.LocMemCache',#默认使用本地缓存
    }
}

缓存使用方式:

1.全站粒度缓存:

这是最简单最暴力的缓存方式,因为它缓存整个网站。

配置settings的中间件

Django缓存详解_第6张图片

注意:UpdateCache中间件必须要放在第一个位,FetchFromCache中间件必须放在最后(因为中间件的顺序决定着运行的顺序)

添加必须的设置到settings中

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' 

2.视图粒度缓存:

使用缓存框架的更细化的方式是缓存单个视图的输出。需要在视图中导入一个模块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)
    ...

3.路由粒度缓存:

from django.views.decorators.cache import cache_page

urlpatterns = [
    path('index/',cache_page(60 * 15)(my_views)),
]

4.模板粒度缓存:

使用缓存模板标记来缓存模板片段,要让你的模板可以访问此代码,请将{% load cache %}放在模板顶部。{% cache %}模板标签将块的内容缓存给定的时间量。它至少需要两个参数:以秒为单位的高速缓存超时以及给出高速缓存片段的名称。 如果时时间为无,片段将永久缓存。 该名称将被视为不使用变量。

{% load cache %}
{% cache 500 sidebar %}
    ...
{% endcache %}

5.底层缓存API:

当你不想缓存整个视图,只是想缓存某个从数据库查询的结果,有时候缓存整个渲染页面并不会给你带来太多的好处。

Django公开了一个简单的底层缓存API。你可以使用整个API将对象以任意界别的粒度存储在缓存中。

1.需要先导入模块

from django.core.cache import cache

2.三种基本用法

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())
 

 

你可能感兴趣的:(Django缓存详解)