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

資訊專欄INFORMATION COLUMN

北哥大話Yii2緩存機(jī)制 - 緩存依賴

klivitamJ / 1713人閱讀

摘要:我們都知道,的緩存是支持依賴的,就是我們?cè)O(shè)置的緩存是否失效除了過(guò)期時(shí)間還決定于它所依賴的東東是否變化。用好依賴將大大提高我們使用緩存的效果,本節(jié)講解緩存的種依賴方式?,F(xiàn)在我們?nèi)匀煌ㄟ^(guò)一個(gè)例子說(shuō)明,假設(shè)我們的一個(gè)緩存同時(shí)依賴于兩個(gè)依賴。

我們都知道,yii2的緩存是支持依賴的,就是我們?cè)O(shè)置的緩存是否失效除了過(guò)期時(shí)間還決定于它所依賴的東東是否變化。

用好依賴將大大提高我們使用緩存的效果,本節(jié)講解yii2緩存的5種依賴方式。

還是先列某

yiicachingDbDependency

yiicachingExpressionDependency

yiicachingFileDependency

yiicachingTagDependency

yiicachingChainedDependency

begin...

DbDependency

我們可以將SQL語(yǔ)句直接作為依賴條件。當(dāng)數(shù)據(jù)庫(kù)查詢出的內(nèi)容發(fā)生變化時(shí)候,緩存即會(huì)受到影響。

假設(shè)我當(dāng)前要搜索出所有的分類信息并緩存起來(lái),每3000秒更新一次或當(dāng)分類有變化是后自動(dòng)更新,使用DbDependency我們可以輕松實(shí)現(xiàn)。

$dependency = new yiicachingDbDependency(["sql"=>"SELECT COUNT(*) FROM category"]);
$cache->add("category",function($cache){
    return Category::find()->all();
},3600,dependency);

使用緩存獲取數(shù)據(jù)

$cache->get("category");

代碼執(zhí)行后,當(dāng)超過(guò)3000秒或分類字段條數(shù)有變化,都將緩存設(shè)置為失效。該依賴的推薦為依賴?yán)飯?zhí)行的sql語(yǔ)句所損耗的資源最好小于緩存所帶來(lái)的損耗。

ExpressionDependency

指定的 PHP 表達(dá)式執(zhí)行結(jié)果發(fā)生變化,則緩存變化,這里的表達(dá)式為整個(gè)PHP,而不局限于Yii。

$dependency = new yiicachingExpressionDependency(["expression"=>"Yii::$app->request->get("id")"]);
$cache->add("hy","Hello Yii",3000,$dependency);

獲取緩存數(shù)據(jù)

$cache->get("hy");

如上面代碼,我們?cè)?000之內(nèi)使用hy都直接從緩存讀取Hello Yii,但是當(dāng)使用緩存的頁(yè)面url ?id=xx發(fā)生變化的時(shí)候則失敗,返回flase

FileDependency

將緩存和文件綁定在一起。如果文件的內(nèi)容發(fā)生變化,那么緩存將會(huì)收到影響。而Yii是根據(jù)這個(gè)文件的最后修改時(shí)間來(lái)判斷其內(nèi)容是否變化的。

依賴文件 hello.txt,其內(nèi)容為a

設(shè)置依賴

$dependency = new yiicachingFileDependency(["fileName"=>"@app/hello.txt"]);
$cache->add("hy","Hello Yii",3000,$dependency);

獲取緩存數(shù)據(jù)

$cache->get("hy");

現(xiàn)在當(dāng)我們將hello.txt 內(nèi)容改為b的時(shí)候,再次獲取緩存則失敗,返回flase。
小提示:文件路徑可以使用別名哦

TagDependency

該類依賴的意思是某個(gè)或某些緩存是否失效除了由時(shí)間決定,還有一個(gè)標(biāo)簽決定,舉例說(shuō)明

use yiicachingTagDependency;
$cache->add("abc","Hello Yii",3000,new TagDependency(["tags" => "num"]));

此刻我們?cè)O(shè)置了一個(gè)緩存abc,它依賴于標(biāo)簽num

當(dāng)我們?cè)谄渌拇a中執(zhí)行了

use yiicachingTagDependency;
TagDependency::invalidate(Yii::$app->cache, "num");

當(dāng)我們執(zhí)行TagDependency::invalidate(Yii::$app->cache, "num");時(shí),可以將與num標(biāo)簽相關(guān)的緩存設(shè)置為無(wú)效,因此當(dāng)我們?cè)俅潍@取時(shí),abc已經(jīng)失效,即便3000秒還沒(méi)有到。

ChainedDependency

一個(gè)系統(tǒng)中的數(shù)據(jù)是彼此相連的,緩存的依賴也可能出現(xiàn)多種聯(lián)系,使用TagDependency可以將一組緩存標(biāo)記為同一個(gè)標(biāo)簽,然后使用invalidate函數(shù)將這組緩存統(tǒng)一失效,但是這樣還不足以滿足千變?nèi)f化的依賴關(guān)系。

因此 ChainedDependency 出現(xiàn)了,我們可以將一系列的緩存依賴使用 ChainedDependency 組合起來(lái),這樣當(dāng)這個(gè)組合中的某個(gè)或全部依賴發(fā)生變化后,將直接影響到緩存。

現(xiàn)在我們?nèi)匀煌ㄟ^(guò)一個(gè)例子說(shuō)明,假設(shè)我們的一個(gè)緩存同時(shí)依賴于兩個(gè)依賴。

$cache = Yii::$app->cache;
$fileDependency = new yiicachingFileDependency(["fileName"=>"@app/hello.txt"]);
$sqlDependency = new yiicachingDbDependency(["sql"=>"SELECT COUNT(*) FROM category"]);

$cache->set("abc", "hello yii", 3000, new ChainedDependency([
    "dependOnAll"=>true,
    "dependencies" => [$fileDependency, $sqlDependency]
]));

這樣,當(dāng) $fileDependency$sqlDependency 中任何一個(gè)依賴發(fā)生變化后都會(huì)引起緩存的失效,這里要注意一個(gè)問(wèn)題 dependOnAll(默認(rèn)為true),當(dāng)為true時(shí),只要依賴組合中的一個(gè)發(fā)生變化則緩存失效,否則必須每個(gè)依賴都變化才會(huì)引起緩存的失效。

北哥的話

緩存是我們提供程序性能的主要手段,以上五種依賴務(wù)必記住,當(dāng)我們使用緩存的時(shí)候,優(yōu)化緩存邏輯也是我們要考慮的,如何有效的使用依賴保證因?yàn)橐蕾嚩鴰?lái)的各種延時(shí),是每個(gè)攻城獅要研究的。

原文鏈接 http://nai8.me/sapper-index.html

下面是我的小廣告,關(guān)注公眾號(hào),分享干貨

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

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

相關(guān)文章

  • 北哥大話Yii2緩存機(jī)制 - File緩存

    摘要:講的好長(zhǎng)作為北哥大話緩存機(jī)制第一篇,希望大家喜歡,為了一段日子里我會(huì)專注于分享的緩存機(jī)制。 有的兄弟一定會(huì)說(shuō),F(xiàn)ile緩存有什么好講的那?不就是一個(gè)set,然后在一個(gè)get么?那你知道的只是皮毛~ 的確如大家所說(shuō),緩存從表現(xiàn)層看就是一個(gè)set(放數(shù)據(jù)),然后再一個(gè)get(拿數(shù)據(jù)),但是請(qǐng)記住,這樣是不夠的,如果你不了解每個(gè)緩存的實(shí)現(xiàn)原理、存儲(chǔ)特點(diǎn)等等,你是無(wú)法使用對(duì)場(chǎng)景的,什么時(shí)候用F...

    cnTomato 評(píng)論0 收藏0
  • 北哥大話Yii2緩存機(jī)制 - DbCache

    摘要:數(shù)據(jù)庫(kù)緩存并不麻煩,基本用法依然符合緩存的統(tǒng)一接口,具體方法可以在里查看。會(huì)被的函數(shù)引用,該函數(shù)被和觸發(fā)。 數(shù)據(jù)庫(kù)緩存并不麻煩,基本用法依然符合yii2緩存的統(tǒng)一接口,具體方法可以在 http://nai8.me/sapper-view.ht... 里查看。 如果要啟動(dòng)數(shù)據(jù)庫(kù)緩存,必須要有一個(gè)數(shù)據(jù)庫(kù)及數(shù)據(jù)表,這些可以通過(guò)cache的配置文件完成 cache => [ class...

    PAMPANG 評(píng)論0 收藏0
  • 大話微服務(wù)架構(gòu)故障隔離及容錯(cuò)處理機(jī)制

    摘要:優(yōu)雅的服務(wù)降級(jí)微服務(wù)架構(gòu)最大的優(yōu)點(diǎn)之一就是當(dāng)組件出現(xiàn)故障時(shí),能隔離這些故障并且能做到優(yōu)雅地服務(wù)降級(jí)。 本文首先介紹微服務(wù)架構(gòu)存在的風(fēng)險(xiǎn),然后針對(duì)如何避免微服務(wù)架構(gòu)的故障,提出了多種有效的微服務(wù)架構(gòu)中的方法和技術(shù),其中例如服務(wù)降級(jí)、變更管理、健康檢查和修復(fù)、斷路器、限流器等。 目錄 1、微服務(wù)架構(gòu)的風(fēng)險(xiǎn) 2、優(yōu)雅的服務(wù)降級(jí) 3、變更管理 4、健康檢查和負(fù)載均衡 5、自我修復(fù) 6、故障轉(zhuǎn)移...

    Binguner 評(píng)論0 收藏0
  • 大話微服務(wù)架構(gòu)故障隔離及容錯(cuò)處理機(jī)制

    摘要:優(yōu)雅的服務(wù)降級(jí)微服務(wù)架構(gòu)最大的優(yōu)點(diǎn)之一就是當(dāng)組件出現(xiàn)故障時(shí),能隔離這些故障并且能做到優(yōu)雅地服務(wù)降級(jí)。 本文首先介紹微服務(wù)架構(gòu)存在的風(fēng)險(xiǎn),然后針對(duì)如何避免微服務(wù)架構(gòu)的故障,提出了多種有效的微服務(wù)架構(gòu)中的方法和技術(shù),其中例如服務(wù)降級(jí)、變更管理、健康檢查和修復(fù)、斷路器、限流器等。 目錄 1、微服務(wù)架構(gòu)的風(fēng)險(xiǎn) 2、優(yōu)雅的服務(wù)降級(jí) 3、變更管理 4、健康檢查和負(fù)載均衡 5、自我修復(fù) 6、故障轉(zhuǎn)移...

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

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

0條評(píng)論

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