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

首頁 > 開發(fā) > PHP > 正文

YII Framework框架教程之緩存用法詳解

2024-05-04 23:43:52
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了YII Framework框架教程之緩存用法,結合實例形式詳細分析了Yii框架緩存的結構,原理,使用方法與相關注意事項,需要的朋友可以參考下
 

本文實例講述了YII Framework框架緩存用法。分享給大家供大家參考,具體如下:

緩存的產生原因眾所周知。于是YII作為一個高效,好用的框架,不能不支持緩存。所以YII對各種流行的緩存都提供了接口,你可以根據(jù)你的需要使用不同的緩存。

1.YII中的緩存介紹

YII中的緩存是通過組件方式定義的,具體在如下目錄

/yii_dev/yii/framework/caching# tree
.
├── CApcCache.php
├── CCache.php
├── CDbCache.php
├── CDummyCache.php
├── CEAcceleratorCache.php
├── CFileCache.php
├── CMemCache.php
├── CWinCache.php
├── CXCache.php
├── CZendDataCache.php
└── dependencies
    ├── CCacheDependency.php
    ├── CChainedCacheDependency.php
    ├── CDbCacheDependency.php
    ├── CDirectoryCacheDependency.php
    ├── CExpressionDependency.php
    ├── CFileCacheDependency.php
    └── CGlobalStateCacheDependency.php

1 directory, 17 files

官方原文解釋如下:

Yii 提供了不同的緩存組件,可以將緩存數(shù)據(jù)存儲到不同的媒介中。例如, CMemCache 組件封裝了 PHP 的 memcache 擴展并使用內存作為緩存存儲媒介。 CApcCache 組件封裝了 PHP APC 擴展; 而 CDbCache 組件會將緩存的數(shù)據(jù)存入數(shù)據(jù)庫。下面是一個可用緩存組件的列表:

CMemCache: 使用 PHP memcache 擴展.

CApcCache: 使用 PHP APC 擴展.

CXCache: 使用 PHP XCache 擴展。注意,這個是從 1.0.1 版本開始支持的。

CEAcceleratorCache: 使用 PHP EAccelerator 擴展.

CDbCache: 使用一個數(shù)據(jù)表存儲緩存數(shù)據(jù)。默認情況下,它將創(chuàng)建并使用在 runtime 目錄下的一個 SQLite3 數(shù)據(jù)庫。 你也可以通過設置其 connectionID 屬性指定一個給它使用的數(shù)據(jù)庫。

CZendDataCache: 使用 Zend Data Cache 作為后臺緩存媒介。注意,這個是從 1.0.4 版本開始支持的。

CFileCache: 使用文件存儲緩存數(shù)據(jù)。這個特別適合用于存儲大塊數(shù)據(jù)(例如頁面)。注意,這個是從 1.0.6 版本開始支持的。

CDummyCache: 目前 dummy 緩存并不實現(xiàn)緩存功能。此組件的目的是用于簡化那些需要檢查緩存可用性的代碼。 例如,在開發(fā)階段或者服務器尚未支持實際的緩存功能,我們可以使用此緩存組件。當啟用了實際的緩存支持后,我們可以切換到使用相應的緩存組件。 在這兩種情況中,我們可以使用同樣的代碼Yii::app()->cache->get($key) 獲取數(shù)據(jù)片段而不需要擔心 Yii::app()->cache 可能會是 null。此組件從 1.0.5 版開始支持。

提示: 由于所有的這些緩存組件均繼承自同樣的基類 CCache,因此無需改變使用緩存的那些代碼就可以切換到使用另一種緩存方式。

緩存可以用于不同的級別。最低級別中,我們使用緩存存儲單個數(shù)據(jù)片段,例如變量,我們將此稱為 數(shù)據(jù)緩存(data caching)。下一個級別中,我們在緩存中存儲一個由視圖腳本的一部分生成的頁面片段。 而在最高級別中,我們將整個頁面存儲在緩存中并在需要時取回。

在接下來的幾個小節(jié)中,我們會詳細講解如何在這些級別中使用緩存。

注意: 按照定義,緩存是一個不穩(wěn)定的存儲媒介。即使沒有超時,它也并不確保緩存數(shù)據(jù)一定存在。 因此,不要將緩存作為持久存儲器使用。(例如,不要使用緩存存儲 Session 數(shù)據(jù))。

2.緩存的配置和調用方式

yii中的緩存主要是通過組件的方式實現(xiàn)的,具體需要配置方式可以通過緩存的類說明進行配置。

通常是指定緩存組件的類

例如apc

'cache'=>array(  'class'=>'system.caching.CApcCache'),

memcache的配置方式可能是

* array(*   'components'=>array(*     'cache'=>array(*       'class'=>'CMemCache',*       'servers'=>array(*         array(*           'host'=>'server1',*           'port'=>11211,*           'weight'=>60,*         ),*         array(*           'host'=>'server2',*           'port'=>11211,*           'weight'=>40,*         ),*       ),*     ),*   ),* )

使用方式:

yii封裝了對不同緩存操作的方法,主要集中在CCache。CCache是所有Cache類的基類。所以配置好緩存后可以調用方式很簡單:

<?php/** * CCache is the base class for cache classes with different cache storage implementation. * * A data item can be stored in cache by calling {@link set} and be retrieved back * later by {@link get}. In both operations, a key identifying the data item is required. * An expiration time and/or a dependency can also be specified when calling {@link set}. * If the data item expires or the dependency changes, calling {@link get} will not * return back the data item. * * Note, by definition, cache does not ensure the existence of a value * even if it does not expire. Cache is not meant to be a persistent storage. * * CCache implements the interface {@link ICache} with the following methods: * <ul> * <li>{@link get} : retrieve the value with a key (if any) from cache</li> * <li>{@link set} : store the value with a key into cache</li> * <li>{@link add} : store the value only if cache does not have this key</li> * <li>{@link delete} : delete the value with the specified key from cache</li> * <li>{@link flush} : delete all values from cache</li> * </ul> * * Child classes must implement the following methods: * <ul> * <li>{@link getValue}</li> * <li>{@link setValue}</li> * <li>{@link addValue}</li> * <li>{@link deleteValue}</li> * <li>{@link flush} (optional)</li> * </ul> * * CCache also implements ArrayAccess so that it can be used like an array. * * @author Qiang Xue <qiang.xue@gmail.com> * @version $Id: CCache.php 3001 2011-02-24 16:42:44Z alexander.makarow $ * @package system.caching * @since 1.0 */abstract class CCache extends CApplicationComponent implements ICache, ArrayAccess{

根據(jù)CCache類說明可以看出,常見的緩存操作方法get,set,add,delete,flush

/** * Retrieves a value from cache with a specified key. * @param string $id a key identifying the cached value * @return mixed the value stored in cache, false if the value is not in the cache, expired or the dependency has changed. */public function get($id){  if(($value=$this->getValue($this->generateUniqueKey($id)))!==false)  {    $data=unserialize($value);    if(!is_array($data))      return false;    if(!($data[1] instanceof ICacheDependency) || !$data[1]->getHasChanged())    {      Yii::trace('Serving "'.$id.'" from cache','system.caching.'.get_class($this));      return $data[0];    }  }  return false;}/** * Retrieves multiple values from cache with the specified keys. * Some caches (such as memcache, apc) allow retrieving multiple cached values at one time, * which may improve the performance since it reduces the communication cost. * In case a cache doesn't support this feature natively, it will be simulated by this method. * @param array $ids list of keys identifying the cached values * @return array list of cached values corresponding to the specified keys. The array * is returned in terms of (key,value) pairs. * If a value is not cached or expired, the corresponding array value will be false. * @since 1.0.8 */public function mget($ids){  $uniqueIDs=array();  $results=array();  foreach($ids as $id)  {    $uniqueIDs[$id]=$this->generateUniqueKey($id);    $results[$id]=false;  }  $values=$this->getValues($uniqueIDs);  foreach($uniqueIDs as $id=>$uniqueID)  {    if(!isset($values[$uniqueID]))      continue;    $data=unserialize($values[$uniqueID]);    if(is_array($data) && (!($data[1] instanceof ICacheDependency) || !$data[1]->getHasChanged()))    {      Yii::trace('Serving "'.$id.'" from cache','system.caching.'.get_class($this));      $results[$id]=$data[0];    }  }  return $results;}/** * Stores a value identified by a key into cache. * If the cache already contains such a key, the existing value and * expiration time will be replaced with the new ones. * * @param string $id the key identifying the value to be cached * @param mixed $value the value to be cached * @param integer $expire the number of seconds in which the cached value will expire. 0 means never expire. * @param ICacheDependency $dependency dependency of the cached item. If the dependency changes, the item is labeled invalid. * @return boolean true if the value is successfully stored into cache, false otherwise */public function set($id,$value,$expire=0,$dependency=null){  Yii::trace('Saving "'.$id.'" to cache','system.caching.'.get_class($this));  if($dependency!==null)    $dependency->evaluateDependency();  $data=array($value,$dependency);  return $this->setValue($this->generateUniqueKey($id),serialize($data),$expire);}/** * Stores a value identified by a key into cache if the cache does not contain this key. * Nothing will be done if the cache already contains the key. * @param string $id the key identifying the value to be cached * @param mixed $value the value to be cached * @param integer $expire the number of seconds in which the cached value will expire. 0 means never expire. * @param ICacheDependency $dependency dependency of the cached item. If the dependency changes, the item is labeled invalid. * @return boolean true if the value is successfully stored into cache, false otherwise */public function add($id,$value,$expire=0,$dependency=null){  Yii::trace('Adding "'.$id.'" to cache','system.caching.'.get_class($this));  if($dependency!==null)    $dependency->evaluateDependency();  $data=array($value,$dependency);  return $this->addValue($this->generateUniqueKey($id),serialize($data),$expire);}/** * Deletes a value with the specified key from cache * @param string $id the key of the value to be deleted * @return boolean if no error happens during deletion */public function delete($id){  Yii::trace('Deleting "'.$id.'" from cache','system.caching.'.get_class($this));  return $this->deleteValue($this->generateUniqueKey($id));}/** * Deletes all values from cache. * Be careful of performing this operation if the cache is shared by multiple applications. * @return boolean whether the flush operation was successful. */public function flush(){  Yii::trace('Flushing cache','system.caching.'.get_class($this));  return $this->flushValues();}

即:

Yii::app()->cache->xxx

xxx對應具體的方法。

例如:

$id = 'key1';$value = 'cache value';Yii::app()->cache->add($id, $value);var_dump(Yii::app()->cache->get($id));

下面是yii官方給出的幾種緩存方式的使用說明,這里就麻木不仁,照搬了

3.緩存的使用:數(shù)據(jù)緩存

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

數(shù)據(jù)緩存即存儲一些 PHP 變量到緩存中,以后再從緩存中取出來。出于此目的,緩存組件的基類 CCache 提供了兩個最常用的方法: set() 和 get()。

要在緩存中存儲一個變量 $value ,我們選擇一個唯一 ID 并調用 set() 存儲它:

Yii::app()->cache->set($id, $value);

緩存的數(shù)據(jù)將一直留在緩存中,除非它由于某些緩存策略(例如緩存空間已滿,舊的數(shù)據(jù)被刪除)而被清除。 要改變這種行為,我們可以在調用 set() 的同時提供一個過期參數(shù),這樣在設定的時間段之后,緩存數(shù)據(jù)將被清除:

// 值$value 在緩存中最多保留30秒Yii::app()->cache->set($id, $value, 30);

稍后當我們需要訪問此變量時(在同一個或不同的 Web 請求中),就可以通過 ID 調用 get() 從緩存中將其取回。 如果返回的是 false,表示此值在緩存中不可用,我們應該重新生成它。

$value=Yii::app()->cache->get($id);if($value===false){  // 因為在緩存中沒找到 $value ,重新生成它 ,  // 并將它存入緩存以備以后使用:  // Yii::app()->cache->set($id,$value);}

為要存入緩存的變量選擇 ID 時,要確保此 ID 對應用中所有其他存入緩存的變量是唯一的。 而在不同的應用之間,這個 ID 不需要是唯一的。緩存組件具有足夠的智慧區(qū)分不同應用中的 ID。

一些緩存存儲器,例如 MemCache, APC, 支持以批量模式獲取多個緩存值。這可以減少獲取緩存數(shù)據(jù)時帶來的開銷。 從版本 1.0.8 起,Yii 提供了一個新的名為 mget() 的方法。它可以利用此功能。如果底層緩存存儲器不支持此功能,mget() 依然可以模擬實現(xiàn)它。

要從緩存中清除一個緩存值,調用 delete(); 要清楚緩存中的所有數(shù)據(jù),調用 flush()。 當調用 flush() 時一定要小心,因為它會同時清除其他應用中的緩存。

提示: 由于 CCache 實現(xiàn)了 ArrayAccess,緩存組件也可以像一個數(shù)組一樣使用。下面是幾個例子:

$cache=Yii::app()->cache;$cache['var1']=$value1; // 相當于: $cache->set('var1',$value1);$value2=$cache['var2']; // 相當于: $value2=$cache->get('var2');

1. 緩存依賴

除了過期設置,緩存數(shù)據(jù)也可能會因為依賴條件發(fā)生變化而失效。例如,如果我們緩存了某些文件的內容,而這些文件發(fā)生了改變,我們就應該讓緩存的數(shù)據(jù)失效, 并從文件中讀取最新內容而不是從緩存中讀取。

我們將一個依賴關系表現(xiàn)為一個 CCacheDependency 或其子類的實例。 當調用 set() 時,我們連同要緩存的數(shù)據(jù)將其一同傳入。

// 此值將在30秒后失效// 也可能因依賴的文件發(fā)生了變化而更快失效Yii::app()->cache->set($id, $value, 30, new CFileCacheDependency('FileName'));

現(xiàn)在如果我們通過調用get() 從緩存中獲取 $value ,依賴關系將被檢查,如果發(fā)生改變,我們將會得到一個 false 值,表示數(shù)據(jù)需要被重新生成。

如下是可用的緩存依賴的簡要說明:

CFileCacheDependency: 如果文件的最后修改時間發(fā)生改變,則依賴改變。
CDirectoryCacheDependency: 如果目錄和其子目錄中的文件發(fā)生改變,則依賴改變。
CDbCacheDependency: 如果指定 SQL 語句的查詢結果發(fā)生改變,則依賴改變。
CGlobalStateCacheDependency: 如果指定的全局狀態(tài)發(fā)生改變,則依賴改變。全局狀態(tài)是應用中的一個跨請求,跨會話的變量。它是通過 CApplication::setGlobalState() 定義的。
CChainedCacheDependency: 如果鏈中的任何依賴發(fā)生改變,則此依賴改變。
CExpressionDependency: 如果指定的 PHP 表達式的結果發(fā)生改變,則依賴改變。此類從版本 1.0.4 起可用。

4.緩存的使用:片段緩存

片段緩存(Fragment Caching)

片段緩存指緩存網頁某片段。例如,如果一個頁面在表中顯示每年的銷售摘要,我們可以存儲此表在緩存中,減少每次請求需要重新產生的時間。

要使用片段緩存,在控制器視圖腳本中調用CController::beginCache() 和CController::endCache() 。這兩種方法開始和結束包括的頁面內容將被緩存。類似data caching ,我們需要一個編號,識別被緩存的片段。

...別的HTML內容...<?php if($this->beginCache($id)) { ?>...被緩存的內容...<?php $this->endCache(); } ?>...別的HTML內容...

在上面的,如果beginCache() 返回false,緩存的內容將此地方自動插入; 否則,在if語句內的內容將被執(zhí)行并在endCache()觸發(fā)時緩存。

1. 緩存選項(Caching Options)

當調用beginCache(),可以提供一個數(shù)組由緩存選項組成的作為第二個參數(shù),以自定義片段緩存。事實上為了方便,beginCache() 和endCache()方法是[ COutputCache ]widget的包裝。因此COutputCache的所有屬性都可以在緩存選項中初始化。

有效期(Duration)

也許是最常見的選項是duration,指定了內容在緩存中多久有效。和CCache::set()過期參數(shù)有點類似。下面的代碼緩存內容片段最多一小時:

...其他HTML內容...<?php if($this->beginCache($id, array('duration'=>3600))) { ?>...被緩存的內容...<?php $this->endCache(); } ?>...其他HTML內容...

如果我們不設定期限,它將默認為60 ,這意味著60秒后緩存內容將無效。

依賴(Dependency)

像data caching ,內容片段被緩存也可以有依賴。例如,文章的內容被顯示取決于文章是否被修改。

要指定一個依賴,我們建立了dependency選項,可以是一個實現(xiàn)[ICacheDependency]的對象或可用于生成依賴對象的配置數(shù)組。下面的代碼指定片段內容取決于lastModified 列的值是否變化:

...其他HTML內容...<?php if($this->beginCache($id, array('dependency'=>array(    'class'=>'system.caching.dependencies.CDbCacheDependency',    'sql'=>'SELECT MAX(lastModified) FROM Post')))) { ?>...被緩存的內容...<?php $this->endCache(); } ?>...其他HTML內容...

變化(Variation)

緩存的內容可根據(jù)一些參數(shù)變化。例如,每個人的檔案都不一樣。緩存的檔案內容將根據(jù)每個人ID變化。這意味著,當調用beginCache()時將用不同的ID。

COutputCache內置了這一特征,程序員不需要編寫根據(jù)ID變動內容的模式。以下是摘要。

varyByRoute: 設置此選項為true ,緩存的內容將根據(jù)route變化。因此,每個控制器和行動的組合將有一個單獨的緩存內容。
varyBySession: 設置此選項為true ,緩存的內容將根據(jù)session ID變化。因此,每個用戶會話可能會看到由緩存提供的不同內容。
varyByParam: 設置此選項的數(shù)組里的名字,緩存的內容將根據(jù)GET參數(shù)的值變動。例如,如果一個頁面顯示文章的內容根據(jù)id的GET參數(shù),我們可以指定varyByParam為array('id'),以使我們能夠緩存每篇文章內容。如果沒有這樣的變化,我們只能能夠緩存某一文章。

varyByExpression: by setting this option to a PHP expression, we can make the cached content to be variated according to the result of this PHP expression. This option has been available since version 1.0.4.
Request Types

有時候,我們希望片段緩存只對某些類型的請求啟用。例如,對于某張網頁上顯示表單,我們只想要緩存initially requested表單(通過GET請求)。任何隨后顯示(通過POST請求)的表單將不被緩存,因為表單可能包含用戶輸入。要做到這一點,我們可以指定requestTypes 選項:

...其他HTML內容...<?php if($this->beginCache($id, array('requestTypes'=>array('GET')))) { ?>...被緩存的內容...<?php $this->endCache(); } ?>...其他HTML內容...

2. 嵌套緩存(Nested Caching)

片段緩存可以嵌套。就是說一個緩存片段附在一個更大的片段緩存里。例如,意見緩存在內部片段緩存,而且它們一起在外部緩存中在文章內容里緩存。

...其他HTML內容...<?php if($this->beginCache($id1)) { ?>...外部被緩存內容...  <?php if($this->beginCache($id2)) { ?>  ...內部被緩存內容...  <?php $this->endCache(); } ?>...外部被緩存內容...<?php $this->endCache(); } ?>...其他HTML內容...

嵌套緩存可以設定不同的緩存選項。例如, 在上面的例子中內部緩存和外部緩存可以設置時間長短不同的持續(xù)值。當數(shù)據(jù)存儲在外部緩存無效,內部緩存仍然可以提供有效的內部片段。 然而,反之就不行了。如果外部緩存包含有效的數(shù)據(jù), 它會永遠保持緩存副本,即使內容中的內部緩存已經過期。

5.緩存的使用:頁面緩存

頁面緩存

頁面緩存指的是緩存整個頁面的內容。頁面緩存可以發(fā)生在不同的地方。 例如,通過選擇適當?shù)捻撁骖^,客戶端的瀏覽器可能會緩存網頁瀏覽有限時間。 Web應用程序本身也可以在緩存中存儲網頁內容。 在本節(jié)中,我們側重于后一種辦法。

頁面緩存可以被看作是 片段緩存一個特殊情況 。 由于網頁內容是往往通過應用布局來生成,如果我們只是簡單的在布局中調用beginCache() 和endCache(),將無法正常工作。 這是因為布局在CController::render()方法里的加載是在頁面內容產生之后。

如果想要緩存整個頁面,我們應該跳過產生網頁內容的動作執(zhí)行。我們可以使用COutputCache作為動作 過濾器來完成這一任務。下面的代碼演示如何配置緩存過濾器:

public function filters(){  return array(    array(      'COutputCache',      'duration'=>100,      'varyByParam'=>array('id'),    ),  );}

上述過濾器配置會使過濾器適用于控制器中的所有行動。 我們可能會限制它在一個或幾個行動通過使用插件操作器。 更多的細節(jié)中可以看過濾器。

Tip: 我們可以使用COutputCache作為一個過濾器,因為它從CFilterWidget繼承過來, 這意味著它是一個工具(widget)和一個過濾器。事實上,widget的工作方式和過濾器非常相似: 工具widget (過濾器filter)是在action動作里的內容執(zhí)行前執(zhí)行,在執(zhí)行后結束。

6.緩存的使用:動態(tài)內容

動態(tài)內容(Dynamic Content)

當使用fragment caching或page caching,我們常常遇到的這樣的情況 整個部分的輸出除了個別地方都是靜態(tài)的。例如,幫助頁可能會顯示靜態(tài)的幫助 信息,而用戶名稱顯示的是當前用戶的。

解決這個問題,我們可以根據(jù)用戶名匹配緩存內容,但是這將是我們寶貴空間一個巨大的浪費,因為緩存除了用戶名其他大部分內容是相同的。我們還可以把網頁切成幾個片段并分別緩存,但這種情況會使頁面和代碼變得非常復雜。更好的方法是使用由[ CController ]提供的動態(tài)內容dynamic content功能 。

動態(tài)內容是指片段輸出即使是在片段緩存包括的內容中也不會被緩存。即使是包括的內容是從緩存中取出,為了使動態(tài)內容在所有時間是動態(tài)的,每次都得重新生成。出于這個原因,我們要求 動態(tài)內容通過一些方法或函數(shù)生成。

調用CController::renderDynamic()在你想的地方插入動態(tài)內容。

...別的HTML內容...<?php if($this->beginCache($id)) { ?>...被緩存的片段內容...  <?php $this->renderDynamic($callback); ?>...被緩存的片段內容...<?php $this->endCache(); } ?>...別的HTML內容...

在上面的, $callback指的是有效的PHP回調。它可以是指向當前控制器類的方法或者全局函數(shù)的字符串名。它也可以是一個數(shù)組名指向一個類的方法。其他任何的參數(shù),將傳遞到renderDynamic()方法中?;卣{將返回動態(tài)內容而不是僅僅顯示它。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
成人av中文| 国产精品成人国产乱一区| 日本一区二区乱| 精精国产xxxx视频在线中文版| 91麻豆国产福利在线观看宅福利| 欧美日韩一道本| 九九热爱视频精品视频高清| 国产www视频在线观看| 草民午夜欧美限制a级福利片| 欧美va天堂va视频va在线| 欧美成aaa人片在线观看蜜臀| 在线观看免费视频a| 一级毛片在线视频| 国产精品无码久久久久成人app| 色棕色天天综合网| 91成人免费在线观看| 欧美电影网站| 99中文视频在线| 免费视频网站在线观看入口| 日本爱爱网站| 极品尤物一区二区| 911久久香蕉国产线看观看| 国内黄色精品| 高清精品久久| 国产成人综合精品在线| 日韩中文字幕不卡视频| 最近中文字幕免费观看| www.欧美日韩国产在线| 欧美日韩免费做爰大片| 欧美成人精品三级网站| 日本成人在线视频网址| 国产一区二区三区四区五区入口| 丰满饥渴老女人hd| 欧美一区 二区| 黄色成人免费观看| 午夜精品久久久久久久久久蜜桃| 久热精品视频在线| 欧美污视频久久久| 国产视频久久| 国产精品久久久一区二区三区| 992tv快乐视频| 国产一区二区看久久| 影音先锋男人在线资源| 欧美天天在线| 三上悠亚在线观看二区| 国产欧美日韩一区二区三区在线观看| 麻豆疯狂做受xxxx高潮视频| www.精品国产| 精品婷婷色一区二区三区蜜桃| 在线观看xxxx| 日韩欧美伦理电影院| 午夜精品久久久久久久无码| 亚洲精品一区二区三区蜜桃| 一区二区久久久久| aaa级黄色片| 精品欧美国产一区二区三区不卡| 成人在线播放网站| 国产无遮挡又黄又爽又色视频| 国产亚洲在线| 欧美高清性xxxxhdvideosex| 91在线看国产| 91在线播放观看| 欧美三区四区| 色综合影院在线| 亚洲高清二区| 日本24小时在线高清视频| 日韩精品视频网| 搡老女人一区二区三区视频tv| 欧美日韩精品三区| 色偷偷av一区二区三区乱| 亚洲成人午夜电影| 久久在线免费视频| 亚洲成人男人天堂| 毛片在线导航| 亚洲三级色网| 欧美亚洲成人xxx| 精品av在线播放| 欧美一级高清大全免费观看| 在线播放麻豆| 一个色综合网站| 国产稀缺精品盗摄盗拍| 欧美一级淫片aaaaaaa视频| 国产视频一视频二| 亚洲一区二区免费视频| 日韩av不卡在线播放| 无码人妻丰满熟妇区bbbbxxxx| 亚洲精品国产成人久久av盗摄| 中文字幕人成高清视频| 国产精品自在在线| 久久一区二区三区国产精品| 成人一区二区三区视频| 欧美h版电影| 91精品久久久久久久| 丁香六月激情综合| hd100%videos日本| av在线不卡观看| 日韩欧美在线播放视频| 手机在线观看av网站| 日本成人在线不卡视频| 午夜色香蕉导航| 午夜久久久久久久久久影院| 污视频在线看网站| 麻豆精品国产传媒av| 在线看黄网址| 咪咪网在线视频| 国产裸体视频网站| 国产色91在线| √天堂中文官网8在线| 69xx绿帽三人行| 欧美日韩亚洲一区二| 成人免费观看网址| 在线成人国产| 美美哒免费高清在线观看视频一区二区| 香蕉在线播放| 最近2019免费中文字幕视频三| 伊大人久久香线焦宗合一75大| 久久免费精品一区二区| 国产69精品久久99不卡| 蜜臀av午夜精品久久| 国产不卡一区二区三区在线观看| 欧美日韩亚洲第一页| 欧美又粗又长又爽做受| 美女扒开腿让男人桶爽久久软| 蜜桃免费一区二区三区| 欧美日韩国产一区二区三区地区| 国产成人精品自拍| 国产成a人亚洲精| 黄色福利视频网站| 伊人网综合在线| 国产日韩亚洲精品| 色吧影院999| 岛国av在线网站| 狠狠色伊人亚洲综合网站色| aaa在线播放视频| 在线观看一区二区三区三州| 久久久999免费视频| 国产伦精品一区二区三区免费优势| 欧美国产小视频| 亚洲h片在线看| 欧美性生交大片免网| 青青草97国产精品免费观看无弹窗版| a√在线视频| 亚洲毛片视频| 悠悠色在线精品| 国产精品一区二区免费在线观看| jizz国产精品| 午夜精品久久久久久久久久久久久蜜桃| 成人看的羞羞网站| 国产又粗又猛又色| 日韩在线成人| 一区二区三区在线不卡| 亚洲欧洲一区二区三区| 91精品国产吴梦梦| 美女禁区视频免费观看精选| 中文字幕中文在线| 中文字幕一区二区三区四区欧美| 日韩av影片在线观看| 色www免费视频| 韩国97影院| 日本欧美久久久久免费播放网| 色婷婷激情一区二区三区| 91精品国产综合久久福利软件| 国产一线二线三线在线观看| 国产成人在线免费观看视频| 香蕉成人啪国产精品视频综合网| 国产精品欧美经典| 午夜91在线| 欧美性色黄大片| 国产一级免费看| 91这里只有精品| 日韩国产精品91| 久久最新资源网| 欧美日韩一区二区视频在线观看| 欧美激情在线狂野欧美精品| 欧美熟妇精品黑人巨大一二三区| 久久久久国产精品免费网站| 久久精品日产第一区二区三区| 超碰在线94| 伊人成年综合电影网| 狠狠色噜噜狠狠狠狠8888| 粉嫩欧美一区二区三区| 男人天堂一区二区| 国产精品精品视频一区二区三区| 日韩成人午夜影院| 日韩av在线直播| 国产精品豆花视频| 国产桃色电影在线播放| 亚洲国产毛片aaaaa无费看| 国产精品久久久久久亚洲影视| 日韩av影院在线观看| 国产精品bbw一区二区三区| 欧美在线一卡| 在线色视频网| 26uuu亚洲电影在线观看| 成人福利在线观看视频| 黄色成人91| 国产一区二区波多野结衣| 国产成人精品优优av| 日韩国产欧美一区二区| 亚洲精品一级片| 日本不卡免费播放| 亚洲欧洲www| 久久视频免费| 亚洲成人免费在线| 2024亚洲男人天堂| 欧美精品激情| av中文字幕一区二区| 国内精品久久久久久久久久久| 看全色黄大色黄女片18| 亚洲一区视频在线播放| 久久一留热品黄| 国产成人免费xxxxxxxx| 国产va免费精品高清在线| 中文字幕第一区综合| 伊人色综合久久天天五月婷| 久久精品这里热有精品| 久久久欧美精品| 成人在线激情网| 美女与牲口做爰视频在线观看| 伊人成人网在线看| va天堂va亚洲va影视| 欧美大肥婆大肥bbbbb| 天堂8在线视频| 中文字幕在线亚洲| 免费无码毛片一区二区app| 国产精品尤物| 亚洲线精品一区二区三区| 黄网站视频在线观看| 三上悠亚 电影| 日本污视频在线观看| 久久99久久久久久久噜噜| 欧美一区二区三区成人片在线| 日韩精品一区二区三区色欲av| 蜜桃av一区二区三区电影| 国产中文字幕在线播放| 日韩电影中文字幕一区| 精品国产一区二区三区忘忧草| 天天综合天天干| 一区二区三区在线观看动漫| 国产成人精品日本亚洲11| 色综合久久88色综合天天| 亚洲视频一区二区在线观看| 九九热这里只有精品6| 亚洲少妇30p| 91午夜在线| 亚洲欧美天堂网| 国产精品久久77777| 国产精品观看在线亚洲人成网| 日韩一区二区三区精品视频第3页| 美女视频黄 久久| 中文字幕久久精品| 精品国产亚洲日本| 色一区在线观看| 欧美一区二区三区精美影视| 国产成人精品亚洲日本在线桃色| 奇米4444一区二区三区| 嫩草影院中文字幕| 91色视频在线| 日韩成人18| 日本久久一区| 国产在线精品日韩| 爽爽爽爽爽爽爽成人免费观看| 特级黄国产片一级视频播放| 久久亚洲一级片| 亚洲小说图片| 国产在线精品免费av| 精品国产一区二区三区久久狼5月| 宅男在线精品国产免费观看| 国产免费福利视频| 九九久久精品这里久久网| 看全色黄大色黄女片18| 天天爽夜夜爽一区二区三区| 在线观看国产精品一区| 成年女人毛片| 激情久久综合| 男人的天堂www| 成人黄色免费视频| 欧美久久高跟鞋激| 国产精品不卡av| 欧美成人三级电影在线| 日本美女爱爱视频| 69久久夜色精品国产69蝌蚪网| 国产精品久久av| 国产一区在线免费观看| 欧美 日韩 国产 在线| 极品国产91在线网站| www.在线观看av| 在线亚洲+欧美+日本专区| 久久久久久久久久久久久av| 中文字幕欧美区| 成年人黄色在线观看| 亚洲精品456在线播放狼人| 亚洲一卡二卡在线观看| 国内精品久久久| 日本欧美精品久久久| 国产女主播自拍| 亚洲激情久久久| 国产精品一区二区精品| 亚洲国产免费| 超碰免费在线公开| 男人皇宫亚洲男人2020| 日韩欧美国产成人精品免费| 欧美精品人人做人人爱视频| 91在线|亚洲| av成人男女| 久久超碰亚洲| 99精品全国免费观看| 国产一区福利| 1069男同网址| 99久久99久久精品免费观看| 国产高清在线精品一区二区三区| 另类欧美日韩国产在线| 在线免费观看亚洲视频| 成人精品网站在线观看| 亚洲久久久久久久久久久| 色欧美自拍视频| 欧美激情亚洲自拍| 亚洲国产成人不卡| 台湾佬中文在线| 国产精品久久久久久福利一牛影视| 亚洲影视一区| 欧美fxxxxxx另类| 青青草在线视频免费观看| 日本精品一区二区三区在线播放视频| 天天综合av| 日本精品一区二区在线观看| 国内av免费| 天堂va久久久噜噜噜久久va|