Django使用Memcached缓存,大大提升你的网站访问速度
使用缓存是提升Django网站访问速度的方法之一,而且Django支持多种形式的缓存方式,包括Memcached缓存,文件缓存,Redis缓存等。具体的介绍可以查看英文官方文档,也可查看中文翻译教程:
- 官方文档:https://docs.djangoproject.com/en/2.2/topics/cache/
- 中文教程:http://www.liujiangblog.com/course/django/177
今天给大家介绍的是如何通过使用Memcached缓存加速你的Django网站,这里我以我的个人博客网站:http://www.eastnotes.com为例,给大家做实例演示,废话不多说,接下来详解具体步骤。
1.所需环境
- 可正常运行的Django网站一个:http://www.eastnotes.com
- Ubuntu:线上部署环境
- Memcached软体:非Django自带,需独立安装在Ubuntu中
- python-memcached:这是一个python库,有了它Django才能够使用Memcached缓存
2. 安装Memcached
sudo apt-get install memcached
然后安装memcached的依赖环境:
sudo apt-get install libevent-dev
使用下面的命令测试memcached是否安装正确,没有报错即安装成功
memcached -help
3.运行Memcached
memcached -d -m 512 -l 127.0.0.1 -p 11211 -u root
- -d:表示启动守护进程
- -l: 是监听的伺服器IP地址,这里我们填本地
- -p:是埠号
- -u:指定用哪个用户来运行,这里指定root
使用下面的命令查看Memcached是否正常运行
ps -ef | grep memcached
如果结果类似于如下,则表示启动成功
memcache 3652 1 0 16:43 ? 00:00:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
root 4719 2099 0 16:54 pts/0 00:00:00 grep --color=auto memcached
如果想要关掉Memcached可使用kill命令
kill -9 进程id
4.连接Memcached
这里我们使用telnet来连接,但是ubuntu中默认没有它,所以需要安装
apt-get install telnet
然后尝试连接:
telnet 127.0.0.1 11211
若提示如下,表示连接成功,然后输入quit就可以退出telnet
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ^].
此时,Memcached就已经成功安装在了Ubuntu中,接下来我们安装python-memcached,如果你使用的是python的虚拟环境,请一定要切换到Django项目所在的python虚拟环境:
pip install python-memcached
5.配置Django
首先我们在django的配置文件settings.py中添加如下代码:
CACHES = {
default: {
BACKEND: django.core.cache.backends.memcached.MemcachedCache,
LOCATION: 127.0.0.1:11211,
}
}
然后设置缓存时间,由于我的网站更新并不频繁,所以我设置1天,也就是60*60*12秒
CACHE_MIDDLEWARE_SECONDS=900
接著我们在中间件MIDDLEWARE添加memcached所需Django中间件,由于我选择的是缓存全站,所以需要的东西如下:
MIDDLEWARE = [
# 缓存全站
django.middleware.cache.UpdateCacheMiddleware,
django.middleware.common.CommonMiddleware,
django.middleware.cache.FetchFromCacheMiddleware,
]
好了,以上就是我们的全部配置和安装,重启nginx和uwsgi之后你就可以打开网站测速了,第一次打开的时候可能会比较慢,因为此时刚刚把你请求的东西放到缓存中,当你再次打开,或者说在你刚刚设定的缓存时间内打开,都是秒开的。
5.注意事项
启用缓存之后网站的访问速度是提升了,但是有一点你需要清楚,就是说当你在后台更新网站内容的时候,比如说新增一篇文章,网站的首页不会立即显示这篇文章,因为首页的内容已经被放到了缓存中,当你再次访问的时候,Django不是从资料库中捞数据,而是从缓存中捞数据。
当然,我们可以使用如下的命令简单地清除当下的缓存:
# 连接memcached
telnet 127.0.0.1 11211
# 清除缓存
flush_all
flush_all的作用只是让你的缓存过期,但是不会删除缓存的项目,这些缓存的项目依然会占据你的内存。
推荐阅读: