当前位置:   article > 正文

Django优化之缓存技术使用_环境变量放到django的cache里

环境变量放到django的cache里

Django 缓存系统

  网站访问效率优化的一大方法,缓存(cache)。缓存针对动态网站起作用居多,动态网站的数据来源于数据库或者其他的存储容器。当请求页面的时候,我们需要首先查询数据,让后动态的渲染数据,当数据量大并且访问频繁的时候,容易导致响应效率变第,服务器压力变大。
  所以,在第一次访问,就将数据库查询的数据先放到一个地方,这个地方可以是内存,数据库,本地当中,然后,之后访问同样的数据的时候,直接访问刚才存放的地方,而不是重新查询,那么这种技术就叫做缓存。

存储缓存常用的方式:

  • memcache缓存
  • 本地缓存
  • 数据库缓存

使用缓存的方式:

  • 视图粒度缓存
  • 路由粒度缓存
  • 页面粒度缓存
  • 全栈粒度缓存
  • 底层缓存接口

1、memcache缓存:
分布式的高速缓存系统,通常用来提高网站的访问速度。
在本地安装memcache服务。
下载解压缓存包,在解压目录下,以管理员身份打开命令行。

memcached.exe -d install
  • 1

进入windows服务,开启memcache服务
在这里插入图片描述
安装python-memcached
在这里插入图片描述
到global_settings当中复制cache配置结构到自己的settings当中进行配置
在这里插入图片描述
在settings当中配置memcache缓存

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

# 缓存配置
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',  # 声明使用memcache缓存
        'LOCATION': [
            '127.0.0.1:11211'
        ]  # 配置cache地址
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

使用视图颗粒方式进行memcache缓存

# 导入cache_page页面
from django.views.decorators.cache import cache_page
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述
使用路由颗粒方式进行memcache缓存:
在开发过程当中,有可能使用不同的路由指向同一个视图。比如商品的上架和下架功能,不同的路由,指向同一个视图,这个时候就需要针对路由进行缓存

# 导入cache_page页面
from django.views.decorators.cache import cache_page
  • 1
  • 2

在这里插入图片描述

2、本地缓存:
将缓存内容保存至内存中,必须要考虑的内存使用情况

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、数据库缓存:

①Redis数据库缓存
需要提前安装的插件

pip install django-redis
pip install redis
  • 1
  • 2

本地启动Redis数据库

redis-server.exe redis.windows.conf
  • 1

在这里插入图片描述
settings配置Redis数据库缓存

# Redis数据库缓存配置
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',  # 声明使用redis数据库缓存
        'LOCATION': [
            'redis://127.0.0.1:6379/1'
        ],  # 配置cache地址
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

创建对应存放缓存的数据表

python manage.py createcachetable Tab_name
  • 1

②MySQL或sqlite默认数据库缓存配置
settings配置:

# 使用默认数据库缓存
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',  # 使用Django默认数据库缓存
        'LOCATION': 'cache_table' # 存放缓存的表
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

同样创建存放缓存的数据表

python manage.py createcachetable Tab_name
  • 1

然后使用路由或视图的方式应用缓存

最后访问使用缓存的视图,触发
注意修改时区为亚洲上海
在这里插入图片描述
在这里插入图片描述

全栈粒度缓存方式

Django 全栈缓存通过缓存配置还有中间件来声明
首先配置settings的中间件,配置的位置必须一首一尾

  • 用户的请求通过中间件,经过一系列的认证等操作,如果请求的内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户
  • 当返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将缓存保存至Django的缓存之中,以实现全站缓存
  • 请求来了,是从上到下入走中间件;响应的时候是从下到上走中间件。因此,获取页面放在最后,保存页面放最前面
MIDDLEWARE = [
    # 放页面的时候,应该放在最前面
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 取页面放在这个位置
    'django.middleware.cache.FetchFromCacheMiddleware', #最后
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Settings当中还需要配置

# 全栈缓存配置,全局缓存
CACHE_MIDDLEWARE_KEY_PREFIX = ''
CACHE_MIDDLEWARE_SECONDS = 600 # 全局缓存时间
  • 1
  • 2
  • 3
 CACHE_MIDDLEWARE_KEY_PREFIX = '' 
		同一个django下当多个网站共享缓存的时候,可以将该配置指向当前网站的识别,
		这个识别通常是域名,也可以是其他可以唯一标识该网站的字符,目的为了防止多
		个网站共享缓存,缓存混淆
CACHE_MIDDLEWARE_SECONDS = 600
	    全局缓存的寿命
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
局部页面缓存方式
{% load cache %} # 加载缓存
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% cache 50 缓存key(别名) %} # 这个图片50s内会在缓存里中取
    <img src="http://pic16.nipic.com/20111006/6239936_092702973000_2.jpg" alt="加载失败">
    {% endcache %}
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
底层缓存接口方式
	set 设置cache 参数:key, value, timeout_seconds
	get 获取 cache 参数:key
	add 添加 cache 参数:key, value, timeout_seconds
  • 1
  • 2
  • 3

例子:

from django.core.cache import cache
def test(request):
    store_data = cache.get("store_data")
    if store_data:
        store_data = store_data
    else:
        data = Store.objects.all()
        cache.set("store_data",data,30)
        # cache.add("store_data", data, 30) #add只会添加一个缓存,不会修改已经存在的缓存
        store_data = data
    return render(request,"store/TestCache.html",locals())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/259100
推荐阅读
相关标签
  

闽ICP备14008679号