摘要:因?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è)key為file_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")); // false2、表達(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è)key為file_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")); // false3、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è)key為file_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
摘要:我們都知道,的緩存是支持依賴的,就是我們?cè)O(shè)置的緩存是否失效除了過期時(shí)間還決定于它所依賴的東東是否變化。用好依賴將大大提高我們使用緩存的效果,本節(jié)講解緩存的種依賴方式?,F(xiàn)在我們?nèi)匀煌ㄟ^一個(gè)例子說明,假設(shè)我們的一個(gè)緩存同時(shí)依賴于兩個(gè)依賴。 我們都知道,yii2的緩存是支持依賴的,就是我們?cè)O(shè)置的緩存是否失效除了過期時(shí)間還決定于它所依賴的東東是否變化。 用好依賴將大大提高我們使用緩存的效果,本...
摘要:講的好長(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...
摘要:本文討論通過工具安裝框架并優(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 ...
摘要:據(jù)官方介紹,框架廣泛的使用了一種叫做延遲加載的技術(shù),從而達(dá)到這樣的效果。比如我們?cè)谂袛嘀?,需要?shí)例化類的時(shí)候,再去加載相應(yīng)的文件。代碼如下等于不等于優(yōu)化過后的文件效率肯定得到了提升,這個(gè)也就是類的延遲加載雛形。這就是的延遲加載了。 Yii框架號(hào)稱最高效的PHP框架,執(zhí)行效率高出其他框架很多。據(jù)官方介紹,Yii框架廣泛的使用了一種叫做延遲加載的技術(shù),從而達(dá)到這樣的效果。 下面我們就通過實(shí)...
閱讀 1041·2023-04-26 02:26
閱讀 2152·2021-09-26 10:16
閱讀 1557·2019-08-30 12:57
閱讀 3471·2019-08-29 16:10
閱讀 3225·2019-08-29 13:47
閱讀 1191·2019-08-29 13:12
閱讀 2143·2019-08-29 11:11
閱讀 1341·2019-08-26 13:28