成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

hoohack / 1119人閱讀

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

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

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

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

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

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

def cache_request(conn,request,callback):
    if not can_cache(conn,request):
        #對(duì)于不能被緩存的請(qǐng)求,直接調(diào)用毀掉函數(shù)
        return callback(request)
    #將請(qǐng)求轉(zhuǎn)換成一個(gè)簡(jiǎn)單的字符串建,方便之后進(jìn)行查找
    page_key="cache:"+hash_request(request)
    #嘗試查找被緩存的頁(yè)面
    content=conn.get(page_key)

    if not content:
        #如果頁(yè)面沒(méi)有被緩存,那么生成頁(yè)面
        content=callback(request)
        #將新生成的頁(yè)面存放到緩存里面
        conn.setex(page_key,content,300)
    return content

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

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

答案是肯定的,接下來(lái)我們將介紹實(shí)現(xiàn)這一目標(biāo)的具體做法。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42564.html

相關(guān)文章

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

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

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

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

    TwIStOy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<