成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第三節(jié):網(wǎng)頁緩存

hoohack / 1061人閱讀

摘要:研究表明,減少用戶等待頁面載入的時間,可以增加用戶使用網(wǎng)站的欲望,并改善用戶對網(wǎng)站的印象。上一篇文章實戰(zhàn)第二章使用構(gòu)建應(yīng)用第二節(jié)使用實現(xiàn)購物車下一篇文章實戰(zhàn)第二章使用構(gòu)建應(yīng)用第四節(jié)數(shù)據(jù)行緩存

上一篇文章: Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第二節(jié):使用Redis實現(xiàn)購物車
下一篇文章:Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第四節(jié):數(shù)據(jù)行緩存

在動態(tài)生成網(wǎng)頁的時候,通常會使用模板語言【templating language】來簡化網(wǎng)頁的生成操作。需要手寫每個頁面的日子已經(jīng)一去不復(fù)返:現(xiàn)在的Web頁面通常由包含首部、尾部、側(cè)欄菜單、工具條、內(nèi)容域的模板生成,有時候模板還用于生成JavaScript。

盡管【Fake Web Retailer】也能夠動態(tài)地生成內(nèi)容,但這個網(wǎng)站上的很多頁面實際上并不會經(jīng)常發(fā)生大的變化:雖然會向分類中添加新商品、移除舊商品、有時有特價促銷、有時甚至還有【熱賣商品】頁面,但是在一般情況下,網(wǎng)站只有賬號設(shè)置、以往訂單、購物車【結(jié)賬信息】以及其他少數(shù)幾個頁面才包含需要每次載入都要動態(tài)生成的內(nèi)容。

假設(shè):通過對瀏覽數(shù)據(jù)進行分析,我們發(fā)現(xiàn)我們網(wǎng)站所處理的95%的Web頁面每天最多只會改變一次,這些頁面的內(nèi)容實際上并不需要動態(tài)生成,而我們的工作就是想辦法不再生產(chǎn)這些頁面。減少網(wǎng)站的動態(tài)生成內(nèi)容上面所花的時間,可以降低網(wǎng)站處理相同負載所需的服務(wù)器數(shù)量,并讓網(wǎng)站的速度變得更快。【研究表明,減少用戶等待頁面載入的時間,可以增加用戶使用網(wǎng)站的欲望,并改善用戶對網(wǎng)站的印象。】

所有標準的Python應(yīng)用框架都提供了在處理請求之前或者之后添加層【layer】的能力,這些層同城被稱為中間件【middleware】或者插件【plugin】。我們將創(chuàng)建一個這樣的層來調(diào)用Redis緩存函數(shù):對于一個不能被緩存的請求,函數(shù)將直接生成并返回頁面;而對于可以被緩存的請求,函數(shù)首先嘗試從緩存里面取出并返回被緩存的頁面,如果緩存頁面不存在,那么函數(shù)會生成頁面并將其緩存在Redis里面5分鐘,最后再將頁面返回給調(diào)用者。

def cache_request(conn,request,callback):
    if not can_cache(conn,request):
        #對于不能被緩存的請求,直接調(diào)用毀掉函數(shù)
        return callback(request)
    #將請求轉(zhuǎn)換成一個簡單的字符串建,方便之后進行查找
    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

對于我們的網(wǎng)站上面95%的可被緩存并且頻繁被載入的內(nèi)容來說,上面緩存函數(shù)可以讓網(wǎng)站在5分鐘之內(nèi)無須再為它們動態(tài)生成視圖頁面。取決于網(wǎng)頁的內(nèi)容有多復(fù)雜,這一改動可以將包含大量數(shù)據(jù)的頁面的延遲值從20~50毫秒降低至查詢一次Redis所需的時間:查詢本地Redis的延遲值通常低于1毫秒,而查詢位于同一數(shù)據(jù)中心的Redis的延時值通常低于5毫秒。對于那么需要訪問數(shù)據(jù)庫的頁面來說,這個緩存函數(shù)對于減少頁面載入時間和降低數(shù)據(jù)庫負載的作用會更加顯著。

在這一節(jié)中,我們學(xué)習(xí)了如何使用Redis來減少載入不常該表頁面所需的時間,那么對于那些經(jīng)常發(fā)生變化的頁面,我們是否也能夠使用Redis來減少他們的載入時間呢?

答案是肯定的,接下來我們將介紹實現(xiàn)這一目標的具體做法。

上一篇文章: Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第二節(jié):使用Redis實現(xiàn)購物車
下一篇文章:Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第四節(jié):數(shù)據(jù)行緩存

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42564.html

相關(guān)文章

  • Python--Redis實戰(zhàn):第一章:初識Redis三節(jié):你好Redis-文章投票試煉

    摘要:為了防止用戶對同一篇文章進行多次投票,網(wǎng)站需要為每一篇文章記錄一個已投票用戶名單。上一篇文章實戰(zhàn)第一章初識第二節(jié)數(shù)據(jù)結(jié)構(gòu)簡介下一篇文章實戰(zhàn)第二章使用構(gòu)建應(yīng)用第一節(jié)登錄和緩存 上一篇文章: Python--Redis實戰(zhàn):第一章:初識Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡介下一篇文章:Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第一節(jié):登錄和cookie緩存 ...

    Meils 評論0 收藏0
  • Python--Redis實戰(zhàn)二章使用Redis構(gòu)建Web應(yīng)用:第四節(jié):數(shù)據(jù)行緩存

    摘要:實際執(zhí)行緩存操作的函數(shù)需要用到數(shù)據(jù)行的延遲值,如果某個數(shù)據(jù)行的延遲值不存在,那么程序?qū)⑷∠麑@個數(shù)據(jù)行的調(diào)度。上一篇文章實戰(zhàn)第二章使用構(gòu)建應(yīng)用第三節(jié)網(wǎng)頁緩存下一篇文章實戰(zhàn)第二章使用構(gòu)建應(yīng)用第五節(jié)網(wǎng)頁分析 上一篇文章: Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第三節(jié):網(wǎng)頁緩存下一篇文章:Python--Redis實戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第...

    TwIStOy 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<