摘要:因為依賴的文件發生了變化,緩存即被失效。當數據庫查詢出的內容發生變化時候,緩存即會受到影響。首先還是獲取緩存組件實例化類依賴名為。同時將其過期時間設置為秒之后,最后一個參數寫上依賴。
Yii中的緩存依賴,簡單來說就是將緩存和另外一個東西綁定在一起,如果另外一個東西發生變化,那么緩存也將發生變化。有點兒類似于JS中的觸發事件(但是也不那么像),緩存的變動是依賴的東西所導致的。
依賴可以是文件、數據庫、甚至是一些表達式。功能十分強大。
Yii提供了5中依賴方法,我們這里介紹其中的3種常用依賴。
1、文件依賴顧名思義就是將緩存和文件綁定在一起。如果文件的內容發生變化,那么緩存將會收到影響。(Yii判斷的標準是文件的最后修改時間)
我們通過實例來演示一下這個過程。
1、首先獲取緩存組件
$cache = Yii::$app->cache;
2、實例化FileDependency類(其中文件依賴名字為:fileName),同時將其賦值給$dependency變量。這里,我們將緩存和yanying.txt文件做關聯,如果yanying.txt內容發生變化,那么和之對應的緩存將失效,不能訪問。
$dependency = new yiicachingFileDependency(["fileName"=>"yanying.txt"]);
3、下面我們在緩存中添加一個key為file_key,給其的值為hello world。同時將過期時間設置為3000秒,最后一個參數寫上$dependency依賴。
$cache->add("file_key","hello world",3000,$dependency);
4、在3000秒之內,我們刷新網頁。一直可以獲取到file_key的值為hello world。
$cache->get("file_key"); // hello world
5、這時,我們改變yanying.txt文件內的值。盡管緩存并沒有過期,我們也無法獲取到緩存的值。因為依賴的文件發生了變化,緩存即被失效。
var_dump($cache->get("file_key")); // false2、表達式依賴
表達式依賴是將表達式運算過后的值和緩存捆在一起形成依賴,當表達式值發生變化時候,緩存將受到影響
1、同上獲取緩存組件
$cache = Yii::$app->cache;
2、實例化ExpressionDependency類(表達式依賴名字為:expression),同時將其賦值給$dependency變量。這里,表達式依賴不同于文件依賴,他的expression所對應的是Yii::$app->request->get("id"),是直接get鏈接中的id值(這里的表達式是php表達式,不只限制于YII代碼)。
$dependency = new yiicachingExpressionDependency(["expression"=>"Yii::$app->request->get("id")"]);
3、下面我們在緩存中添加一個key為file_key,值為hello world。同時將其過期時間設置為3000秒之后,最后一個參數寫上$dependency依賴。
$cache->add("file_key","hello world",3000,$dependency);
4、在3000秒之內,我們刷新網頁,同上,一直可以獲取到file_key的值為hello world。
$cache->get("file_key"); // hello world
5、這時,我們改變鏈接中id的值。那么:Yii::$app->request->get("id")獲取到的值即會發生變化,則緩存失效。同時無法獲取緩存的值。
var_dump($cache->get("file_key")); // false3、db依賴
db依賴也是實際生產中最常接觸的一種依賴,我們可以將SQL語句直接作為依賴條件。當數據庫查詢出的內容發生變化時候,緩存即會受到影響。
依此,我們可以通過此方法來判斷我們緩存的數據是否需要更新,當數據庫有變化內容時候,我們更新緩存。
1、首先還是獲取緩存組件
$cache = Yii::$app->cache;
2、實例化DbDependency類(db依賴名為:sql)。同時將其賦值給$dependency變量。其中sql對應的值是直接可執行的sql語句。
$dependency = new yiicachingDbDependency(["sql"=>"SELECT COUNT(*) FROM user"]);
3、下面我們在緩存中添加一個key為file_key,值為hello world。同時將其過期時間設置為3000秒之后,最后一個參數寫上$dependency依賴。
$cache->add("file_key","hello world",3000,$dependency);
4、假設數據庫數據一直沒有發生變化,那么3000秒之內此緩存不會發生任何變化。我們可以通過下面代碼直接獲取值hello world.
$cache->get("file_key"); // hello world
5、這時,如果數據庫添加了一條新的數據,那么此緩存即將失效,無法獲取。這里sql依賴判斷標準是查詢結果,我們這里使用了記錄的條數,你也可以直接使用select * from table只要結果發生變化,都會影響緩存
var_dump($cache->get("file_key")); // false
這時我們也可以愉快的重新獲取數據庫值,進行新的緩存啦。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30434.html
摘要:我們都知道,的緩存是支持依賴的,就是我們設置的緩存是否失效除了過期時間還決定于它所依賴的東東是否變化。用好依賴將大大提高我們使用緩存的效果,本節講解緩存的種依賴方式。現在我們仍然通過一個例子說明,假設我們的一個緩存同時依賴于兩個依賴。 我們都知道,yii2的緩存是支持依賴的,就是我們設置的緩存是否失效除了過期時間還決定于它所依賴的東東是否變化。 用好依賴將大大提高我們使用緩存的效果,本...
摘要:講的好長作為北哥大話緩存機制第一篇,希望大家喜歡,為了一段日子里我會專注于分享的緩存機制。 有的兄弟一定會說,File緩存有什么好講的那?不就是一個set,然后在一個get么?那你知道的只是皮毛~ 的確如大家所說,緩存從表現層看就是一個set(放數據),然后再一個get(拿數據),但是請記住,這樣是不夠的,如果你不了解每個緩存的實現原理、存儲特點等等,你是無法使用對場景的,什么時候用F...
摘要:本文討論通過工具安裝框架并優化過程中遇到的問題,約定讀者對基本原理有一定了解,并且有安裝框架的實際經驗。這個命令是優化包的關鍵一環。命令要謹慎使用。 本文討論通過composer工具安裝Yii2框架并優化Vendor過程中遇到的問題,約定讀者對composer基本原理有一定了解,并且有安裝Yii2框架的實際經驗。 在Yii2社區里經常會遇到一類問題,那就是 安裝完官方推薦的版本后1 ...
摘要:據官方介紹,框架廣泛的使用了一種叫做延遲加載的技術,從而達到這樣的效果。比如我們在判斷中,需要實例化類的時候,再去加載相應的文件。代碼如下等于不等于優化過后的文件效率肯定得到了提升,這個也就是類的延遲加載雛形。這就是的延遲加載了。 Yii框架號稱最高效的PHP框架,執行效率高出其他框架很多。據官方介紹,Yii框架廣泛的使用了一種叫做延遲加載的技術,從而達到這樣的效果。 下面我們就通過實...
閱讀 1033·2023-04-26 02:26
閱讀 2143·2021-09-26 10:16
閱讀 1552·2019-08-30 12:57
閱讀 3466·2019-08-29 16:10
閱讀 3221·2019-08-29 13:47
閱讀 1188·2019-08-29 13:12
閱讀 2139·2019-08-29 11:11
閱讀 1336·2019-08-26 13:28