杭州.net培訓
達內杭州.net培訓中心

13732203138

關于 ASP.NET 內存緩存你需要知道的 10 點

  • 時間:2019-01-22 10:10
  • 發布:轉載
  • 來源:網絡

緩存機制的主要目的是提高應用程序的性能。作為 ASP.NET 開發人員,你可能會意識到 ASP.NET Web 窗體以及 ASP.NET MVC 可以使用 Cache 對象緩存應用程序的數據。這通常被稱為服務器端數據緩存,并且常作為框架的內置功能。雖然 ASP.NET Core 中并沒有這樣的 Cache 對象,但是你可以很容易地實現內存緩存。本文將向你說明如何實現。

 

在進一步閱讀之前,你先創建一個基于 Web 應用程序項目模板的新的 ASP.NET Core 應用程序。

 

然后按照下面提到的步驟逐一構建和測試由內存緩存提供的各種功能。

 

1. 內存緩存需要在啟動類 Startup 中啟用一下

不同于 ASP.NET Web 窗體和 ASP.NET MVCASP.NET Core 沒有內置的 Cache 對象,可以拿來在控制器里面直接使用。 這里,內存緩存時通過依賴注入來啟用的,因此第一步就是在 Startup 類中注冊內存緩存的服務。如此,就得打開 Startup 類然后定位到 ConfigureServices() 方法,像下面這樣修改 ConfigureServices() 方法:

public void ConfigureServices(IServiceCollection services)

{

    services.AddMvc();

        services.AddMemoryCache();

}

 

為了向你的應用程序加入內存緩存能力,你需要在服務集合上調用 AddMemoryCache() 方法。采用這種辦法就可以讓一個內存緩存(它是一個 IMemoryCache 對象)的默認實現可以被注入到控制器中去。

 

2. 內存緩存使用依賴注入來注入緩存對象

然后打開 HomeController 并對其進行修改,如下所示:

public class HomeController : Controller

{

    private IMemoryCache cache;

 

    public HomeController(IMemoryCache cache)

    {

        this.cache = cache;

    }

    ....

}

 

如你所見,上述代碼聲明了一個 ImemoryCache 的私有變量。該變量會被構造器中被賦值。構造器會通過 DI(依賴注入)接收到緩存參數,然后被存儲在本地變量總,提供后續使用。

 

3. 你可以使用 Set() 方法來在緩存中存東西

等你有了這個 IMemoryCache 對象,就可以讀取或者向它寫入數據了。向緩存寫入數據項是相當直接的。

public IActionResult Index()

{

  cache.Set<string>("timestamp", DateTime.Now.ToString());

  return View();

}

 

上述代碼在 Index() 這個 action 中設置了一個緩存項。這是通過使用 IMemoryCache  Set<T>() 來完成的。Set() 方法的第一個參數是鍵名,用來標識該數據項。第二個參數是鍵的取值。在此例中,我們存儲一個字符串的鍵和一個字符串的值,而你也可以存儲其它類型 (原生以及自定義的類型) 的鍵值對。

 

4. 你可以使用 Get 方法來從緩存中獲取到一個數據項

等你向緩存中添加好了數據,也許會想要在應用程序的其它地方去獲取到該數據,可以用 Get() 來做到。如下代碼會告訴你如何來做這件事情。

public IActionResult Show()

{

  string timestamp = cache.Get<string>("timestamp");

  return View("Show",timestamp);

}

 

上述代碼從 HomeController 的另外一個actionShow)那里獲取到了一個緩存的數據項。Get() 方法會指定數據項的類型以及它的鍵名。如果該數據項存在的話,就會被返回并且被賦值給 timestamp 這個字符串變量。然后這個 timestamp 的值就會被傳遞給 Show 視圖。

 

Show 視圖只是簡單地輸出了 timestamp 的值,如下所示:

<h1>TimeStamp : @Model</h1>

 

<h2>@Html.ActionLink("Go back", "Index", "Home")</h2>

 

為了對目前為止你所寫的代碼進行一下測試,請運行應用程序。首先將瀏覽器導航至 /Home/Index ,這樣 timestamp 鍵就會被賦值。然后導航至 /Home/Show 并查看 timestamp 值是否會輸出。下圖所示是 Show() 這個 action 運行起來的一個例子。

 

5. 你可以使用 TryGet() 來檢查緩存中是否存在特定的鍵值

如果你觀察前面的示例,會發現每次你導航至 /Home/Index 的時候, 都會有一個新的 timestamp 被賦值給了緩存項。這是因為我們并沒有對此進行檢查,規定只有在數據項不存在的時候才賦值。許多時候你都會想要這樣做的。這里有兩種辦法可以在 Index() 這個 action 里面來做這樣的檢查。我們把兩種辦法都在下面列了出來。

//first way

if (string.IsNullOrEmpty

(cache.Get<string>("timestamp")))

{

  cache.Set<string>("timestamp", DateTime.Now.ToString());

}

 

//second way

if (!cache.TryGetValue<string>

("timestamp", out string timestamp))

{

    cache.Set<string>("timestamp", DateTime.Now.ToString());

}

 

第一種辦法使用了你早先用過的同一個 Get() 方法,這一次它被拿來跟 if 塊一起用。如果 Get() 不能在緩存中找到指定的數據項,IsNullOrEmpty() 就會返回 true。而只有這時候 Set() 才會被調用,一次來添加數據項。

 

第二種辦法更加優雅一點。它使用 TryGet() 方法來獲取一個數據項。TryGet() 方法會返回一個布爾值來指明數據項有沒有被找到。實際的數據項可以使用一個輸出參數拉取出來。如果 TryGet() 返回falseSet() 就會被用來添加數據。

 

6. 如果不存在的話,可以使用 GetOrCreate() 來添加一項

有時你需要從緩存中檢索現有項。如果該項目不存在,則希望添加該項。這兩個任務 - 如果它存在獲取值,否則創建之 - 可以使用 GetOrCreate() 方法來實現。修改后的 Show() 方法展示了如何實現的。

public IActionResult Show()

{

  string timestamp = cache.GetOrCreate<string>

  ("timestamp", entry => { 

return DateTime.Now.ToString(); });

  return View("Show",timestamp);

}

 

Show() 動作現在使用 GetOrCreate() 方法。 GetOrCreate() 方法將檢查時間戳的鍵值是否存在。如果是,現有值將被賦值給局部變量。否則,將根據第二個參數中指定的邏輯創建一個新條目并將其添加到緩存中。

 

為了測試此代碼,請直接運行 /Home/Show,不需要跳轉到 /Home/Index。你仍然會看到輸出的時間戳值,因為在該值不存在的情況下,GetOrCreate() 現在是添加了它。

 

7. 你可以在一個緩存的數據項上面設置絕對和滾動的過期時間

在前述示例中,一個緩存項只要被添加到緩存就會一直存儲,除非它被明確地使用 Remove() 從緩存中移除。你也可以在一個緩存項上面設置一個絕對和滾動的過期時間。一個絕對的過期設置意味著該緩存項會在嚴格指定的日期和時間點被移除,而滾動過期設置則意味著它在給定的一段時間量處于空閑狀態(也就是沒人去訪問)之后被移除。

 

為了能在一個緩存項上面設置這兩種過期策略,你要用到 MemoryCacheEntryOptions 對象。如下代碼向你展示了如何去使用。

MemoryCacheEntryOptions options = 

new MemoryCacheEntryOptions();

options.AbsoluteExpiration = 

DateTime.Now.AddMinutes(1);

options.SlidingExpiration = 

TimeSpan.FromMinutes(1);

cache.Set<string>("timestamp", 

DateTime.Now.ToString(), options);

上述代碼來自于修改過的 Index() action,它創建了一個 MemoryCacheEntryOptions 的對象,然后將它的 AbsoluteExpiration 屬性設置為從此刻到一分鐘之后的一個 DateTime 值,它還將 SlidingExpiration 屬性設置為一分鐘。這些值都指定了該緩存項會在一分鐘之后從緩存移除,不管其是否會被訪問。此外,如果該緩存項如初持續空閑了有一分鐘,它也會被從緩存中移除。

 

等你將 AbsoluteExpiration SlidingExpiration 的值設置后, Set() 方法就可以被用來將一個數據項添加到緩存。這一次 MemoryCacheEntryOptions 對象會被作為第三個參數傳遞給 Set() 方法。

 

 

8. 當緩存項會被移除時,你可以連接回調

 

有時你會想要在緩存項從緩存中被移除時收到通知。可能會有多種原因需要從緩存中移除數據項。例如,因為明確地執行了 Remove() 方法而移除了一個緩存項, 也有可能是因為它的 AbsoluteExpiration SlidingExpiration 值已經到期而被移除,諸如此類的原因。

 

為了能知道項目是何時從緩存移除的,你需要編寫一個緩存函數。如下代碼向你展示了如何去做這件事情:

MemoryCacheEntryOptions options = new MemoryCacheEntryOptions();
options.AbsoluteExpiration = 
DateTime.Now.AddMinutes(1);
options.SlidingExpiration = 
TimeSpan.FromMinutes(1);
options.RegisterPostEvictionCallback
(MyCallback, this);
cache.Set<string>("timestamp", 
DateTime.Now.ToString(), options);

 

上述代碼同之前使用 MemoryCacheEntryOptions 來配置 AbsoluteExpiration SlidingExpiration 的代碼相當類似。更加重要的是它也調用了 RegisterPostEvictionCallback() 方法來綁定剛剛討論過的回調函數。在這里回調函數被命名為 MyCallback。第二個參數是一個你會想要傳遞給回調函數的狀態對象。這里我們傳入了 HomeController 的實例 ( this 將當前的 HomeController 對象出來) 作為狀態對象。

 

前面提到的MyCallback函數,其代碼如下所示:

private static void MyCallback(object key, object value,

EvictionReason reason, object state)

{

    var message = $"Cache entry was removed : {reason}";

    ((HomeController)state).

cache.Set("callbackMessage", message);

}

 

請仔細觀察這段代碼。 MyCallback()  HomeController 類里面的一個私有靜態函數,它有四個參數。前面兩個參數表示剛剛刪除的緩存項的鍵和值,第三個參數表示的是該數據項被刪除的原因。EvictionReason 是一個枚舉類型,它維護者各種可能的刪除原因,如過期,刪除以及替換。


在回調函數的內部,我們會基于刪除的原因構造一個字符串消息。我們想要將此消息設置成另外一個緩存項。這樣做的話就需要訪問 HomeController 的緩存對象,此時狀態參數就可以排上用場了。使用狀態對象,你可以對 HomeController 的緩存對象進行控制,并使用 Set() 增加一個 callbackMessage 緩存項。
你可以通過 Show() 這個 action 來訪問到 callbackMessage,如下所示:

public IActionResult Show(){
  string timestamp = cache.Get<string>("timestamp");
  ViewData["callbackMessage"] = 
    cache.Get<string>("callbackMessage");
  return View("Show",timestamp);
}

 

最后就可以在 Show 視圖中顯示出來了:

<h1>TimeStamp : @Model</h1>

 

<h3>@ViewData["callbackMessage"]</h3>

 

<h2>@Html.ActionLink("Go back", "Index", "Home")</h2>

 

為了測試回調,我們需要運行應用程序并跳轉到 /Home/Index。然后跳轉到 /Home/Show,并不停地刷新瀏覽器。在某些時間點,由于其 AbsoluteExpiration 設置之后,時間戳項目將會過期。你會看到這樣的 callbackMessage

 

9. 你可以設置緩存項的優先級

正如你可以設置緩存項的到期策略一樣,你還可以為緩存項賦予優先級。如果服務器內存緊缺的話,就會基于此優先級對緩存項進行清理以回收內存。 想要設置優先級的話,就要再一次用到 MemoryCacheEntryOptions

MemoryCacheEntryOptions options = 

new MemoryCacheEntryOptions();

options.Priority = CacheItemPriority.Normal;

cache.Set<string>("timestamp", 

DateTime.Now.ToString(), options);

MemoryCacheEntryOptions Priority 屬性讓你可以使用 CacheItemPriority 枚舉來設置緩存項的優先級取值。可選的值有 LowNormalHigh 以及 NeverRemove

 

10. 你可以設置多個緩存項之間的依賴關系

你還可以對一組緩存項目之間的依賴關系進行設置,例如在刪除一個緩存項時,所有依賴的項也會被刪除。 要是你想要了解它是如何工作的,可以像下面這樣對 Index()這個 action 做一下修改:

public IActionResult Index()

{

    var cts = new CancellationTokenSource();

    cache.Set("cts", cts);

 

    MemoryCacheEntryOptions options = 

new MemoryCacheEntryOptions();

    options.AddExpirationToken(

new CancellationChangeToken(cts.Token));

    options.RegisterPostEvictionCallback

(MyCallback, this);

    cache.Set<string>("timestamp", 

DateTime.Now.ToString(), options);

 

    cache.Set<string>("key1", "Hello World!", 

new CancellationChangeToken(cts.Token));

    cache.Set<string>("key2", "Hello Universe!", 

new CancellationChangeToken(cts.Token));

 

    return View();

}

 

代碼首先創建了一個 CancellationTokenSource 對象,該對象被存儲為一個獨立的緩存項 cts。然后像之前那樣創建出 MemoryCacheEntryOptions 對象。這時候調用 MemoryCacheEntryOptions  AddExpirationToken() 方法來指定過期令牌。我們不會在這里探討 CancellationChangeToken 的細節。可以這樣理解,過期令牌能讓你有權利讓一個緩存項過期。如果令牌處于活動狀態的話,則緩存項就會在緩存中維持,而如果令牌被取消掉了,則該緩存項就將從緩存中刪除掉。一旦緩存項從緩存中刪除掉了,MyCallback 就像之前一樣被調用。之后代碼又創建了兩個緩存項—— key1 key2。在添加這兩個緩存項時,Set() 的第三個參數將基于之前所創建的 cts 對象傳遞一個 CancellationChangeToken

 

這樣做就意味著這里我們有了三個鍵 - timestamp 是主鍵,而 key1 key2 則依賴于 timestamp。當 timestamp 被刪除時,key1 key2 也應該被刪除掉。要刪除 timestamp,你需要在代碼中的某個地方取消其令牌。我們可以單獨的一個 actionRemove())中進行這樣的操作。

public IActionResult Remove()

{

    CancellationTokenSource cts = 

cache.Get<CancellationTokenSource>("cts");

    cts.Cancel();

    return RedirectToAction("Show");

}

 

這里我們先獲取到之前存儲的 CancellationTokenSource 對象,并調用它的 Cancel() 方法。這樣做會把 timestampkey1 以及 key2 都刪除掉。 你可以通過在 Show() 這個 action 中獲取一下所有這三個鍵來確認它們是否已經被刪除掉了。

 

為了測試這個例子,運行應用程序并導航至 /Home/Index。然后再導航至 /Home/Show,并檢查所有這三個鍵值是否按預期顯示了出來。然后導航至 /Home/ Remove,瀏覽器將被重定向回 /Home/Show。由于 Remove() 取消了令牌,所有的鍵都已經被刪除調了,而現在 Show 視圖會將刪除的原因(TokenExpired)顯示出來,如下所示:

 

到目前為止就是這些了!筆耕不輟!

 

預約申請免費試聽課

怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

上一篇:net Core教程之創建vuejs應用
下一篇:沒有下一篇了
  • 關注微信公眾號

    回復關鍵字:視頻資料

    免費領取 達內課程視頻學習資料

  • 視頻學習QQ群

    添加QQ群:1143617948

    免費領取達內課程視頻學習資料

Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

選擇城市和中心
江西省

貴州省

廣西省

海南省

图片区偷拍区 小说区,小说区视频区照片区,小说区 图片区 综合区
  • 临高县
  • 国产自拍,自拍偷拍,国产精品,情侣自拍视频,夫妻自拍视频,网友自拍
  • 伊人大香线蕉精品在线观看无需播放器视频青青操视频大香蕉狠狠爱
  • 高清美女视频亚洲免费,亚洲 图片另类欧美_另类 专区 欧美 制服
  • 丁香五月啪啪,激情综合,色久久,色久久综合网
  • 嘉黎县
  • 免费网站看v片免费观看 在线v片免费观看视频,免费网站看完整v片在线
  • 伊人大杳蕉情侣成综合日本阿v片在线播放免费哆啪啪最新的黄色网站
  • 国产在线精品视频免费观看
  • 天天影视网茄子视频电脑版久久爱免费频在线看7色婷婷综合缴情
  • 免费看祼色app黄 色 成 人小说网站久久是热频这里只精品2
  • 成av人电影在线,观看五月丁香网国产精品大陆在线视频天天色情网
  • 色姑娘综合网久久一个色综合亚洲色综合久久偷拍国产在线视频
  • 在线a亚洲视频简约网址导航在线观看黄色视频福利片135
  • 婷婷六月丁香综合基地|导航色
  • 一本道久在道最新2019_中文字幕破除无线码_中文字幕无码在线
  • 免费av亚洲国产在线-深夜福利-99精品国产免费观看视频
  • 谷城县
  • 皋兰县
  • 好吊色青青青国产_一本久道热线在线 视频_他也色他也色视频_日本高清视频免费版毛片
  • 小A影院全部国产av播放列表国产自拍第一页羞羞色院app
  • 樟树市
  • 黄色AⅤ网_免费在线黄色电影_黄色成人快播电影_伦理电影黄色片
  • 最新无码专区在线视频,最新高清无码专区,欧美av无码高清在线-首页
  • 在线中文字幕亚洲日韩高清无码中文字幕视频无码不卡中文字幕在线视频
  • 羞羞妹_青青草视频,青青草在线视频免费,青青草视频免
  • 天堂AV在线AV,国产亚洲视频中文字幕,国内国内精品视频,以满足广大秒拍控为宗旨的视频网
  • 亚洲久久久久久中文字幕,国产 亚洲 中文字幕 久久网,久久综合色一.
  • 三级播三方免费观看aⅴ在线视频男人的天堂琪琪影院yy480线观看
  • 阳信县
  • 热热色av.青娱乐论坛极品盛宴.伊人久久大香线蕉综合.播放免费精子
  • 2019最新中文字幕在线观看,电影在线观看,2019中文字字幕在线不卡
  • 夜夜橾天天橾b在线观看_天天日日狠狠 2019_天天啪久久爱视频精品
  • 亚洲 欧美 日韩 国产 另类
  • 国产亚洲精品福利视频,高清国产午夜福利在线视频,国产私拍福利精品视频
  • 狼人香蕉香蕉在线 超级97碰碰车公开视频97超pen个人视频公开视频
  • 欧美三级片高清在线播放,欧美三级片BT种子下载,欧美三级片下载
  • 2019最新国产不卡a 国内2018自拍视频在线 国内精品2018视频在线,
  • 男人的天堂在线视频av_欧美阿v天堂视频在99线-最新av亚洲天堂2017
  • 会理县
  • 色姑娘久久综合网天天 五月天丁香婷深爱综合 开心婷婷五月综合基地 色姑娘综合站,亚洲欧洲视频一区,久草在线新时代的视觉,在线看的性视频网站
  • 夜夜橾天天橾b在线观看_天天日日狠狠 2018_天天啪久久爱视频精品
  • 国内三级a在线,在线观看国内女厕偷拍,国内自拍久久久久影院
  • 中文字幕人成乱码,日本近親倫亂中文字幕av視頻,日本乱码视频文字幕
  • 情色综合,亚洲色姐妹综合网姐姐,大香蕉综合伊人网,狼人干伊人网
  • 奇奇米影视第四色欧美亚洲人成网站77777操逼网站91自拍视频
  • 甘德县
  • 免费多人疯狂做人爱视频_美国多人做人爱的视频_香蕉人多人在线
  • 新民市
  • 天天操综合网大香蕉电影 大香蕉网 大香蕉在线影院 伊人大香蕉久久网
  • 国产露脸 手机在线观看,哥精品国产自在线拍,国产情侣偷拍福利视频,1024porm国内自拍,偷拍国在线手机在线
  • 久草在线最新免费播放,在线a久草,一级a做爰视频免费观看,久草在线
  • 一本道理高清在线播放_一本道理在线不卡免费_一本道久在线88综合
  • 208年国产在线视频观看-免费国产直接看片av-成 人 国产系列
  • 夜夜橾天天橾b在线观看_天天日日狠狠 2018_天天啪久久爱视频精品
  • 777奇米久久精品视在线观看2偷拍国产在线手机在线国产伊甸园偷拍
  • 色婷婷综合缴情综五月,,,
  • 桑植县
  • 大香蕉电影 大香蕉网 大香蕉在线影院 伊人大香蕉九九99香蕉在线视频
  • 青青青国产在线观看手机免费_青草青草久热精品视频_青青精品国产自在线拍
  • 高清美女视频亚洲免费,亚洲 图片另类欧美_另类 专区 欧美 制服
  • 大香蕉AV电影,国产大香蕉视频播放,大香蕉大香蕉最新视频
  • 亚洲香蕉视频在线播放_大香蕉大香蕉最新视频_岛国爱情动作片
  • 奇米影视盒 奇米影视播放器 奇米第四手机在线观看 奇米第四色
  • 日久干草青青视频免费_日本近親倫亂中文字幕av視頻
  • 欧美 卡通 另类 偷拍,亚洲 欧美 日韩 一区,亚洲图欧美日韩在线
  • 美女av老司机电影天堂大香蕉性爱视频欧美75视频草屄网
  • 在线高清免费不卡无码,欧美av在线观看,波多野结衣丝袜AV在线观看
  • 在线中文字幕亚洲日韩高清无码中文字幕视频无码不卡中文字幕在线视频
  • 人人超碰超国产看一天高清影视在线天天看,天天看高清视频
  • 人人插人人艹免费视频,国人综干合综网,国产姐妹在线第1页
  • 曰本三级片,婷婷五月综合色啪在线观看,成人免费图片
  • 天天干夜夜爱 天天色播 天天射天天舔
  • 天天日天天拍天天射,天天干天天爱,我操综合,天天操天天干天天色
  • 广西
  • 任你躁国语自产在线播-成 人 国产系列-国产av国片免费
  • 亚洲久久久久久中文字幕,亚洲久久无码中文字幕,久99久在线中文字幕
  • 97色伦图片 97色伦图片影院 97色色 97色伦图片在线影院
  • 敦煌市
  • 亚洲 欧美 日韩 国产 另类
  • 天柱县
  • 奇米影视网_性火坑乳燕完整版观看_伊人在线视频_爱草成人视频
  • 剑川县
  • 鲁青青三级黄色片青青伊人国产曰韩无码亚洲视频三级黄色片国产曰韩无码亚洲视频鲁青青
  • 大香蕉爱玖玖爱大香蕉台湾妹综合网亚洲欧美中文字幕,国产av在线
  • 阿拉善左旗
  • 安岳县
  • 江孜县
  • 沙坪坝区
  • 衢州市
  • 牡丹江市
  • 寿阳县
  • 东宁县
  • 日本AV,日本A片,超碰,CaoPorn,91Porn,在线视频图图资源 - 图图最懂你
  • 亚洲 欧美 日韩 国产 另类
  • 鄂托克前旗
  • 亚洲人成视频在线播放 免费人成视频_欧美成 人网站 免费观看
  • 福清市
  • 在线看午夜视频福利 - 在线观看深夜福利视频【精品视频,在线免费】
  • 延长县
  • 国产亚洲精品福利视频国内精品福利自拍在线视频国内精品自拍视频在线播放
  • 桂平市
  • 98精品免费视频,98精品视频在线,se98在线精品视频
  • 免费视频在线观看国产-情侣视频自拍偷拍-久草在线免费视频在线观看
  • 百色市
  • 人人超碰超国产看一天高清影视在线天天看,天天看高清视频
  • 色色影院,哥哥干影院,哥哥干在线直播,大哥哥干妹妹操电影
  • 久久播_久播电影网-亚洲人成电影网站免费-青青草观看-大香蕉视频 大香蕉网
  • 久久爱视频高清影院一级a做爰视频免费观看大香蕉在线线观看免费
  • 亚洲 欧美 国产 综合|亚洲 日韩 国产 有码|一本到在线视频观看^&,亚洲国产综合另类视频
  • 老司机电影网老司机电影天堂手机版黄色录像免费鬼父磁力链接
  • 欧美高清狂热视频,女人自熨全过程(有声),在线观看国产AV每日
  • 一本草中文字幕一本道理不卡一二三区免费2018男任天堂日本人免费
  • 一本道理高清在线播放_一本道东京熬加勒比_波多野结衣一本道在线
  • 亚洲免费无女厕所偷拍,酒店偷拍情侣100部视频_美女自卫慰视频福利
  • 一级a做爰片免费观看,国内偷拍国内精品视频,五月天丁香婷婷
  • 日久干草青青视频免费_女人潮喷_俄罗斯videodese12
  • 婷婷色香五月综合缴情--色空阁俺去也婷婷五月
  • 千爱99最新网址获取,快速进入千爱99tv视频福利站你的私人影院视频
  • 奇米奇米777哪里可以看美剧2017男人天堂哥哥去在线,米奇影视盒
  • 不卡无在线一区二区三区观-中文字幕乱码免费-日本一道本高清二区
  • 深夜影院Av久久大香蕉阿v手机在线视频四虎影院2018AV在线电影
  • 2018夜夜射天天拍在线 日日日射夜2017日日啪 天天啪天天爽国产
  • 牙克石市
  • 青青青视频在线观看 超成人三级狼人av超碰亚洲人妻无码在线
  • 2019伦理片最新欧美夜夜爽天天干老司机电影天堂手机版午夜福利1000在线
  • 在线观看视频a免播放器_漂亮人妇被强了在线观看_美女网站免费观看视频
  • 三级播三方免费观看aⅴ在线视频男人的天堂琪琪影院yy480线观看
  • 大香蕉网-伊人在线大香蕉-大香蕉-大香蕉网站-大香蕉大香蕉电影-大香蕉网
  • 亚洲香蕉视频在线播放_大香蕉大香蕉最新视频
  • 一起色_一起色一起射 一起色,一起射178,我要色综合,爱色影_爱色b
  • 奇米影视盒九州电影网 一区二区三区高清视频神马不卡电影院马影
  • 超级97碰碰车公开视,视频精彩视频类拟,伊在人线香蕉观新在线
  • 国内自拍Av-直播中国成人va视频,国产自拍汇聚国内外精品a电影
  • 伊人大杳焦在久久综合老司机福利有线亚洲 日韩 国产伊人无码高清
  • 人人看手机播放,日本一本道手机在线dvd_一本道在线综合久合合
  • 无为县
  • 老鸭窝唐朝_天天干_天天操_天天射_天天好逼网_天天色综合网
  • 天天日天天拍天天射,天天干天天爱,我操综合,天天操天天干天天色
  • 一本道理高清在线播放,高清一区高清二区,一道本无吗DⅤD
  • 在线电影免费观看奇米影视777操操,超碰大香蕉午夜视频在线国产
  • 亚洲 自拍 偷拍 综合图区成年女人毛片免费观看99 精品视频2019
  • 图片区 偷拍区 小说区桥本有菜?在线观看大陆国产Av国际对白涉涉爱
  • 白沙
  • 每日最新亚洲在线_一级毛卡片不收费的_久久爱只有精品视频
  • 沙雅县
  • 一本草中文字幕一本道理不卡一二三区免费2018男任天堂日本人免费
  • 阿拉尔市
  • 日本AV,日本A片,超碰,CaoPorn,91Porn,在线视频图图资源 - 图图最懂你
  • 奇米影视网_性火坑乳燕完整版观看_伊人在线视频_爱草成人视频
  • 进贤县
  • 含山县
  • 临夏市
  • 青青青国产费观看视频,国产精品青青在线观看,日久干草青青视频免费
  • 97色伦图片 97色伦图片影院 97色色 97色伦图片在线影院
  • 天天色综合_天天色情网_天天操_天天射_天天好逼网_天天啪日日在线观看
  • 天堂AV在线AV,国产亚洲视频中文字幕,国内国内精品视频,以满足广大秒拍控为宗旨的视频网
  • av在线看,欧美图片亚洲小说图区,日本乱理伦片在线观看,黄鳝女主播
  • 成年美女黄网站色,成人影片 免费观看,成 人影片 免费观看10分钟
  • 亚洲 欧美 中文字幕 在线 ,Α√无码亚洲不卡在线播放,日本无码AV...
  • 成人视频在线观看,亚洲成人美图,自拍区偷拍亚洲视频,av欧美高清
  • 兰西县
  • adc影院在线视频播放,香蕉五月天婷婷,在.线免费观看a片
  • AL天堂 sm视频dvd 波波视频地址获取 穿戴遥控跳蛋上街视频
  • 日久干草青青视频免费|浴室一家亲
  • 博兴县
  • 大香蕉AV电影,国产大香蕉视频播放,大香蕉大香蕉最新视频
  • 夜夜橾天天橾b在线观看_天天日日狠狠 2019_天天啪久久爱视频精品
  • 慈利县
  • 日日干夜夜线高清大香蕉大爷影院亚洲tv18kg欧美另类区视频一区
  • 草久久爱久久 青青草视频 久草草在线新免费观看 青青青草网站
  • 开心色综合伊人_ 丁香五月婷婷开心综合
  • 久草在線歐美激情,久草在線國產自拍,久草在線日韓無碼,久草在線
  • 伊人大杳焦在久久综合米奇影视午夜性视频上网亚洲视频99热在线播放
  • 2019最新中文字幕在线观看,中文字幕乱码 电影在线观看中文字幕
  • ,2017亚洲男人天堂天堂,日本一本道高清无码AV,一本到高清无码
  • 最新无码专区在线视频,最新高清无码专区,欧美av无码高清在线-首页
  • 依人在线免费4438x亚洲视频最新免费大香视频依人在线免费香港三级
  • 桃花色综合影院-一级黄色录像-99这里只有精品-99这里只有精品视频
  • 伊人大杳焦在久久综合微信小视频福利1000部,伊人9在线观看
  • 成人免费视频_欧美成人电影_成人影视_成人黄色视频_成人黄色视频
  • 久久婷婷五月综合色啪_国产伊人久久大香蕉_大香蕉网伊人网4在线观看
  • 人人澡超碰碰中文字幕|97人人模人人爽人人喊|日日摸天天摸人人看
  • av国产系列欧美亚洲第一时间为您免费提供国产自拍、日本、韩国
  • 男女做爰高清免费视频_成人免费视频在线观看_做爰高清免费视频
  • 商丘市
  • 天天网首页,色蝴蝶综合,天天操色网,天天逼逼,要草逼网,天天干
  • 自产在线中文字幕免费视频不卡波多野结衣在线视频亚洲高清有码
  • 奇米影视777,奇米影视四色,影音先锋av资源撸色.成人网黄片
  • 奇米影视首页,奇米色888,奇米影院,777米奇影视,奇米影视播放器
  • 一本大道香蕉视频_任你躁国语自产在线播放_在线中文字幕乱码免费
  • 夜夜橾天天橾b在线观看_天天日日狠狠 2019_天天啪久久爱视频精品
  • 日本护士一级毛片_日本高清视频影片www_免费啪视频在线看视频
  • 天堂AV在线AV,国产亚洲视频中文字幕,国内国内精品视频,以满足广大秒拍控为宗旨的视频网
  • 国拍自产免费国产自产区44页 b8yy_欧美一级aa片_一级特黄大片
  • 曰本三级片,婷婷五月综合色啪在线观看,成人免费图片
  • 777me_奇米影视_奇米影院_米奇影院_777米奇影视_第四色影视
  • 千爱99最新网址获取,快速进入千爱99tv视频福利站你的私人影院视频
  • 灵川县
  • 怡紅院A V aV影片香蕉视频在线观看色视频在线日韩日本国产亚洲