当前位置:   article > 正文

Django缓存详解_django cache.set

django cache.set

                                      Django缓存详解

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

缓存的概念:

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

 

设置缓存:

1.Memcached:

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

 安装Memcached服务:

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

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

  • 开启Memcached服务

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

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

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

安装memcached的插件python-memcache

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

settings中配置

  1. CACHES = {
  2. 'default': {
  3. 'BACKEND':
  4. 'django.core.cache.backends.memcached.MemcachedCache',#申明使用memcache进行缓存
  5. 'LOCATION': [
  6. '127.0.0.1:11211'
  7. ]#memcached地址
  8. }
  9. }

 

2.数据库缓存

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

Mysql数据库:

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

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

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

Redis数据库:

  • 安装Redis数据库

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

  • 启动Redis服务

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

3.本地内存缓存:

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

settings中设置

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

缓存使用方式:

1.全站粒度缓存:

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

配置settings的中间件

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

添加必须的设置到settings中

CACHE_MIDDLEWARE_ALIAS-----------------------------------用于存储的高速缓存别名

CACHE_MIDDLEWARE_SECONDS-----------------------------全局缓存的秒数(既每个页面应该被缓存的秒数),默认600。

CACHE_MIDDLEWARE_KEY_PREFIX-------------------------同一个django下当多个网站共享缓存的时候,可以将该配置指向当前网站的识别,识别通常是域名,也可以是其他可以唯一标识该网站的字符,目的为了防止多个网站共享缓存,缓存混淆

  1. CACHE_MIDDLEWARE_ALIAS = 'default'
  2. CACHE_MIDDLEWARE_SECONDS = 600
  3. CACHE_MIDDLEWARE_KEY_PREFIX = 'www.demo.com'

2.视图粒度缓存:

使用缓存框架的更细化的方式是缓存单个视图的输出。需要在视图中导入一个模块django.views.decorators.cache import cache_page,其中cache_page是一个装饰器自动缓存视图的响应

  1. from django.views.decorators.cache import cache_page
  2. @cache_page(60 * 15) #参数60 * 15 为缓存数据的生命周期为900秒
  3. def my_view(request)
  4. ...

3.路由粒度缓存:

  1. from django.views.decorators.cache import cache_page
  2. urlpatterns = [
  3. path('index/',cache_page(60 * 15)(my_views)),
  4. ]

4.模板粒度缓存:

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

  1. {% load cache %}
  2. {% cache 500 sidebar %}
  3. ...
  4. {% endcache %}

5.底层缓存API:

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

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

1.需要先导入模块

from django.core.cache import cache

2.三种基本用法

cache.get(): 从缓存中获取数据

cache.add(): 添加一个缓存

cache.set(): 修改或添加缓存

例:

  1. from django.core.cache import cache
  2. def demo_views(request):
  3. store_data = cache.get('store_data') #从缓存中取数据,如果没有返回None
  4. if store_data: #判断缓存中是否有store_data
  5. view_data = store_data #如果有就直接从缓存中取出,用于渲染页面
  6. else:
  7. data = Store.objects.all() #如果没有就先从数据库中查询出数据
  8. cache.set('store_data',data,30) #并将查询到的数据存入缓存
  9. view_data = data #用于渲染页面
  10. return render(request,'store/index.html',locals())

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/259092
推荐阅读
相关标签
  

闽ICP备14008679号