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的作用只是讓你的緩存過期,但是不會刪除緩存的項目,這些緩存的項目依然會佔據你的內存。
推薦閱讀: