高性能web網(wǎng)站中的緩存

開(kāi)發(fā)一個(gè)高性能的web服務(wù),緩存是必不可少的。緩存是萬(wàn)金油,下面介紹下我們web服務(wù)中用到了哪些緩存

1、前端緩存

對(duì)于靜態(tài)資源,有三種方式。

  1. 根據(jù)last modified time,詢(xún)問(wèn)web server是否有更新,若not modified,則讓瀏覽器使用本地緩存
  2. 根據(jù)etag標(biāo)識(shí),web server對(duì)比瀏覽器傳過(guò)來(lái)的etag與服務(wù)器計(jì)算出的etag,若不同則返回最新的內(nèi)容給瀏覽器。使用etag優(yōu)于使用last modified time機(jī)制,畢竟基于內(nèi)容算出來(lái)的標(biāo)記更為靠譜。
  3. 根據(jù)expire標(biāo)識(shí),若max-age大于0,則可以使用本地緩存,完全不用請(qǐng)求web server

2、cdn

前端項(xiàng)目中依賴(lài)的資源(js,css等),在打包后會(huì)自動(dòng)上傳到cdn上,從而加速用戶(hù)訪問(wèn)。
cnd是由分布在不同區(qū)域的邊緣節(jié)點(diǎn)服務(wù)器群組成的分布式網(wǎng)絡(luò),替代傳統(tǒng)以WEB Server為中心的數(shù)據(jù)傳輸模式。將用戶(hù)的請(qǐng)求分配至最適合他的節(jié)點(diǎn),使用戶(hù)可以以最快的速度取得他所需的內(nèi)容,有效解決Internet網(wǎng)絡(luò)擁塞狀況,提高用戶(hù)訪問(wèn)的響應(yīng)速度。

3、vanish本地緩存

項(xiàng)目中使用了varnish作為本地緩存。使用vanish將對(duì)讀性能要求較高的配置類(lèi)接口進(jìn)行緩存(必須是get接口,并且響應(yīng)的httpcode為200)。vanish在后端機(jī)器上監(jiān)聽(tīng)8081端口,訪問(wèn)后端服務(wù)時(shí),需要指定proxy為127.0.0.1:8081當(dāng)本地vanish中緩存未過(guò)期時(shí),讀取緩存內(nèi)容后直接返回。當(dāng)緩存滿(mǎn)時(shí),vanish會(huì)根據(jù)LRU機(jī)制,把最舊的object釋放掉。

4、redis 分布式緩存

使用varnish,可以在不侵入代碼的情況下,緩存住大量讀的接口。而在某些情況下,需要使用redis這種分布式緩存,在多臺(tái)機(jī)器之間緩存數(shù)據(jù)。redis提供了豐富的數(shù)據(jù)結(jié)構(gòu)與查詢(xún)接口,事實(shí)上redis也是我們使用比較多的緩存之一。 但如果緩存的某個(gè)數(shù)據(jù)過(guò)大,例如幾十MB,反復(fù)讀取也會(huì)造成redis性能的下降。

5、apcu 進(jìn)程間緩存

php5.5以后,opcache將代替apc做為php加速的位置,也就是代替其系統(tǒng)緩存的位置。并將用戶(hù)緩存功能獨(dú)立出來(lái),開(kāi)啟新的組件,這個(gè)組件名稱(chēng)叫做apcu。使用時(shí)需要安裝,并且在ini文件中加上apc.enabled=on打開(kāi)。
apcu 使用共享內(nèi)存機(jī)制,可以在同一臺(tái)server的不同進(jìn)程間緩存數(shù)據(jù)。apcu將數(shù)據(jù)緩存在內(nèi)存中,相比redis等分布式緩存,省去了網(wǎng)絡(luò)io的時(shí)間,性能會(huì)更好。 但apcu對(duì)緩存內(nèi)存大小有要求。

    public static function get($key, $fun, $ttl)
    {
        if (!static::$isOpen || $ttl == 0) {
            return call_user_func($fun);
        }

        if (apcu_exists($key)) {
            return apcu_fetch($key);
        }
        $data = call_user_func($fun);
        if ($data) {
            apcu_store($key, $data, $ttl);
        }

        return $data;
    }

6、變量static緩存

在函數(shù)內(nèi)將變量聲明為static,在一次連接中可反復(fù)使用。速度快,效率高,實(shí)現(xiàn)簡(jiǎn)單

7、opcache緩存

當(dāng)解釋器完成對(duì)腳本代碼的分析后,便將它們生成可以直接運(yùn)行的中間代碼,也稱(chēng)為操作碼(Operate Code,opcode)。Opcode cache的目地是避免重復(fù)編譯,減少CPU和內(nèi)存開(kāi)銷(xiāo)。

8、mysql查詢(xún)緩存

MySQL查詢(xún)緩存可以跳過(guò)SQL解析優(yōu)化查詢(xún)等階段,直接返回緩存結(jié)果給用戶(hù)。當(dāng)然前提比較苛刻,需要兩次查詢(xún)環(huán)境與sql完全一樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容