色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > PHP使用Memcache實現數據緩存

PHP使用Memcache實現數據緩存 時間:2018-09-28      來源:未知

為什么要使用Memcache緩存數據

Memcache把數據緩存到內存里面去,讀取速度非常快,如果我們把頻繁訪問的數據放到內存中,對提高整個平臺性能和減輕數據庫服務器壓力效果是非常明顯的。

Memcache服務器是獨立的分布式服務,會在內存中建立hash列表,把數據存儲為key-value的方式,能夠從根本上提高數據訪問速度。我們可以把Memcache理解為一個高效的數據中轉站,是完全和WEB服務器、數據庫服務器分開的,這樣在擴展和部署上也就非常方便了。也就是說,我們在優化Memcache服務器或者更極端的Memcache服務器全部掛了,都不會影響平臺的正常訪問,真正的影響就是訪問速度可能會慢下來,也會增加數據庫服務器的壓力。

如果我們把90%的時間里訪問頻繁的20%的數據存儲到Memcache里面,將非常明顯的提高訪問速度,提升用戶體驗。

Memcache是非常成熟的緩存解決方案,技術成本及硬件成本也可以說是非常廉價的,所以在解決平臺性能瓶頸上這絕對是個首要考慮的方案。

Memcache緩存實現的思路及核心代碼

這里我們以信息列表為例,展示Memcache緩存實現的思路及應該注意的問題;

案例背景:

有一個信息表,里面有100萬條信息,然而我們經常訪問的是新的1000條。如果每頁顯示50條數據,那么就是新的前20頁數據訪問量非常大,需要緩存下來,后面的數據可以不用緩存,這個根據實際場景來分析。

1) 首先我們需要連接到Memcache服務器端,PHP有自己的擴展,直接使用:

//創建一個Memcache實例并連接到Memcache服務器

    $hqmemcache = new Memcache;

    //localhost是服務器地址,11211是端口

    $hqmemcache->connect('localhost', 11211);

2) 然后就是數據的獲取和輸出過程:我們應該如何獲取第一頁數據那?

當然其它緩存頁面也是這樣操作的,原理完全一樣;

參考代碼:

//第$page頁數據存儲的key是:list_page_$page

    $page    = (isset($_GET['page'])&&(int)$_GET['page']) ? (int)$_GET['page'] : 1;

    $pagenum = 50;

    echo '<ul>';

    //我們只緩存前20頁(新的1000條數據)

    $readfromdb = 1;

    if($page <= 20){

        $newslist = $hqmemcache->get('list_page_' . $page);

        if($newslist){

            //打印數據從哪里獲取的,實際應用中刪除即可

            echo '從緩存讀取的';

            //如果有緩存數據直接打印

            echo $newslist;

            $readfromdb = 0;

        }

    }

    /**

    * 如果沒有緩存數據(或者頁數超過20),則去數據庫獲取數據

    * 把獲取過來的數據組裝成字符串后存儲到Memcache

    * 只需要有一個訪問者訪問過就會緩存到Memcache

    * 后面的所有訪問者再訪問時獲取的就是Memcache里面的數據

    */

    if($readfromdb){

        $newslist = '';

        $hqdb   = new mysqli('localhost', 'root', '123456', 'testdata');

        $result = $hqdb->query('SELECT * FROM newslist ORDER BY id DESC LIMIT '.$pagenum*($page-1).', ' . $pagenum);

        while($news = $result->fetch_array(MYSQLI_ASSOC)){

            $newslist .= '<li><A href="./content.php?id='.$news['id'].'" blank="_target">'.$news['kw'].'</A></li>';

        }

        echo $newslist;

        //把數據存儲到Memcache

        if($page <= 20){

            $hqmemcache->set('list_page_' . $page, $newslist);

        }

    }

    echo '</ul>';

緩存的數據如何更新

我們應該在什么時間刪除或更新緩存信息那?

這個過程也很簡單,不需要太復雜的操作。就拿我們這個場景來講,只需要在添加或更新信息時刪除前20頁所有的緩存即可。

那么重建緩存的代價有多大那?理想的講就是第一個訪問者訪問時需要去數據庫獲取信息并生成緩存,全部緩存完也就是20頁的數據獲取,代價非常小,實際情況也和這個情況差距不大。

參考代碼也很簡單:

//有新消息添加或信息更新時刪除緩存

    for($di = 1; $di <= 20; $di++){

        $hqmemcache->delete('list_page_' . $di, 0);

    }

如果有一個用戶緩存成功,那么后面100萬個用戶訪問時就可以從Memcache獲取了,這對減輕數據庫服務器的壓力效果是很明顯的。

如有什么問題或者有什么更好的想法歡迎留言討論哦!

上一篇:MUI怎樣實現手機側滑導航

下一篇:S5PV210 上mjpg_streamer的移植

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 久久国产加勒比精品无码 | 欧美成人看片一区二三区 | a级黄色免费观看 | 久久久久青草线综合超碰 | 久久一区二区三区精华液介绍 | 黄色毛片儿| 91视频播放器 | 日本欧美产无码久久久久又大又粗 | 无码潮喷a片无码高潮 | 精品中文字幕在线AⅤ | 超级碰碰青草免费视频 | 超碰CAO草棚GAO进入 | 欧美激情一区二区三区在线 | 久久久久亚洲AV片无码 | 中美日韩毛片免费观看 | 久久精品国产亚洲77777 | 啊灬啊灬啊灬快灬深高潮了 | 婚外情欲三级无删减版 | 凌晨三点免费视频www | 97亚洲狠狠色综合一区二区 | 男女上下猛烈啪啪免费看 | 国产精品最新精品网页 | 人成午夜免费视频在线观看 | 无码人妻精品丰满熟妇区 | jizz18欧美18 | 少妇特殊按摩高潮惨叫无码 | 五月天国产成人av免费观看 | JAPANESE人妻无码人妻 | 亚洲国产AV无码一区二区三区 | 亚洲精品爱爱 | 97干干 | 中文字幕一区二区三区门四区五区 | 北条麻妃初尝试黑人 | 自拍偷自拍亚洲精品情侣 | 久久婷婷香蕉热狠狠综合 | 精品无码人妻夜人多侵犯18 | 又粗又黄a级裸片 | 亚洲色偷拍另类无码专区 | 国产对白视频 | 中文字幕免费在线观看视频 | 欧美成人天天综合在线 |