Django缓存系统
Posted xgbky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django缓存系统相关的知识,希望对你有一定的参考价值。
缓存
Django
是动态Web
后台框架,需要实时生成用户访问的页面,进行多次的数据库操作,但是多次的数据库访问操作对于整个Web
系统来说,会影响效率,尤其是当访问量增大时,数据库的压力也会越来越大。相对于磁盘及内存操作,数据库的访问操作付出的成本要大的多
浏览器第一次请求时,
cache
会缓存单个变量或整个网页等内容到硬盘或者内存中,同时设置response
头部当浏览器再次发起请求时,会与缓存中的过期时间相比较,如果缓存时间比较新,则会重新请求数据,并缓存起来然后返回
response
给客户端,如果缓存没有过期,则直接从缓存中提取数据,返回给response
给客户端
Cache-Control
HTTP
协议头Cache-Control
,Cache-Control
与Expires
的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control
的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires
在
python
中使用memcached
需要我们额外安装memcached
作为memcache
客户端的支持
1
|
pip3 install python-memcached -i https://pypi.tuna.tsinghua.edu.cn/simple
|
Cache设置
memcached
-
安装
memcached
1
2apt-get install memcached # debian
yum install memcached # centos -
配置文件:
/etc/memcached.conf
配置文件中有两个可能需要修改的参数
1
2-m 64 #memcached所能使用的内存大小
-l 127.0.0.1 #监听的IP地址 -
开启|关闭
memcached
服务1
2systemctl start memcached # 开启
systemctl stop memcached # 关闭 -
查看服务状态
1
systemctl status memcached
settings配置
使用
memcached
缓存,首先需要在项目的settings
文件下进行配置
1
|
CACHES =
|
视图缓存
可以只为某些视图函数进行缓存
使用
django.views.decorators.cache
下的装饰器cache_page
进行视图函数装饰即可
- 模型类的表代码
1
|
class People(models.Model):
|
- 视图函数代码
1
|
from django.views.decorators.cache import cache_page
|
- 模板页面代码
1
|
<!DOCTYPE html>
|
在第一次刷新浏览器之后,
立即在数据库中添加一个新的数据对象
接着继续刷新浏览器,前端页面将会读取缓存中的结果,而不会显示刚才添加的用户
除了在视图函数上使用装饰器进行缓存设置,还可以在路由匹配部分使用相同装饰器函数进行设置
全站缓存
将整站所有视图设置缓存,需要在配置文件的中间件设置首尾部分添加如下内容
1
|
MIDDLEWARE = [
|
以及搭配设置当前全站缓存有效时间的全局变量
1
|
CACHE_MIDDLEWARE_SECONDS = 10 # 每页页面缓存的秒数,默认为600
|
局部缓存
局部缓存主要为在模板页面,选择某个区域进行缓存,当用户再次访问相同页面时,如设置缓存未过期,则渲染时局部缓存不会重新生成
1
|
% load cache %
|
以时间模板变量为例,做一个简单的测试,后台视图函数每次在访问时,返回当前时间
1
|
import time
|
模板页面在使用时的代码
1
|
% load cache %
|
手动缓存
除了以上应用于各个业务中的缓存方式,还可以使用
django
所提供的cache
接口进行缓存设置以及获取
- 设置缓存
1
|
from django.core.cache import cache
|
- 获取缓存
1
|
#获取缓存数据
|
- 避免
key
值重复导致更新缓存,可以使用cache.add
函数,基本用法与set
相同
1
|
status = cache.add(‘add_key‘, ‘New value‘)
|
- 清除缓存,通过
cache.delete
方法,该方法接收一个缓存key
值
1
|
cache.delete(‘cache_key‘)
|
- 清空缓存,通过
cache.clear
方法,直接从缓存中清除所有
1
|
cache.clear()
|
注意
memcached
不允许使用超过250
个字符或包含空格或控制字符的缓存键值使用这样的键值将会导致异常
以上是关于Django缓存系统的主要内容,如果未能解决你的问题,请参考以下文章