亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

深入解析PHP的Yii框架中的緩存功能

2024-08-30 19:06:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

數(shù)據(jù)緩存是指將一些 PHP 變量存儲(chǔ)到緩存中,使用時(shí)再?gòu)木彺嬷腥』?。它也是更高?jí)緩存特性的基礎(chǔ),例如查詢緩存和內(nèi)容緩存。

如下代碼是一個(gè)典型的數(shù)據(jù)緩存使用模式。其中 $cache 指向緩存組件:

  1. // 嘗試從緩存中取回 $data  
  2.  
  3. $data = $cache->get($key); 
  4.  
  5. if ($data === false) { 
  6.  
  7.   // $data 在緩存中沒(méi)有找到,則重新計(jì)算它的值 
  8.  
  9.  //Vevb.com 
  10.  
  11.   // 將 $data 存放到緩存供下次使用 
  12.  
  13.   $cache->set($key$data); 
  14.  
  15. } 
  16.  
  17. // 這兒 $data 可以使用了。 

緩存組件

數(shù)據(jù)緩存需要緩存組件提供支持,它代表各種緩存存儲(chǔ)器,例如內(nèi)存,文件,數(shù)據(jù)庫(kù)。

緩存組件通常注冊(cè)為應(yīng)用程序組件,這樣它們就可以在全局進(jìn)行配置與訪問(wèn)。如下代碼演示了如何配置應(yīng)用程序組件 cache 使用兩個(gè) memcached 服務(wù)器:

  1. 'components' => [ 
  2.  
  3.   'cache' => [ 
  4.  
  5.     'class' => 'yii/caching/MemCache'
  6.  
  7.     'servers' => [ 
  8.  
  9.       [ 
  10.  
  11.         'host' => 'server1'
  12.  
  13.         'port' => 11211, 
  14.  
  15.         'weight' => 100, 
  16.  
  17.       ], 
  18.  
  19.       [ 
  20.  
  21.         'host' => 'server2'
  22.  
  23.         'port' => 11211, 
  24.  
  25.         'weight' => 50, 
  26.  
  27.       ], 
  28.  
  29.     ], 
  30.  
  31.   ], 
  32.  
  33. ], 

然后就可以通過(guò) Yii::$app->cache 訪問(wèn)上面的緩存組件了。

由于所有緩存組件都支持同樣的一系列 API ,并不需要修改使用緩存的業(yè)務(wù)代碼就能直接替換為其他底層緩存組件,只需在應(yīng)用配置中重新配置一下就可以。例如,你可以將上述配置修改為使用 yii/caching/ApcCache:

  1. 'components' => [ 
  2.  
  3.   'cache' => [ 
  4.  
  5.     'class' => 'yii/caching/ApcCache'
  6.  
  7.   ], 
  8.  
  9. ], 

Tip: 你可以注冊(cè)多個(gè)緩存組件,很多依賴緩存的類默認(rèn)調(diào)用名為 cache 的組件(例如 yii/web/UrlManager)。

支持的緩存存儲(chǔ)器

Yii 支持一系列緩存存儲(chǔ)器,概況如下:

yii/caching/ApcCache:使用 PHP APC 擴(kuò)展。這個(gè)選項(xiàng)可以認(rèn)為是集中式應(yīng)用程序環(huán)境中(例如:?jiǎn)我环?wù)器,沒(méi)有獨(dú)立的負(fù)載均衡器等)最快的緩存方案。

yii/caching/DbCache:使用一個(gè)數(shù)據(jù)庫(kù)的表存儲(chǔ)緩存數(shù)據(jù)。要使用這個(gè)緩存,你必須創(chuàng)建一個(gè)與 yii/caching/DbCache::cacheTable 對(duì)應(yīng)的表。

yii/caching/DummyCache: 僅作為一個(gè)緩存占位符,不實(shí)現(xiàn)任何真正的緩存功能。這個(gè)組件的目的是為了簡(jiǎn)化那些需要查詢緩存有效性的代碼。例如,在開(kāi)發(fā)中如果服務(wù)器沒(méi)有實(shí)際的緩存支持,用它配置一個(gè)緩存組件。一個(gè)真正的緩存服務(wù)啟用后,可以再切換為使用相應(yīng)的緩存組件。兩種條件下你都可以使用同樣的代碼 Yii::$app->cache->get($key) 嘗試從緩存中取回?cái)?shù)據(jù)而不用擔(dān)心 Yii::$app->cache 可能是 null。

yii/caching/FileCache:使用標(biāo)準(zhǔn)文件存儲(chǔ)緩存數(shù)據(jù)。這個(gè)特別適用于緩存大塊數(shù)據(jù),例如一個(gè)整頁(yè)的內(nèi)容。

yii/caching/MemCache:使用 PHP memcache 和 memcached 擴(kuò)展。這個(gè)選項(xiàng)被看作分布式應(yīng)用環(huán)境中(例如:多臺(tái)服務(wù)器,有負(fù)載均衡等)最快的緩存方案。

yii/redis/Cache:實(shí)現(xiàn)了一個(gè)基于 Redis 鍵值對(duì)存儲(chǔ)器的緩存組件(需要 redis 2.6.12 及以上版本的支持 )。

yii/caching/WinCache:使用 PHP WinCache(另可參考)擴(kuò)展.

yii/caching/XCache:使用 PHP XCache擴(kuò)展。

yii/caching/ZendDataCache:使用 Zend Data Cache 作為底層緩存媒介。

Tip: 你可以在同一個(gè)應(yīng)用程序中使用不同的緩存存儲(chǔ)器。一個(gè)常見(jiàn)的策略是使用基于內(nèi)存的緩存存儲(chǔ)器存儲(chǔ)小而常用的數(shù)據(jù)(例如:統(tǒng)計(jì)數(shù)據(jù)),使用基于文件或數(shù)據(jù)庫(kù)的緩存存儲(chǔ)器存儲(chǔ)大而不太常用的數(shù)據(jù)(例如:網(wǎng)頁(yè)內(nèi)容)。

緩存 API

所有緩存組件都有同樣的基類 yii/caching/Cache ,因此都支持如下 API:

yii/caching/Cache::get():通過(guò)一個(gè)指定的鍵(key)從緩存中取回一項(xiàng)數(shù)據(jù)。如果該項(xiàng)數(shù)據(jù)不存在于緩存中或者已經(jīng)過(guò)期/失效,則返回值 false。

yii/caching/Cache::set():將一項(xiàng)數(shù)據(jù)指定一個(gè)鍵,存放到緩存中。

yii/caching/Cache::add():如果緩存中未找到該鍵,則將指定數(shù)據(jù)存放到緩存中。

yii/caching/Cache::mget():通過(guò)指定的多個(gè)鍵從緩存中取回多項(xiàng)數(shù)據(jù)。

yii/caching/Cache::mset():將多項(xiàng)數(shù)據(jù)存儲(chǔ)到緩存中,每項(xiàng)數(shù)據(jù)對(duì)應(yīng)一個(gè)鍵。

yii/caching/Cache::madd():將多項(xiàng)數(shù)據(jù)存儲(chǔ)到緩存中,每項(xiàng)數(shù)據(jù)對(duì)應(yīng)一個(gè)鍵。如果某個(gè)鍵已經(jīng)存在于緩存中,則該項(xiàng)數(shù)據(jù)會(huì)被跳過(guò)。

yii/caching/Cache::exists():返回一個(gè)值,指明某個(gè)鍵是否存在于緩存中。

yii/caching/Cache::delete():通過(guò)一個(gè)鍵,刪除緩存中對(duì)應(yīng)的值。

yii/caching/Cache::flush():刪除緩存中的所有數(shù)據(jù)。

有些緩存存儲(chǔ)器如 MemCache,APC 支持以批量模式取回緩存值,這樣可以節(jié)省取回緩存數(shù)據(jù)的開(kāi)支。 yii/caching/Cache::mget() 和 yii/caching/Cache::madd() API提供對(duì)該特性的支持。如果底層緩存存儲(chǔ)器不支持該特性,Yii 也會(huì)模擬實(shí)現(xiàn)。

由于 yii/caching/Cache 實(shí)現(xiàn)了 PHP ArrayAccess 接口,緩存組件也可以像數(shù)組那樣使用,下面是幾個(gè)例子:

  1. $cache['var1'] = $value1// 等價(jià)于: $cache->set('var1', $value1); 
  2.  
  3. $value2 = $cache['var2']; // 等價(jià)于: $value2 = $cache->get('var2'); 

緩存鍵

存儲(chǔ)在緩存中的每項(xiàng)數(shù)據(jù)都通過(guò)鍵作唯一識(shí)別。當(dāng)你在緩存中存儲(chǔ)一項(xiàng)數(shù)據(jù)時(shí),必須為它指定一個(gè)鍵,稍后從緩存中取回?cái)?shù)據(jù)時(shí),也需要提供相應(yīng)的鍵。

你可以使用一個(gè)字符串或者任意值作為一個(gè)緩存鍵。當(dāng)鍵不是一個(gè)字符串時(shí),它將會(huì)自動(dòng)被序列化為一個(gè)字符串。

定義一個(gè)緩存鍵常見(jiàn)的一個(gè)策略就是在一個(gè)數(shù)組中包含所有的決定性因素。例如,yii/db/Schema 使用如下鍵存儲(chǔ)一個(gè)數(shù)據(jù)表的結(jié)構(gòu)信息。

  1.  
  2.   __CLASS__,       // 結(jié)構(gòu)類名 
  3.  
  4.   $this->db->dsn,     // 數(shù)據(jù)源名稱 
  5.  
  6.   $this->db->username,  // 數(shù)據(jù)庫(kù)登錄用戶名 
  7.  
  8.   $name,         // 表名 
  9.  
  10. ]; 

如你所見(jiàn),該鍵包含了可唯一指定一個(gè)數(shù)據(jù)庫(kù)表所需的所有必要信息。

當(dāng)同一個(gè)緩存存儲(chǔ)器被用于多個(gè)不同的應(yīng)用時(shí),應(yīng)該為每個(gè)應(yīng)用指定一個(gè)唯一的緩存鍵前綴以避免緩存鍵沖突。可以通過(guò)配置 yii/caching/Cache::keyPrefix 屬性實(shí)現(xiàn)。例如,在應(yīng)用配置中可以編寫(xiě)如下代碼:

  1. 'components' => [ 
  2.  
  3.   'cache' => [ 
  4.  
  5.     'class' => 'yii/caching/ApcCache'
  6.  
  7.     'keyPrefix' => 'myapp',    // 唯一鍵前綴 
  8.  
  9.   ], 
  10.  
  11. ], 

為了確?;ネㄐ?,此處只能使用字母和數(shù)字。

緩存過(guò)期

默認(rèn)情況下,緩存中的數(shù)據(jù)會(huì)永久存留,除非它被某些緩存策略強(qiáng)制移除(例如:緩存空間已滿,最老的數(shù)據(jù)會(huì)被移除)。要改變此特性,你可以在調(diào)用 yii/caching/Cache::set() 存儲(chǔ)一項(xiàng)數(shù)據(jù)時(shí)提供一個(gè)過(guò)期時(shí)間參數(shù)。該參數(shù)代表這項(xiàng)數(shù)據(jù)在緩存中可保持有效多少秒。當(dāng)你調(diào)用 yii/caching/Cache::get() 取回?cái)?shù)據(jù)時(shí),如果它已經(jīng)過(guò)了超時(shí)時(shí)間,該方法將返回 false,表明在緩存中找不到這項(xiàng)數(shù)據(jù)。例如:

  1. // 將數(shù)據(jù)在緩存中保留 45 秒 
  2.  
  3. $cache->set($key$data, 45); 
  4.  
  5. sleep(50); 
  6.  
  7. $data = $cache->get($key); 
  8.  
  9. if ($data === false) { 
  10.  
  11.   // $data 已過(guò)期,或者在緩存中找不到 
  12.  

緩存依賴

除了超時(shí)設(shè)置,緩存數(shù)據(jù)還可能受到緩存依賴的影響而失效。例如,yii/caching/FileDependency 代表對(duì)一個(gè)文件修改時(shí)間的依賴。這個(gè)依賴條件發(fā)生變化也就意味著相應(yīng)的文件已經(jīng)被修改。因此,緩存中任何過(guò)期的文件內(nèi)容都應(yīng)該被置為失效狀態(tài),對(duì) yii/caching/Cache::get() 的調(diào)用都應(yīng)該返回 false。

緩存依賴用 yii/caching/Dependency 的派生類所表示。當(dāng)調(diào)用 yii/caching/Cache::set() 在緩存中存儲(chǔ)一項(xiàng)數(shù)據(jù)時(shí),可以同時(shí)傳遞一個(gè)關(guān)聯(lián)的緩存依賴對(duì)象。例如:

  1. // 創(chuàng)建一個(gè)對(duì) example.txt 文件修改時(shí)間的緩存依賴 
  2.  
  3. $dependency = new /yii/caching/FileDependency(['fileName' => 'example.txt']); 
  4.  
  5. // 緩存數(shù)據(jù)將在30秒后超時(shí) 
  6.  
  7. // 如果 example.txt 被修改,它也可能被更早地置為失效狀態(tài)。 
  8.  
  9. $cache->set($key$data, 30, $dependency); 
  10. //Vevb.com 
  11.  
  12. // 緩存會(huì)檢查數(shù)據(jù)是否已超時(shí)。 
  13.  
  14. // 它還會(huì)檢查關(guān)聯(lián)的依賴是否已變化。 
  15.  
  16. // 符合任何一個(gè)條件時(shí)都會(huì)返回 false。 
  17.  
  18. $data = $cache->get($key); 

下面是可用的緩存依賴的概況:

yii/caching/ChainedDependency:如果依賴鏈上任何一個(gè)依賴產(chǎn)生變化,則依賴改變。

yii/caching/DbDependency:如果指定 SQL 語(yǔ)句的查詢結(jié)果發(fā)生了變化,則依賴改變。

yii/caching/ExpressionDependency:如果指定的 PHP 表達(dá)式執(zhí)行結(jié)果發(fā)生變化,則依賴改變。

yii/caching/FileDependency:如果文件的最后修改時(shí)間發(fā)生變化,則依賴改變。

yii/caching/GroupDependency:將一項(xiàng)緩存數(shù)據(jù)標(biāo)記到一個(gè)組名,你可以通過(guò)調(diào)用 yii/caching/GroupDependency::invalidate() 一次性將相同組名的緩存全部置為失效狀態(tài)。

查詢緩存

查詢緩存是一個(gè)建立在數(shù)據(jù)緩存之上的特殊緩存特性。它用于緩存數(shù)據(jù)庫(kù)查詢的結(jié)果。

查詢緩存需要一個(gè) yii/db/Connection 和一個(gè)有效的 cache 應(yīng)用組件。查詢緩存的基本用法如下,假設(shè) $db 是一個(gè) yii/db/Connection 實(shí)例:

  1. $duration = 60;   // 緩存查詢結(jié)果60秒 
  2.  
  3. $dependency = ...; // 可選的緩存依賴 
  4.  
  5. $db->beginCache($duration$dependency); 
  6.  
  7. // ...這兒執(zhí)行數(shù)據(jù)庫(kù)查詢... 
  8.  
  9. $db->endCache(); 

如你所見(jiàn),beginCache() 和 endCache() 中間的任何查詢結(jié)果都會(huì)被緩存起來(lái)。如果緩存中找到了同樣查詢的結(jié)果,則查詢會(huì)被跳過(guò),直接從緩存中提取結(jié)果。

查詢緩存可以用于 ActiveRecord 和 DAO。

Info: 有些 DBMS (例如:MySQL)也支持?jǐn)?shù)據(jù)庫(kù)服務(wù)器端的查詢緩存。你可以選擇使用任一查詢緩存機(jī)制。上文所述的查詢緩存的好處在于你可以指定更靈活的緩存依賴因此可能更加高效。

配置

查詢緩存有兩個(gè)通過(guò) yii/db/Connection 設(shè)置的配置項(xiàng):

yii/db/Connection::queryCacheDuration: 查詢結(jié)果在緩存中的有效期,以秒表示。如果在調(diào)用 yii/db/Connection::beginCache() 時(shí)傳遞了一個(gè)顯式的時(shí)值參數(shù),則配置中的有效期時(shí)值會(huì)被覆蓋。

yii/db/Connection::queryCache: 緩存應(yīng)用組件的 ID。默認(rèn)為 'cache'。只有在設(shè)置了一個(gè)有效的緩存應(yīng)用組件時(shí),查詢緩存才會(huì)有效。

限制條件

當(dāng)查詢結(jié)果中含有資源句柄時(shí),查詢緩存無(wú)法使用。例如,在有些 DBMS 中使用了 BLOB 列的時(shí)候,緩存結(jié)果會(huì)為該數(shù)據(jù)列返回一個(gè)資源句柄。

有些緩存存儲(chǔ)器有大小限制。例如,memcache 限制每條數(shù)據(jù)最大為 1MB。因此,如果查詢結(jié)果的大小超出了該限制,則會(huì)導(dǎo)致緩存失敗。

片段緩存

片段緩存指的是緩存頁(yè)面內(nèi)容中的某個(gè)片段。例如,一個(gè)頁(yè)面顯示了逐年銷售額的摘要表格,可以把表格緩存下來(lái),以消除每次請(qǐng)求都要重新生成表格的耗時(shí)。片段緩存是基于數(shù)據(jù)緩存實(shí)現(xiàn)的。

在視圖中使用以下結(jié)構(gòu)啟用片段緩存:

  1. if ($this->beginCache($id)) { 
  2.  
  3.   // ... 在此生成內(nèi)容 ... 
  4.  
  5.   $this->endCache(); 
  6.  

調(diào)用 yii/base/View::beginCache() 和 yii/base/View::endCache() 方法包裹內(nèi)容生成邏輯。如果緩存中存在該內(nèi)容,yii/base/View::beginCache() 方法將渲染內(nèi)容并返回 false,因此將跳過(guò)內(nèi)容生成邏輯。否則,內(nèi)容生成邏輯被執(zhí)行,一直執(zhí)行到 yii/base/View::endCache() 時(shí),生成的內(nèi)容將被捕獲并存儲(chǔ)在緩存中。

和[數(shù)據(jù)緩存]一樣,每個(gè)片段緩存也需要全局唯一的 $id 標(biāo)記。

緩存選項(xiàng)

如果要為片段緩存指定額外配置項(xiàng),請(qǐng)通過(guò)向 yii/base/View::beginCache() 方法第二個(gè)參數(shù)傳遞配置數(shù)組。在框架內(nèi)部,該數(shù)組將被用來(lái)配置一個(gè) yii/widget/FragmentCache 小部件用以實(shí)現(xiàn)片段緩存功能。

過(guò)期時(shí)間(duration)

或許片段緩存中最常用的一個(gè)配置選項(xiàng)就是 yii/widgets/FragmentCache::duration 了。它指定了內(nèi)容被緩存的秒數(shù)。以下代碼緩存內(nèi)容最多一小時(shí):

  1. if ($this->beginCache($id, ['duration' => 3600])) { 
  2.  
  3.   // ... 在此生成內(nèi)容 ... 
  4.  
  5.   $this->endCache(); 
  6.  

如果該選項(xiàng)未設(shè)置,則默認(rèn)為 0,永不過(guò)期。

依賴

和[數(shù)據(jù)緩存]一樣,片段緩存的內(nèi)容一樣可以設(shè)置緩存依賴。例如一段被緩存的文章,是否重新緩存取決于它是否被修改過(guò)。

通過(guò)設(shè)置 yii/widgets/FragmentCache::dependency 選項(xiàng)來(lái)指定依賴,該選項(xiàng)的值可以是一個(gè) yii/caching/Dependency 類的派生類,也可以是創(chuàng)建緩存對(duì)象的配置數(shù)組。以下代碼指定了一個(gè)片段緩存,它依賴于 update_at 字段是否被更改過(guò)的。

  1. $dependency = [ 
  2.  
  3.   'class' => 'yii/caching/DbDependency'
  4.  
  5.   'sql' => 'SELECT MAX(updated_at) FROM post'
  6.  
  7. ];  
  8.  
  9. if ($this->beginCache($id, ['dependency' => $dependency])) {  
  10.  
  11.   // ... 在此生成內(nèi)容 ...  
  12.  
  13.   $this->endCache(); 
  14.  

變化

緩存的內(nèi)容可能需要根據(jù)一些參數(shù)的更改而變化。例如一個(gè) Web 應(yīng)用支持多語(yǔ)言,同一段視圖代碼也許需要生成多個(gè)語(yǔ)言的內(nèi)容。因此可以設(shè)置緩存根據(jù)應(yīng)用當(dāng)前語(yǔ)言而變化。

通過(guò)設(shè)置 yii/widgets/FragmentCache::variations 選項(xiàng)來(lái)指定變化,該選項(xiàng)的值應(yīng)該是一個(gè)標(biāo)量,每個(gè)標(biāo)量代表不同的變化系數(shù)。例如設(shè)置緩存根據(jù)當(dāng)前語(yǔ)言而變化可以用以下代碼:

  1. if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) { 
  2.  
  3.   // ... 在此生成內(nèi)容 ... 
  4.  
  5.   $this->endCache(); 
  6.  

開(kāi)關(guān)

有時(shí)你可能只想在特定條件下開(kāi)啟片段緩存。例如,一個(gè)顯示表單的頁(yè)面,可能只需要在初次請(qǐng)求時(shí)緩存表單(通過(guò) GET 請(qǐng)求)。隨后請(qǐng)求所顯示(通過(guò) POST 請(qǐng)求)的表單不該使用緩存,因?yàn)榇藭r(shí)表單中可能包含用戶輸入內(nèi)容。鑒于此種情況,可以使用 yii/widgets/FragmentCache::enabled 選項(xiàng)來(lái)指定緩存開(kāi)關(guān),如下所示:

  1. if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) { 
  2.  
  3.   // ... 在此生成內(nèi)容 ... 
  4.  
  5.   $this->endCache(); 
  6.  

緩存嵌套

片段緩存可以被嵌套使用。一個(gè)片段緩存可以被另一個(gè)包裹。例如,評(píng)論被緩存在里層,同時(shí)整個(gè)評(píng)論的片段又被緩存在外層的文章中。以下代碼展示了片段緩存的嵌套使用:

  1. if ($this->beginCache($id1)) { 
  2.  
  3.   // ...在此生成內(nèi)容... 
  4.  
  5.   if ($this->beginCache($id2$options2)) { 
  6.  
  7.     // ...在此生成內(nèi)容... 
  8.  
  9.     $this->endCache(); 
  10.  
  11.   } 
  12.  
  13.   // ...在此生成內(nèi)容... 
  14.  
  15.   $this->endCache(); 
  16.  

可以為嵌套的緩存設(shè)置不同的配置項(xiàng)。例如,內(nèi)層緩存和外層緩存使用不同的過(guò)期時(shí)間。甚至當(dāng)外層緩存的數(shù)據(jù)過(guò)期失效了,內(nèi)層緩存仍然可能提供有效的片段緩存數(shù)據(jù)。但是,反之則不然。如果外層片段緩存沒(méi)有過(guò)期而被視為有效,此時(shí)即使內(nèi)層片段緩存已經(jīng)失效,它也將繼續(xù)提供同樣的緩存副本。因此,你必須謹(jǐn)慎處理緩存嵌套中的過(guò)期時(shí)間和依賴,否則外層的片段很有可能返回的是不符合你預(yù)期的失效數(shù)據(jù)。

譯注:外層的失效時(shí)間應(yīng)該短于內(nèi)層,外層的依賴條件應(yīng)該低于內(nèi)層,以確保最小的片段,返回的是最新的數(shù)據(jù)。

動(dòng)態(tài)內(nèi)容

使用片段緩存時(shí),可能會(huì)遇到一大段較為靜態(tài)的內(nèi)容中有少許動(dòng)態(tài)內(nèi)容的情況。例如,一個(gè)顯示著菜單欄和當(dāng)前用戶名的頁(yè)面頭部。還有一種可能是緩存的內(nèi)容可能包含每次請(qǐng)求都需要執(zhí)行的 PHP 代碼(例如注冊(cè)資源包的代碼)。這兩個(gè)問(wèn)題都可以使用動(dòng)態(tài)內(nèi)容功能解決。

動(dòng)態(tài)內(nèi)容的意思是這部分輸出的內(nèi)容不該被緩存,即便是它被包裹在片段緩存中。為了使內(nèi)容保持動(dòng)態(tài),每次請(qǐng)求都執(zhí)行 PHP 代碼生成,即使這些代碼已經(jīng)被緩存了。

可以在片段緩存中調(diào)用 yii/base/View::renderDynamic() 去插入動(dòng)態(tài)內(nèi)容,如下所示:

  1. if ($this->beginCache($id1)) { 
  2.  
  3.   // ...在此生成內(nèi)容... 
  4.  
  5.   echo $this->renderDynamic('return Yii::$app->user->identity->name;'); 
  6.  
  7.   // ...在此生成內(nèi)容... 
  8.  
  9.   $this->endCache(); 
  10.  

yii/base/View::renderDynamic() 方法接受一段 PHP 代碼作為參數(shù)。代碼的返回值被看作是動(dòng)態(tài)內(nèi)容。這段代碼將在每次請(qǐng)求時(shí)都執(zhí)行,無(wú)論其外層的片段緩存是否被存儲(chǔ)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
久久久久久国产精品日本| 欧美日本视频在线观看| 色综合久久五月| 亚洲国产中文字幕在线观看| 亚洲天堂色网站| 一区二区日韩| 久久久久久久久影院| 亚洲精品一区二区在线| 日韩欧美美女在线观看| 日韩精品诱惑一区?区三区| 欧美久久高跟鞋激| 91精品国产高清91久久久久久| 蜜桃久久久久| 九色丨蝌蚪丨成人| 欧美国产日韩在线视频| 国产精品欧美一区二区| 毛片在线视频观看| 狠狠v欧美ⅴ日韩v亚洲v大胸| 韩国v欧美v日本v亚洲| 欧美激情xxxxx| 99久久久无码国产精品性色戒| 欧美国产精品人人做人人爱| 在线视频国内自拍亚洲视频| 日韩一区二区三区在线看| 久久久久久激情| 国产亚洲欧美日韩精品| 一级做a爰片久久毛片16| 一区二区三区午夜| 免费观看美女裸体网站| 国产精品久久一卡二卡| 久久伊人一区二区| 男人在线资源站| 福利视频大全| 亚洲综合爱爱久久网| 黄色精品一区二区| 国产精品亚洲第一区在线暖暖韩国| 欧美成人精品福利网站| 亚洲天堂电影| 国产真人真事毛片| 亚洲天堂日韩av| 亚洲小说区图片区都市| 国内精品久久久久久久| 欧美激情福利视频在线观看免费| 日韩欧美少妇| 日本成人不卡| 成人两性免费视频| 天堂视频在线免费观看| 国产91精品视频在线观看| 日韩三级在线观看| 97视频热人人精品免费| 久久er热在这里只有精品66| 51漫画成人app入口| 91精品国产免费久久久久久| 久久久久久久久艹| 国产精品入口日韩视频大尺度| 国产欧美精品在线| 黄色一级视频在线观看| 亚洲无限乱码一二三四麻| 中文字幕有码热在线视频| 国产999在线| 不卡一区二区三区四区| 亚洲影视综合| 色婷婷国产精品| 免费国产h视频在线观看86| 欧美中文在线观看国产| 成人免费观看男女羞羞视频| 亚洲免费小视频| 9999久久久久| 国产午夜视频在线播放| 欧美黑人孕妇孕交| 精品视频免费在线| 国产精品999视频| 欧美日韩久久久久久| 51精品国产人成在线观看| www.色国产| 欧美日韩国产精品自在自线| 亚洲天堂中文字幕| 日本另类视频| 成人亚洲一区二区三区| 欧美日韩中国免费专区在线看| 国产欧美欧美| 水蜜桃一区二区三区| 国产精品成人**免费视频| 欧美精品xx| 四虎影院在线播放| 国产精品狠色婷| 成人区精品一区二区不卡| 少妇精品一区二区| 亚洲精品一区二区三区四区五区| 四虎成人精品一区二区免费网站| 国产精品日日爱| 秋霞一区二区| 久久久久国色av免费看影院| caopo在线| 国产精品午夜春色av| 日本一二三区在线观看| 黑人巨大精品欧美| 欧美aⅴ99久久黑人专区| 国产午夜精品久久久久久久久| 思思99re6国产在线播放| 欧美日韩1234| 亚洲精品ady| 夜夜嗨av一区二区三区网站四季av| 国产一区久久| 免费高清在线视频一区·| 999一区二区三区| 欧美精品777| www.射射射| 国产在线观看黄| 老司机深夜福利网站| 欧美另类在线视频| 欧洲精品在线一区| 天天操天天干天天操| 成人亚洲免费视频| 国产成人久久精品一区二区三区| 999人在线精品播放视频| 久久这里只有精品23| 国产传媒久久文化传媒| 欧美日韩xxxx| 能在线观看的av| 国产亚洲欧美视频| 在线观看免费视频黄| 欧美少妇网站| 国产精品美女久久久久aⅴ| 91九色网站| 国产999精品久久久影片官网| 久久久久国产精品区片区无码| 欧美一区二区三区成人| 黄色网址电影| 中文字幕日韩精品在线观看| 免费亚色电影在线观看| 久草免费在线观看视频| 老牛精品亚洲成av人片| 女性隐私黄www网站视频| 日韩欧美在线123| 日本精品久久久久| 欧美图区在线视频| 久久久国产精品黄毛片| 欧洲av一区二区三区| 日韩视频1区| 欧美壮男野外gaytube| 中文字幕求饶的少妇| 国产综合18久久久久久| 国产黄色影视| 日本三级电影免费观看| 日韩精品免费视频人成| 日韩欧美中文第一页| 青青青视频在线播放| 黄色成人美女网站| 成人免费视频app| 国产精品美女午夜爽爽| 日本性高潮视频| 91成人在线网站| 日韩小视频在线播放| 亚洲欧美一区二区在线观看| 欧美1区2区3| 日韩三级在线观看视频| 精品动漫3d一区二区三区免费| 18禁网站免费无遮挡无码中文| 午夜免费播放观看在线视频| 欧美激情第三页| 久久精品国产亚洲一区二区三区| 欧美网站免费观看| 久久综合久久综合九色| 亚洲婷婷在线视频| 好吊色欧美一区二区三区视频| 色综合一区二区| 免费毛片在线不卡| 免费成人黄色| 777影院狠狠色| 五月色婷婷综合| 全亚洲最色的网站在线观看| 久久久久黄久久免费漫画| 中国 免费 av| 亚洲精品国产成人av在线| 色视频免费版高清在线观看| 福利一区二区三区四区| 97在线观看免费高清视频| 欧美在线一区二区三区四| 伊人国产在线看一| 久久久久久少妇| 九九久久精品| 45www国产精品网站| 久草资源在线观看| 欧美女v视频| 国产无套内射久久久国产| 视频一区欧美| 国产成人精品免高潮费视频| 黑人与娇小精品av专区| 久久久久久久一区二区三区| 天天干天天摸天天操| 国产亚洲一区二区三区啪| 五月激情六月综合| 特黄视频在线观看| 国产在线一级片| 草民福利视频| 欧美人成免费网站| 极品少妇一区二区三区精品视频| 亚洲午夜一区二区| 久久精品国产成人| 波多野结衣之无限发射| 在线亚洲精品福利网址导航| 日韩亚洲欧美一区二区三区| 日本电影欧美片| 人妻无码一区二区三区免费| 成人欧美一区二区三区视频xxx| 美女黄色成人网| 男女无套免费视频网站动漫| 久久香蕉av| 亚洲视频色图| 午夜av噜噜噜噜噜噜| 中文在线第一页| 亚洲成人一区二区| 久久久久久穴| 欧美色道久久88综合亚洲精品| 国产成人精品日本亚洲| 亚洲五月六月| 亚洲免费伊人电影| 日本激情小视频| 国产又粗又长又黄的视频| 狠狠操狠狠色综合网| www.男人的天堂| 国产三区在线播放| 日韩欧美综合在线视频| 三级在线观看一区二区| 在线视频一区二区三区四区| 欧美xxxx日本和非洲| 黄色的视频在线观看| 狠狠色狠狠色综合日日tαg| 欧美一区二区三区久久| 久久久久久久伊人| 久草在线免费资源站| 一区二区不卡在线视频 午夜欧美不卡在| 欧美视频在线观看 亚洲欧| 伊人影院在线观看| 国产精品久久久一区二区三区| 欧美丰满少妇xxxxx| 尤物网站在线观看| 国产小视频在线免费观看| 7777精品久久久大香线蕉小说| 精品成人国产在线观看男人呻吟| 国产成人va亚洲电影| 免费看国产精品一二区视频| 久久一二三四区| 亚洲自拍偷拍区| 538任你躁精品视频网免费| 欧美在线影院| 大片免费播放在线视频| 国产九九九视频| 欧美男女性生活在线直播观看| 97视频中文字幕| 亚洲一区成人| 无码日韩精品一区二区免费| 成人综合视频在线| 国产一区二区视频在线免费观看| 一区二区91美女张开腿让人桶| 亚洲精品大全| 成人黄色av电影| 黄色视屏免费在线观看| 国产欧美日韩最新| 99高清视频有精品视频| 中文字幕在线观看不卡视频| 久久国产露脸精品国产| 国产视频在线观看一区| 色一情一乱一乱一91av| 中文幕一区二区三区久久蜜桃| 伊人久久大香线蕉综合热线| **孕交吃奶水一级毛片| 9191久久久久久久久久久| 999精品嫩草久久久久久99| 91在线免费看片| 美女国产精品| 亚洲男女av一区二区| 国产专区在线视频| 久久综合狠狠综合久久综青草| 超碰人人爱人人| 偷拍精品福利视频导航| 色多多国产成人永久免费网站| 欧美一级全黄| 国产成人精品久久二区二区91| 欧美不卡在线观看| 久久中文字幕在线| 嗯啊主人调教在线播放视频| 欧美激情喷水| 中文字幕美女视频| 色综合老司机第九色激情| 国产 欧美 在线| 韩国三级在线看| 麻豆精品精品国产自在97香蕉| 国产中文字幕在线视频| 国内精品99| 亚洲欧美三级伦理| 久久69国产一区二区蜜臀| 日韩专区欧美专区| 神马精品久久| 黄色网在线免费观看| 视频一区视频二区视频三区高| 日韩伦理一区二区三区av在线| 日本精品在线免费观看| 成人午夜视频福利| 在线免费观看的av| 大胆人体色综合| 亚洲日本青草视频在线怡红院| 欧美日韩在线视频免费观看| 天天综合天天综合| 亚洲狠狠丁香婷婷综合久久久| 成人性a激情免费视频| 国产综合色产在线精品| 免费久久一级欧美特大黄| 网曝91综合精品门事件在线| 日韩和的一区二在线| 国产精品99精品久久免费| 成年人性生活视频| 欧美熟妇交换久久久久久分类| 成人av中文| 超碰97人人人人人蜜桃| 亚洲黄色免费在线观看| 日本边添边摸边做边爱的第三级| 欧美一级片免费看| 日韩av一区二区在线播放| 国产在线精品播放| 亚洲人亚洲人色久| 91在线观看免费视频| 色中色综合成人| 9.1成人看片免费版| wwwwww欧美| 日韩精品中文字幕在线播放| 成人三级视频|