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

資訊專欄INFORMATION COLUMN

Yii2性能優(yōu)化之:緩存依賴

cyqian / 2722人閱讀

摘要:因?yàn)橐蕾嚨奈募l(fā)生了變化,緩存即被失效。當(dāng)數(shù)據(jù)庫查詢出的內(nèi)容發(fā)生變化時(shí)候,緩存即會(huì)受到影響。首先還是獲取緩存組件實(shí)例化類依賴名為。同時(shí)將其過期時(shí)間設(shè)置為秒之后,最后一個(gè)參數(shù)寫上依賴。

Yii中的緩存依賴,簡(jiǎn)單來說就是將緩存和另外一個(gè)東西綁定在一起,如果另外一個(gè)東西發(fā)生變化,那么緩存也將發(fā)生變化。有點(diǎn)兒類似于JS中的觸發(fā)事件(但是也不那么像),緩存的變動(dòng)是依賴的東西所導(dǎo)致的。

依賴可以是文件、數(shù)據(jù)庫、甚至是一些表達(dá)式。功能十分強(qiáng)大。

Yii提供了5中依賴方法,我們這里介紹其中的3種常用依賴。

1、文件依賴

顧名思義就是將緩存和文件綁定在一起。如果文件的內(nèi)容發(fā)生變化,那么緩存將會(huì)收到影響。(Yii判斷的標(biāo)準(zhǔn)是文件的最后修改時(shí)間)

我們通過實(shí)例來演示一下這個(gè)過程。

1、首先獲取緩存組件

$cache = Yii::$app->cache;

2、實(shí)例化FileDependency類(其中文件依賴名字為:fileName),同時(shí)將其賦值給$dependency變量。這里,我們將緩存和yanying.txt文件做關(guān)聯(lián),如果yanying.txt內(nèi)容發(fā)生變化,那么和之對(duì)應(yīng)的緩存將失效,不能訪問。

$dependency = new yiicachingFileDependency(["fileName"=>"yanying.txt"]);

3、下面我們?cè)诰彺嬷刑砑右粋€(gè)keyfile_key,給其的值為hello world。同時(shí)將過期時(shí)間設(shè)置為3000秒,最后一個(gè)參數(shù)寫上$dependency依賴。

$cache->add("file_key","hello world",3000,$dependency);

4、在3000秒之內(nèi),我們刷新網(wǎng)頁。一直可以獲取到file_key的值為hello world

$cache->get("file_key"); // hello world

5、這時(shí),我們改變yanying.txt文件內(nèi)的值。盡管緩存并沒有過期,我們也無法獲取到緩存的值。因?yàn)橐蕾嚨奈募l(fā)生了變化,緩存即被失效。

var_dump($cache->get("file_key")); // false
2、表達(dá)式依賴

表達(dá)式依賴是將表達(dá)式運(yùn)算過后的值和緩存捆在一起形成依賴,當(dāng)表達(dá)式值發(fā)生變化時(shí)候,緩存將受到影響

1、同上獲取緩存組件

$cache = Yii::$app->cache;

2、實(shí)例化ExpressionDependency類(表達(dá)式依賴名字為:expression),同時(shí)將其賦值給$dependency變量。這里,表達(dá)式依賴不同于文件依賴,他的expression所對(duì)應(yīng)的是Yii::$app->request->get("id"),是直接get鏈接中的id值(這里的表達(dá)式是php表達(dá)式,不只限制于YII代碼)。

$dependency = new yiicachingExpressionDependency(["expression"=>"Yii::$app->request->get("id")"]);

3、下面我們?cè)诰彺嬷刑砑右粋€(gè)keyfile_key,值為hello world。同時(shí)將其過期時(shí)間設(shè)置為3000秒之后,最后一個(gè)參數(shù)寫上$dependency依賴。

$cache->add("file_key","hello world",3000,$dependency);

4、在3000秒之內(nèi),我們刷新網(wǎng)頁,同上,一直可以獲取到file_key的值為hello world。

$cache->get("file_key"); // hello world

5、這時(shí),我們改變鏈接中id的值。那么:Yii::$app->request->get("id")獲取到的值即會(huì)發(fā)生變化,則緩存失效。同時(shí)無法獲取緩存的值。

var_dump($cache->get("file_key")); // false
3、db依賴

db依賴也是實(shí)際生產(chǎn)中最常接觸的一種依賴,我們可以將SQL語句直接作為依賴條件。當(dāng)數(shù)據(jù)庫查詢出的內(nèi)容發(fā)生變化時(shí)候,緩存即會(huì)受到影響。

依此,我們可以通過此方法來判斷我們緩存的數(shù)據(jù)是否需要更新,當(dāng)數(shù)據(jù)庫有變化內(nèi)容時(shí)候,我們更新緩存。

1、首先還是獲取緩存組件

$cache = Yii::$app->cache;

2、實(shí)例化DbDependency類(db依賴名為:sql)。同時(shí)將其賦值給$dependency變量。其中sql對(duì)應(yīng)的值是直接可執(zhí)行的sql語句。

$dependency = new yiicachingDbDependency(["sql"=>"SELECT COUNT(*) FROM user"]);

3、下面我們?cè)诰彺嬷刑砑右粋€(gè)keyfile_key,值為hello world。同時(shí)將其過期時(shí)間設(shè)置為3000秒之后,最后一個(gè)參數(shù)寫上$dependency依賴。

$cache->add("file_key","hello world",3000,$dependency);

4、假設(shè)數(shù)據(jù)庫數(shù)據(jù)一直沒有發(fā)生變化,那么3000秒之內(nèi)此緩存不會(huì)發(fā)生任何變化。我們可以通過下面代碼直接獲取值hello world.

$cache->get("file_key"); // hello world

5、這時(shí),如果數(shù)據(jù)庫添加了一條新的數(shù)據(jù),那么此緩存即將失效,無法獲取。這里sql依賴判斷標(biāo)準(zhǔn)是查詢結(jié)果,我們這里使用了記錄的條數(shù),你也可以直接使用select * from table只要結(jié)果發(fā)生變化,都會(huì)影響緩存

var_dump($cache->get("file_key")); // false

這時(shí)我們也可以愉快的重新獲取數(shù)據(jù)庫值,進(jìn)行新的緩存啦。

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

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

相關(guān)文章

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

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

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

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

    cnTomato 評(píng)論0 收藏0
  • YII2通過composer優(yōu)化vendor

    摘要:本文討論通過工具安裝框架并優(yōu)化過程中遇到的問題,約定讀者對(duì)基本原理有一定了解,并且有安裝框架的實(shí)際經(jīng)驗(yàn)。這個(gè)命令是優(yōu)化包的關(guān)鍵一環(huán)。命令要謹(jǐn)慎使用。 本文討論通過composer工具安裝Yii2框架并優(yōu)化Vendor過程中遇到的問題,約定讀者對(duì)composer基本原理有一定了解,并且有安裝Yii2框架的實(shí)際經(jīng)驗(yàn)。 在Yii2社區(qū)里經(jīng)常會(huì)遇到一類問題,那就是 安裝完官方推薦的版本后1 ...

    dcr309duan 評(píng)論0 收藏0
  • Yii2性能優(yōu)化:類的延遲加載技術(shù)介紹

    摘要:據(jù)官方介紹,框架廣泛的使用了一種叫做延遲加載的技術(shù),從而達(dá)到這樣的效果。比如我們?cè)谂袛嘀?,需要?shí)例化類的時(shí)候,再去加載相應(yīng)的文件。代碼如下等于不等于優(yōu)化過后的文件效率肯定得到了提升,這個(gè)也就是類的延遲加載雛形。這就是的延遲加載了。 Yii框架號(hào)稱最高效的PHP框架,執(zhí)行效率高出其他框架很多。據(jù)官方介紹,Yii框架廣泛的使用了一種叫做延遲加載的技術(shù),從而達(dá)到這樣的效果。 下面我們就通過實(shí)...

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

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

0條評(píng)論

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