一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

 千鋒Python學(xué)堂 2019-08-16

今天的Python學(xué)習(xí)教程絕對是純技術(shù)的分享, 關(guān)于Django項(xiàng)目緩存優(yōu)化問題的詳細(xì)講解!

一起來看看:

一、為什么要使用緩存

大家可以想一下Django的請求響應(yīng)流程:

→ 用戶瀏覽器輸入U(xiǎn)RL地址

→ Web服務(wù)器將HTTP請求轉(zhuǎn)發(fā)給uWSGI服務(wù)器

→ uWSGI服務(wù)器將Request請求轉(zhuǎn)發(fā)給Django應(yīng)用

→ Django中間件處理Request請求

→ 視圖View處理

→ 模型類Models獲取數(shù)據(jù)

→ 模板Template渲染

→ 再次經(jīng)過Django中間件返回

→ uWSGI服務(wù)器將Response返回給Web服務(wù)器

→ Web服務(wù)器響應(yīng)客戶端的HTTP請求。

這其中耗時(shí)最多的2個(gè)環(huán)節(jié)通常是視圖中業(yè)務(wù)邏輯處理和從Models獲取數(shù)據(jù)(SQL查詢),對于相同目的請求,也就是業(yè)務(wù)處理邏輯和SQL查詢的數(shù)據(jù)都一樣的請求,每次都進(jìn)行了重復(fù)的計(jì)算,并且數(shù)據(jù)是從硬盤讀取而非內(nèi)存。

所以使用緩存有如下好處:

  • 降低服務(wù)器負(fù)載

  • 避免重復(fù)計(jì)算

  • 提高系統(tǒng)性能

二、如何進(jìn)行緩存

很簡單,一個(gè)Request請求過來,先去緩存中查詢,有就返回;沒有就去數(shù)據(jù)庫查詢并處理,然后把結(jié)果緩存好(供下次請求使用),再返回。用偽代碼解釋的話就是這樣

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

三、緩存的類型

1. Memcached 效率最高,最快的緩存
2. Database caching 數(shù)據(jù)庫緩存,這個(gè)指把數(shù)據(jù)緩存到數(shù)據(jù)表,比如你項(xiàng)目中使用的MySQL,就在MySQL中建表來專門緩存數(shù)據(jù)。不是指用Redis數(shù)據(jù)庫
3. Filesystem caching 文件系統(tǒng)緩存,將緩存會把鍵值存儲到獨(dú)立的文件中去
4. Local-memory caching 使用系統(tǒng)內(nèi)存緩存
5. Dummy caching (for development) 假緩存,只在開發(fā)過程中使用,以調(diào)試緩存接口,數(shù)據(jù)并沒有真正緩存
6. Using a custom cache backend 自定義緩存后端,比如使用Redis

那么問題來了,我該使用哪種緩存呢?

其實(shí)常用的也就2種:Memcached或者Reids,其它基本不用考慮了。Redis國內(nèi)用得多,支持RDB和AOF兩種持久化方式,支持高可用集群,技術(shù)和方案很成熟。Memcached是純內(nèi)存存儲,本身不支持持久化,不支持分布式,但是它內(nèi)存管理效率高。

四、緩存粒度分類

  1. Per-site cache 把整個(gè)網(wǎng)站都緩存了,只需要在項(xiàng)目中設(shè)置加入緩存中間鍵的配置,系統(tǒng)便會自動(dòng)對整個(gè)網(wǎng)站進(jìn)行緩存

  2. Per-view cache 緩存某個(gè)視圖

  3. Template fragment caching 模板的片段,比如Django模板繼承base.html,通常是不變的導(dǎo)航欄

  4. Low-level cache API 低級別緩存API,比如緩存某個(gè)函數(shù)的結(jié)果,或者某個(gè)API接口

那么問題又來了,項(xiàng)目中我該選擇什么樣的緩存粒度?

是否需要緩存很簡單,看內(nèi)容是否變化。如果整個(gè)視圖的數(shù)據(jù)通常都不變,就使用視圖緩存,某些模板片段的數(shù)據(jù)不變就使用模板片段緩存等等。所以一個(gè)項(xiàng)目里面多種緩存粒度都有的

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

五、Django緩存設(shè)置

這里只說一下Redis和Memcached的,其它很少用的就不羅列了,需要注意的是系統(tǒng)上要安裝對應(yīng)的緩存服務(wù),Django開發(fā)環(huán)境中要安裝連接緩存服務(wù)的包(比如django-redis或pymemcache)

Memcache緩存設(shè)置

最簡單的,配置地址和端口,不一定是要在本機(jī),也可以是其它網(wǎng)段的服務(wù)器或集群

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

在本機(jī)的話,也可以使用unix Socket

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

也可以使用多態(tài)服務(wù)器,不同端口緩存

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

Redis緩存設(shè)置

截圖一下實(shí)戰(zhàn)課程中Redis緩存的配置,緩存網(wǎng)站的數(shù)據(jù)

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

Django channels頻道層的緩存

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

Celery緩存,broker和任務(wù)的執(zhí)行結(jié)果

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

六、緩存的使用

對于Django項(xiàng)目緩存的數(shù)據(jù),我們?nèi)〕鰜砘虼孢M(jìn)去操作,可以不需要直接操作底層的緩存數(shù)據(jù),比如使用原生的Redis或Memcached命令,只需要使用Django提供的緩存API即可。就像我們使用Django ORM一樣,無需關(guān)注底層數(shù)據(jù)庫是MySQL, PostgreSQL或SQLite,ORM語句都一樣。

例如,訪問緩存

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

使用緩存

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

除了set(), get()還有g(shù)et_or_set(), get_many(), set_many(), delete(), delete_many(), clear(), touch(), incr(), decr(), close()操作。大家可以去看看官網(wǎng)文檔一個(gè)個(gè)操作下,要注意的是有的API不是每一個(gè)Django版本都有,比如cache.touch()是Django 2.1版本才有的。

七、Django緩存優(yōu)化性能評估

緩存使用了,那效果怎么樣,有什么指標(biāo)可以衡量?用什么工具來衡量?

Django Debug Toolbar

這點(diǎn)在之前的Python學(xué)習(xí)教程中有跟大家講到過!

django-debug-toolbar是一個(gè)開源的工具,可以在看板上展示django對request/response處理的詳細(xì)信息,比如當(dāng)前請求響應(yīng)的CPU耗時(shí),settings/headers/request信息,當(dāng)前請求使用的模板文件,靜態(tài)文件,具體SQL語句和執(zhí)行時(shí)間等等,看板要顯示什么信息是可以靈活配置的。

右邊的欄目就是django-debug-tool的看板

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

此頁面共有9次SQL查詢,耗時(shí)8.62毫秒

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

緩存命中3次,cache.get(),用時(shí)約0.91毫秒

Python學(xué)習(xí)教程(技術(shù)分享):Django項(xiàng)目緩存優(yōu)化

Jmeter壓力測試

django-debug-tool是開發(fā)人員用,從功能角度測試緩存效果。而Jmeter就是專門測試人員用的,用于性能測試和壓力測試。項(xiàng)目使用緩存后,整體性能是不是提高了,高負(fù)載情況下系統(tǒng)穩(wěn)定性怎么樣。測試方面的知識就不具體展開了,不太清楚的伙伴可以私信或者留言哈!更多的Python學(xué)習(xí)教程也會繼續(xù)為大家更新!

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    精品推荐国产麻豆剧传媒| 久久99热成人网不卡| 国产日本欧美特黄在线观看| 有坂深雪中文字幕亚洲中文| 国产熟女一区二区精品视频| 色欧美一区二区三区在线| 91亚洲熟女少妇在线观看| 欧美精品亚洲精品日韩专区| 日韩中文字幕有码午夜美女| 亚洲黄色在线观看免费高清| 成人精品一级特黄大片| 欧美成人黄色一区二区三区| 久久精品偷拍视频观看| 在线免费不卡亚洲国产| 免费特黄欧美亚洲黄片| 黄色国产自拍在线观看| 欧美激情区一区二区三区| 欧美黑人黄色一区二区| 日系韩系还是欧美久久| 日本一级特黄大片国产| 中文字幕91在线观看| 天堂热东京热男人天堂| 搡老熟女老女人一区二区| 亚洲精品成人福利在线| 综合久综合久综合久久| 中文字幕亚洲精品人妻| 亚洲欧美日韩国产成人| 中文字幕人妻一区二区免费| 中国黄色色片色哟哟哟哟哟哟| 日韩国产亚洲欧美另类| 免费午夜福利不卡片在线 视频| 中文字幕中文字幕在线十八区 | 人妻久久这里只有精品| 综合久综合久综合久久| 青青操在线视频精品视频| 国产色一区二区三区精品视频| 狠狠做五月深爱婷婷综合| 久久久精品日韩欧美丰满| 少妇人妻中出中文字幕| 玩弄人妻少妇一区二区桃花 | 国产毛片不卡视频在线|