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

資訊專欄INFORMATION COLUMN

Laravel 中緩存驅(qū)動(dòng)的速度比較

go4it / 3601人閱讀

摘要:我們很容易修改緩存驅(qū)動(dòng)方式。這樣的話,我們甚至根本不必檢查緩存是否過期。與驅(qū)動(dòng)相比,和的速度更快,所以建議在項(xiàng)目較大時(shí)使用外部緩存驅(qū)動(dòng)。結(jié)論使用文件數(shù)據(jù)庫(kù)作為驅(qū)動(dòng),兩者在速度上沒有很明顯的區(qū)別。所以投資高速緩存是值得的。

緩存是web開發(fā)中重要的一部分,我相信很多人和我一樣,經(jīng)常忽略這個(gè)問題。 隨著工作經(jīng)驗(yàn)的累積,我已經(jīng)意識(shí)到緩存是多么的重要,這里我通過 Scotch 來解釋一下它的重要性。

通過觀察發(fā)現(xiàn),Scotch每天按照計(jì)劃發(fā)布文章,然而,上一次發(fā)布文章的24小時(shí)內(nèi),新的文章不會(huì)被放出,因此,登陸頁(yè)面上的數(shù)據(jù)將保持24小時(shí)不變。 換句話說,在24小時(shí)內(nèi)( 更準(zhǔn)確的說是22-23個(gè)小時(shí))向數(shù)據(jù)庫(kù)請(qǐng)求文章數(shù)據(jù)是沒有意義的。

緩存可以很好的解決這個(gè)問題,當(dāng)遇到一個(gè)頁(yè)面請(qǐng)求時(shí),我們可以把結(jié)果緩存22個(gè)小時(shí),只要在這個(gè)時(shí)間內(nèi)通過控制器請(qǐng)求的數(shù)據(jù),都是緩存中的數(shù)據(jù),直到緩存超時(shí)。

下面我們來看看Laravel 中緩存的基本用法,然后看一個(gè)簡(jiǎn)單的例子,試試緩存到底能帶來多大的加速。
在 Laravel 中緩存的基本用法

Laravel 使得我們可以輕松地轉(zhuǎn)換出我們想要生成緩存的方式。我們很容易修改緩存驅(qū)動(dòng)方式。只需到 config / cache.php 來查看可用的驅(qū)動(dòng)程序:

apc

array

database

file

memcached

redis

你可以在?.env?文件中修改緩存驅(qū)動(dòng):

CACHE_DRIVER=file
你可以繼續(xù)嘗試修改它們而不用擔(dān)心配置,因?yàn)樗J(rèn)驅(qū)動(dòng)是 file 。

Cache facade 暴露了很多靜態(tài)方法來創(chuàng)建,更新,獲取,刪除和檢查緩存內(nèi)容的存在。讓我們?cè)跇?gòu)建演示應(yīng)用程序之前先了解一下這些方法。

建立/更新緩存值

我們使用?put()?方法來新增或更新緩存值。該方法必須使用 3 個(gè)參數(shù):

鍵名

鍵值

過期時(shí)間?單位分鐘

例如:

Cache::put("key", "value", 10);

?鍵名 是緩存的唯一標(biāo)識(shí),需要時(shí)要用它來獲取值。

此外,我們也可以用?remember()?方法自動(dòng)獲取和更新一個(gè)緩存值。該方法首先檢查?鍵名 是否存在,如果已經(jīng)創(chuàng)建則返回結(jié)果。否則它會(huì)創(chuàng)建新的?鍵名 ,并用閉包返回結(jié)果進(jìn)行賦值,就象下面:

Cache::remember("articles", 15, function() {
    return Article::all();
});

參數(shù)?15 是要緩存的分鐘數(shù)。這樣的話,我們甚至根本不必檢查緩存是否過期。Laravel 不僅會(huì)替我們打理,而且會(huì)獲取或重新生成該緩存,不需要我們顯式地告訴它如何操作。

檢索緩存值

緩存的值可以通過?get()?方法去獲取,這個(gè)方法接受一個(gè)參數(shù)?key?:

Cache::get("key");
檢查是否已存在key

有時(shí)候在更新或者取回緩存值之前判斷這個(gè)緩存的key是否存在是很有必要的,使用 has()?方法就可以實(shí)現(xiàn):

if (Cache::has("key")){
    Cache::get("key");
} else {
    Cache::put("key", $values, 10);
}
刪除緩存值

刪除緩存值可以用?forget()?方法并把需要?jiǎng)h除的?key?作為參數(shù)傳進(jìn)去:

Cache::forget("key");

我們也可以檢索緩存值并刪除它。我喜歡把這個(gè)稱為一次性緩存:

$articles = Cache::pull("key");

我們還可以使用以下命令在緩存過期前就把所有緩存清楚掉:

php artisan cache:clear
一個(gè)例子

這是一個(gè)簡(jiǎn)單的演示,主要是為了說明是否使用緩存對(duì)請(qǐng)求響應(yīng)所需要時(shí)間的影響,為了讓你能更直接的了解,我建議你跟著教程自己來?構(gòu)建?一個(gè) Laravel 例子。

模型和表遷移

使用下面命令新建一個(gè)?Article?模型:

php artisan make:model Article -m

?-m?參數(shù)會(huì)自動(dòng)創(chuàng)建一個(gè) migration ,所以無需再使用 create migration 命令了,這個(gè)命令會(huì)創(chuàng)建?App/Article.php 和 ?database/migrations/xxxx_xx_xx_xxxxxx_create_articles_table.php?文件。

修改你的 migration 文件并添加以下兩行:

public function up() {
    Schema::create("articles", function (Blueprint $table) {
        $table->increments("id");

        // add the following
        $table->string("title");
        $table->string("content");

        $table->timestamps();
    });
}

然后我們就可以用以下命令遷移我們的數(shù)據(jù)庫(kù)了:

php artisan migrate
填充數(shù)據(jù)庫(kù)

接下來我們需要填充文章的數(shù)據(jù)庫(kù)表,在?database/seeds/DatabaseSeeder.php 中,修改 ?run()?如下所示:

public function run() {
    Model::unguard();

    // use the faker library to mock some data
    $faker = Faker::create();

    // create 30 articles
    foreach(range(1, 30) as $index) {
        Article::create([
            "title" => $faker->sentence(5),
            "content" => $faker->paragraph(6)
        ]);
    }

    Model::reguard();
}

Laravel中包含?Faker?庫(kù)用以快速生成假數(shù)據(jù),我們可以使用PHP的?range()?方法去生成30條假數(shù)據(jù)。

接下來我們就可以通過這條 artisan 命令去填充數(shù)據(jù)庫(kù)了:

php artisan db:seed
創(chuàng)建文章控制器

接下來,我們可以創(chuàng)建一個(gè)處理請(qǐng)求和緩存的控制器,首先它是空的:

php artisan make:controller ArticlesController

...然后我們?cè)黾右粋€(gè)路由?app/Http/routes.php?指向這個(gè)文章控制器的 index 方法:

Route::group(["prefix" => "api"], function() {

    Route::get("articles", "ArticlesController@index");

});

現(xiàn)在我們的數(shù)據(jù)庫(kù)都是用樣本數(shù)據(jù)建立起來的,我們可以進(jìn)行測(cè)試了。

未使用緩存的響應(yīng)

讓我們看看我們傳統(tǒng)的控制器方法是什么樣的,沒有緩存,處理響應(yīng)需要多長(zhǎng)時(shí)間,在?index()?方法中,返回文章的資源數(shù)據(jù):

public function index() {
    $articles = Articles::all();
    return response()->json($articles);
}

你也可以使用?Postman?去請(qǐng)求(http://localhost/api/articles) 或者直接用瀏覽器打開,你就可以看到如下所示。

請(qǐng)注意在本地開發(fā)服務(wù)器上完成此請(qǐng)求所花費(fèi)的時(shí)間。

從緩存中返回的響應(yīng)

現(xiàn)在讓我們嘗試使用緩存,看看數(shù)據(jù)響應(yīng)所花費(fèi)的時(shí)間是否會(huì)有顯著差異。修改 index()方法為:

 public function index() {
    $articles = Cache::remember("articles", 22*60, function() {
        return Article::all();
    });
    return response()->json($articles);
}

現(xiàn)在我們使用?remember()?方法緩存了文章,緩存時(shí)間為 22 小時(shí),再次運(yùn)行并觀察所花費(fèi)的時(shí)間,可以看我的截圖:

結(jié)果和建議

在我的標(biāo)準(zhǔn)開發(fā)環(huán)境中測(cè)試得出,使用緩存時(shí)產(chǎn)生響應(yīng)所需的時(shí)間比沒有使用的時(shí)候要少:

未使用緩存
Server Hits Time
1st 4478ms
2nd 4232ms
3rd 2832ms
4th 3428ms
Avg 3742ms
使用緩存 (File 驅(qū)動(dòng))
Server Hits Time
1st 4255ms
2nd 3182ms
3rd 2802ms
4th 3626ms
Avg 3466ms
使用緩存 (Memcached 驅(qū)動(dòng))
Server Hits Time
1st 3626ms
2nd 566ms
3rd 1462ms
4th 1978ms
Avg 1908ms?:)
使用緩存 (Redis 驅(qū)動(dòng))

這里需要通過 composer 安裝 predis/predis 包

Server Hits Time
1st 3549ms
2nd 1612ms
3rd 920ms
4th 575ms
Avg 1664ms?:)

是不是很酷呢?這里有兩點(diǎn)需要注意:

即使使用了緩存,第一次請(qǐng)求響應(yīng)還是需要比較多的時(shí)間,因?yàn)楫?dāng)?shù)谝淮握?qǐng)求的時(shí)候緩存里面還是空的。

與 file 驅(qū)動(dòng)相比,Memcached 和 Redis 的速度更快,所以建議在項(xiàng)目較大時(shí)使用外部緩存驅(qū)動(dòng)。

結(jié)論

使用文件、數(shù)據(jù)庫(kù)作為驅(qū)動(dòng),兩者在速度上沒有很明顯的區(qū)別。但是如果我們使用第三方服務(wù)作為驅(qū)動(dòng), 可以很明顯地看到性能提升。所以投資高速緩存是值得的。

更多現(xiàn)代化 PHP 知識(shí),請(qǐng)加入 PHP / Laravel 知識(shí)社區(qū) 一起學(xué)習(xí)成長(zhǎng)吧。

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

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

相關(guān)文章

  • Laravel 5 程序優(yōu)化技巧

    摘要:使用即時(shí)編譯器和都能輕輕松松的讓你的應(yīng)用程序在不用做任何修改的情況下,直接提高或者更高的性能,之前做個(gè)一個(gè)實(shí)驗(yàn),具體請(qǐng)見使用提升程序性能。 本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū) 說明 性能一直是 Laravel 框架為人詬病的一個(gè)點(diǎn),所以調(diào)優(yōu) Laravel 程序算是一個(gè)必學(xué)的技能。 接下來分享一些開發(fā)的最佳實(shí)踐,還有調(diào)優(yōu)技巧,大家有別的建議也歡迎留言討論。 這里是簡(jiǎn)單的列表: 配置信...

    habren 評(píng)論0 收藏0
  • Lumen---為速度而生 Laravel 框架

    摘要:什么是官網(wǎng)是一個(gè)由組件搭建而成的微框架是當(dāng)前最快的框架之一在什么時(shí)候使用專為微服務(wù)或者設(shè)計(jì)舉個(gè)例子如果你的應(yīng)用里面有部分業(yè)務(wù)邏輯的請(qǐng)求頻率比較高就可以單獨(dú)把這部分業(yè)務(wù)邏輯拿出來使用來構(gòu)建一個(gè)小因?yàn)槭菍?duì)優(yōu)化了框架的加載機(jī)制所以對(duì)資源的要求少很 什么是 Lumen?官網(wǎng) lumen 是一個(gè)由 Laravel 組件搭建而成的微框架,是當(dāng)前最快的 PHP 框架之一! 在什么時(shí)候使用 Lume...

    104828720 評(píng)論0 收藏0
  • Lumen 初體驗(yàn)(二)

    摘要:的現(xiàn)狀目前是版本,是基于開發(fā)。入口文件啟動(dòng)文件和配置文件框架的入口文件是。在路由中指定控制器類必須寫全命名空間,不然會(huì)提示找不到類。目前支持四種數(shù)據(jù)庫(kù)系統(tǒng)以及。使用時(shí)發(fā)生錯(cuò)誤,因?yàn)樵谖募?,的默認(rèn)驅(qū)動(dòng)是。 最近使用 Lumen 做了 2 個(gè)業(yè)余項(xiàng)目,特此記錄和分享一下。 Lumen 的介紹 在使用一項(xiàng)新的技術(shù)時(shí),了解其應(yīng)用場(chǎng)景是首要的事情。 Lumen 的口號(hào):為速度而生的 La...

    Cheriselalala 評(píng)論0 收藏0
  • Laravel學(xué)習(xí)筆記之Redis保存頁(yè)面瀏覽量

    摘要:說明本文主要講述使用作為緩存加快頁(yè)面訪問速度。何不用來做緩存,等到該達(dá)到一定瀏覽頁(yè)面后再刷新下,效率也很高??勺骶彺嫦到y(tǒng)隊(duì)列系統(tǒng)。 說明:本文主要講述使用Redis作為緩存加快頁(yè)面訪問速度。同時(shí),作者會(huì)將開發(fā)過程中的一些截圖和代碼黏上去,提高閱讀效率。 備注:作者最近在學(xué)習(xí)github上別人的源碼時(shí),發(fā)現(xiàn)好多在計(jì)算一篇博客頁(yè)面訪問量view_count時(shí)都是這么做的:利用Laravel...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<