摘要:研究表明,減少用戶等待頁面載入的時間,可以增加用戶使用網站的欲望,并改善用戶對網站的印象。上一篇文章實戰第二章使用構建應用第二節使用實現購物車下一篇文章實戰第二章使用構建應用第四節數據行緩存
上一篇文章: Python--Redis實戰:第二章:使用Redis構建Web應用:第二節:使用Redis實現購物車
下一篇文章:Python--Redis實戰:第二章:使用Redis構建Web應用:第四節:數據行緩存
在動態生成網頁的時候,通常會使用模板語言【templating language】來簡化網頁的生成操作。需要手寫每個頁面的日子已經一去不復返:現在的Web頁面通常由包含首部、尾部、側欄菜單、工具條、內容域的模板生成,有時候模板還用于生成JavaScript。
盡管【Fake Web Retailer】也能夠動態地生成內容,但這個網站上的很多頁面實際上并不會經常發生大的變化:雖然會向分類中添加新商品、移除舊商品、有時有特價促銷、有時甚至還有【熱賣商品】頁面,但是在一般情況下,網站只有賬號設置、以往訂單、購物車【結賬信息】以及其他少數幾個頁面才包含需要每次載入都要動態生成的內容。
假設:通過對瀏覽數據進行分析,我們發現我們網站所處理的95%的Web頁面每天最多只會改變一次,這些頁面的內容實際上并不需要動態生成,而我們的工作就是想辦法不再生產這些頁面。減少網站的動態生成內容上面所花的時間,可以降低網站處理相同負載所需的服務器數量,并讓網站的速度變得更快。【研究表明,減少用戶等待頁面載入的時間,可以增加用戶使用網站的欲望,并改善用戶對網站的印象。】
所有標準的Python應用框架都提供了在處理請求之前或者之后添加層【layer】的能力,這些層同城被稱為中間件【middleware】或者插件【plugin】。我們將創建一個這樣的層來調用Redis緩存函數:對于一個不能被緩存的請求,函數將直接生成并返回頁面;而對于可以被緩存的請求,函數首先嘗試從緩存里面取出并返回被緩存的頁面,如果緩存頁面不存在,那么函數會生成頁面并將其緩存在Redis里面5分鐘,最后再將頁面返回給調用者。
def cache_request(conn,request,callback): if not can_cache(conn,request): #對于不能被緩存的請求,直接調用毀掉函數 return callback(request) #將請求轉換成一個簡單的字符串建,方便之后進行查找 page_key="cache:"+hash_request(request) #嘗試查找被緩存的頁面 content=conn.get(page_key) if not content: #如果頁面沒有被緩存,那么生成頁面 content=callback(request) #將新生成的頁面存放到緩存里面 conn.setex(page_key,content,300) return content
對于我們的網站上面95%的可被緩存并且頻繁被載入的內容來說,上面緩存函數可以讓網站在5分鐘之內無須再為它們動態生成視圖頁面。取決于網頁的內容有多復雜,這一改動可以將包含大量數據的頁面的延遲值從20~50毫秒降低至查詢一次Redis所需的時間:查詢本地Redis的延遲值通常低于1毫秒,而查詢位于同一數據中心的Redis的延時值通常低于5毫秒。對于那么需要訪問數據庫的頁面來說,這個緩存函數對于減少頁面載入時間和降低數據庫負載的作用會更加顯著。
在這一節中,我們學習了如何使用Redis來減少載入不常該表頁面所需的時間,那么對于那些經常發生變化的頁面,我們是否也能夠使用Redis來減少他們的載入時間呢?
答案是肯定的,接下來我們將介紹實現這一目標的具體做法。
上一篇文章: Python--Redis實戰:第二章:使用Redis構建Web應用:第二節:使用Redis實現購物車
下一篇文章:Python--Redis實戰:第二章:使用Redis構建Web應用:第四節:數據行緩存
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42564.html
摘要:為了防止用戶對同一篇文章進行多次投票,網站需要為每一篇文章記錄一個已投票用戶名單。上一篇文章實戰第一章初識第二節數據結構簡介下一篇文章實戰第二章使用構建應用第一節登錄和緩存 上一篇文章: Python--Redis實戰:第一章:初識Redis:第二節:Redis數據結構簡介下一篇文章:Python--Redis實戰:第二章:使用Redis構建Web應用:第一節:登錄和cookie緩存 ...
摘要:實際執行緩存操作的函數需要用到數據行的延遲值,如果某個數據行的延遲值不存在,那么程序將取消對這個數據行的調度。上一篇文章實戰第二章使用構建應用第三節網頁緩存下一篇文章實戰第二章使用構建應用第五節網頁分析 上一篇文章: Python--Redis實戰:第二章:使用Redis構建Web應用:第三節:網頁緩存下一篇文章:Python--Redis實戰:第二章:使用Redis構建Web應用:第...
閱讀 2373·2021-11-24 10:26
閱讀 2565·2021-11-16 11:44
閱讀 1695·2021-09-22 15:26
閱讀 3565·2021-09-10 11:11
閱讀 3178·2021-09-07 10:25
閱讀 3615·2021-09-01 10:41
閱讀 1002·2021-08-27 13:11
閱讀 3498·2021-08-16 11:02