精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

EF Code First:二級(jí)緩存

開發(fā) 架構(gòu)
緩存對(duì)于一個(gè)系統(tǒng)來說至關(guān)重要,但是是EF到版本6了仍然沒有見到有支持查詢結(jié)果緩存機(jī)制的跡象。EF4開始會(huì)把查詢語句編譯成存儲(chǔ)過程緩存在Sql Server中,據(jù)說EF6中對(duì)此做了改進(jìn),會(huì)把Linq To Entities 的查詢條件直接編譯緩存在EF中。但是這些都是只是對(duì)查詢條件做了緩存,而不是緩存查詢的結(jié)果集(DbSet.Find(object key)那個(gè)雖然走了DbSet.Local數(shù)據(jù)集,但也僅支持通過主鍵查找單個(gè)實(shí)體的情況,很有局限性),沒有達(dá)到我們想要的效果。

一、前言

今天我們來談?wù)凟F的緩存問題。

緩存對(duì)于一個(gè)系統(tǒng)來說至關(guān)重要,但是是EF到版本6了仍然沒有見到有支持查詢結(jié)果緩存機(jī)制的跡象。EF4開始會(huì)把查詢語句編譯成存儲(chǔ)過程緩存在Sql Server中,據(jù)說EF6中對(duì)此做了改進(jìn),會(huì)把Linq To Entities 的查詢條件直接編譯緩存在EF中。但是這些都是只是對(duì)查詢條件做了緩存,而不是緩存查詢的結(jié)果集(DbSet.Find(object key)那個(gè)雖然走了DbSet.Local數(shù)據(jù)集,但也僅支持通過主鍵查找單個(gè)實(shí)體的情況,很有局限性),沒有達(dá)到我們想要的效果。

EF不加緩存功能,可能也有另外的考慮吧,這里不去猜測(cè)。雖然EF團(tuán)隊(duì)沒有在EF中加入緩存功能,但已經(jīng)給出的緩存功能的擴(kuò)展,這就是Community Entity Framework Provider Wrappers,這個(gè)擴(kuò)展的工作原理由下圖可以清晰的了解:

 該擴(kuò)展提供了跟蹤SQL運(yùn)行日志與SQJ結(jié)果集緩存的功能,這里,我們只用到它的緩存功能來為EF建立二級(jí)緩存的支持。

二、緩存設(shè)計(jì)

(一) 引用EFProviderWrappers

如下圖,在NuGet中只提供了Entity Framework Provider Wrapper Toolkit(基礎(chǔ)類庫)與Entity Framework Tracing Provider(日志跟蹤)的下載,很遺憾的并沒有提供 Entity Framework Caching Provider(緩存)。

我們只能自己動(dòng)手來引用了,這里提供幾種思路:

  • 到 http://code.msdn.microsoft.com/EFProviderWrappers 下載代碼,自行編譯,然后在項(xiàng)目GMF.Component.Data項(xiàng)目中手動(dòng)引用EFProviderWrapperToolkit.dll與EFCachingProvider.dll文件。
  • EFProviderWrapperToolkit由NuGet下載,EFCachingProvider手動(dòng)引用。

我是覺得兩種思路都挺麻煩的,這個(gè)擴(kuò)展的代碼貌似已經(jīng)不更新了(3/18/2011),而且在GMF.Component.Data中額外的引用兩個(gè)程序集也是個(gè)麻煩事,于是我用下面的方法來引用:

在GMF.Component.Data項(xiàng)目中新建兩個(gè)文件夾,把以上源代碼中的兩個(gè)工程以文件夾的形式包含到項(xiàng)目中。

 

這樣,似乎更干凈利落,如圖:

(二) 緩存代碼分析及整合

1. 關(guān)鍵代碼簡(jiǎn)介

在EFCachingProvider中,我們要用到的核心類有三個(gè):

  • ICache:緩存緩存基類,系統(tǒng)中實(shí)現(xiàn)了一個(gè)內(nèi)存緩存類(InMemoryCache),適用于單臺(tái)服務(wù)器的緩存實(shí)現(xiàn),如果要實(shí)現(xiàn)分布式緩存,可以從這個(gè)基類進(jìn)行擴(kuò)展。
    • InMemoryCache:內(nèi)存緩存實(shí)現(xiàn)類,內(nèi)部使用了一個(gè)Dictionary<string, CacheEntry>作為緩存容器,以查詢的SQL語句及參數(shù)的連接字符串(或其MD5值)為鍵(EFCachingCommands.cs類中定義)。還包含了緩存命中、緩存項(xiàng)數(shù)量等數(shù)據(jù)的統(tǒng)計(jì)及緩存清理功能。
  • CachingPolicy:緩存策略基類,定義了當(dāng)前實(shí)體是否可緩存(CanBeCached)、定義緩存緩存數(shù)(GetCacheableRows)、緩存項(xiàng)滑動(dòng)過期與絕對(duì)過期時(shí)間(GetExpirationTimeout)等功能,并默認(rèn)了絕對(duì)過期時(shí)間為永不過期(DateTime.MaxValue)
    • NoCachingPolicy:不緩存策略,禁用緩存功能。
    • CacheAllPolicy:緩存所有數(shù)據(jù)策略,緩存項(xiàng)最大數(shù)量為int.MaxValue
    • CustomCachingPolicy:自定義緩存策略,使用了CacheableTables與NonCacheableTables兩個(gè)集合來表示數(shù)據(jù)類型是否可緩存的白名單與黑名單,這兩個(gè)名單將在重寫的CanBeCached方法中作為類型是否可緩存的驗(yàn)證依據(jù)。
  • EFCachingConnection:此類定義了類型為ICache,CachingPolicy的兩個(gè)屬性,分別用于接收上面據(jù)說的兩個(gè)擴(kuò)展點(diǎn)。

2. 應(yīng)用緩存擴(kuò)展

EF的DbContext上下文類有一個(gè)重載

public DbContext(DbConnection existingConnection, bool contextOwnsConnection) { }

 

需要的是DbConnection參數(shù),而EFCachingConnection正好是派生自DbConnection的,我們只需要構(gòu)建一個(gè)EFCachingConnection對(duì)象作為參數(shù)去構(gòu)造DbContext派生類的對(duì)象,即可完成緩存功能的注入(如本篇第一張圖所示)。這里,緩存專用的DbContext派生類只需要派生自原項(xiàng)目中定義的EFDbContext類。

  1. namespace GMF.Component.Data  
  2. {  
  3.     /// <summary>  
  4.     ///     啟用緩存的自定義EntityFramework數(shù)據(jù)訪問上下文  
  5.     /// </summary>  
  6.     [Export("EFCaching"typeof (DbContext))]  
  7.     public class EFCachingDbContext : EFDbContext  
  8.     {  
  9.         private static readonly InMemoryCache InMemoryCache = new InMemoryCache();  
  10.  
  11.         public EFCachingDbContext()  
  12.             : base(CreateConnectionWrapper("default")) { }  
  13.  
  14.         public EFCachingDbContext(string connectionStringName)  
  15.             : base(CreateConnectionWrapper(connectionStringName)) { }  
  16.  
  17.         /// <summary>  
  18.         ///     由數(shù)據(jù)庫連接串名稱創(chuàng)建連接對(duì)象  
  19.         /// </summary>  
  20.         /// <param name="connectionStringName">數(shù)據(jù)庫連接串名稱</param>  
  21.         /// <returns></returns>  
  22.         private static DbConnection CreateConnectionWrapper(string connectionStringName)  
  23.         {  
  24.             PublicHelper.CheckArgument(connectionStringName, "connectionStringName");  
  25.  
  26.             string providerInvariantName = "System.Data.SqlClient";  
  27.             string connectionString = null;  
  28.             ConnectionStringSettings connectionStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName];  
  29.             if (connectionStringSetting != null)  
  30.             {  
  31.                 providerInvariantName = connectionStringSetting.ProviderName;  
  32.                 connectionString = connectionStringSetting.ConnectionString;  
  33.             }  
  34.             if (connectionString == null)  
  35.             {  
  36.                 throw PublicHelper.ThrowComponentException("名稱為“" + connectionStringName + "”數(shù)據(jù)庫連接串的ConnectionString值為空。");  
  37.             }  
  38.             string wrappedConnectionString = "wrappedProvider=" + providerInvariantName + ";" + connectionString;  
  39.             EFCachingConnection connection = new EFCachingConnection  
  40.             {  
  41.                 ConnectionString = wrappedConnectionString,  
  42.                 CachingPolicy = CachingPolicy.CacheAll,  
  43.                 Cache = InMemoryCache  
  44.             };  
  45.  
  46.             return connection;  
  47.         }  
  48.     }  

這里緩存策略使用了緩存所有數(shù)據(jù)(CacheAllPolicy)的策略,在實(shí)際項(xiàng)目中,最好自定義緩存策略,而不要使用這個(gè)策略,以免服務(wù)器內(nèi)存被撐爆。

#p#

我們?cè)趹?yīng)用程序配置(Web.Config或App.Config)中,添加一個(gè)名為“EntityFrameworkCachingEnabled”的AppSettings節(jié)點(diǎn),用來進(jìn)行啟用/禁用緩存的開關(guān)配置。

  1. <appSettings> 
  2.    ...  
  3.     <add key="EntityFrameworkCachingEnabled" value="true" /> 
  4.    ...  
  5.   </appSettings> 

另外,緩存擴(kuò)展還需要我們?cè)谂渲梦募刑砑尤缦鹿?jié)點(diǎn)的配置:

  1. <system.data> 
  2.     <DbProviderFactories> 
  3.       <add name="EF Caching Data Provider" invariant="EFCachingProvider" description="Caching Provider Wrapper" type="EFCachingProvider.EFCachingProviderFactory, GMF.Component.Data" /> 
  4.       <add name="EF Generic Provider Wrapper" invariant="EFProviderWrapper" description="Generic Provider Wrapper" type="EFProviderWrapperToolkit.EFProviderWrapperFactory, GMF.Component.Data" /> 
  5.     </DbProviderFactories> 
  6.   </system.data> 

再來看看,怎樣使用“EntityFrameworkCachingEnabled”配置來控制緩存功能的開關(guān)。我們的設(shè)計(jì)中,DbContext對(duì)象的注入點(diǎn)為如下所示的Context屬性:

所以,我們只需要在UnitOfWorkContextBase的派生類中讀取 EntityFrameworkCachingEnabled 進(jìn)行切換即可。

  1. namespace GMF.Component.Data  
  2. {  
  3.     /// <summary>  
  4.     ///     數(shù)據(jù)單元操作類  
  5.     /// </summary>  
  6.     [Export(typeof (IUnitOfWork))]  
  7.     public class EFRepositoryContext : UnitOfWorkContextBase  
  8.     {  
  9.         /// <summary>  
  10.         ///     獲取 當(dāng)前使用的數(shù)據(jù)訪問上下文對(duì)象  
  11.         /// </summary>  
  12.         protected override DbContext Context  
  13.         {  
  14.             get 
  15.             {  
  16.                 bool secondCachingEnabled = ConfigurationManager.AppSettings["EntityFrameworkCachingEnabled"].CastTo(false);  
  17.                 return secondCachingEnabled ? EFCachingDbContext.Value : EFDbContext.Value;  
  18.             }  
  19.         }  
  20.  
  21.         [Import("EF"typeof (DbContext))]  
  22.         private Lazy<EFDbContext> EFDbContext { getset; }  
  23.  
  24.         [Import("EFCaching"typeof(DbContext))]  
  25.         private Lazy<EFCachingDbContext> EFCachingDbContext { getset; }  
  26.     }  

注意,因?yàn)镋FDbContext與EFCachingDbContext兩個(gè)屬性只能同時(shí)用到其中之一,導(dǎo)入需要使用Lazy<>類型來包裝,這樣沒用到的屬性就不會(huì)實(shí)例化了。

下面,我們來測(cè)試一下緩存功能是否生效,就用上篇的那個(gè)翻頁列表吧。判斷標(biāo)準(zhǔn)為SQL Server Profiler是否有SQL語句執(zhí)行。為方便演示,這里在列表的下方顯示當(dāng)前的時(shí)間,以便與SQL Server Profiler中的時(shí)間進(jìn)行匹配。

 第1頁不計(jì)。

點(diǎn)擊第2頁,執(zhí)行了查詢:

點(diǎn)擊第3頁,執(zhí)行了查詢:

再回到第2頁,沒有執(zhí)行查詢:

點(diǎn)擊第4頁,執(zhí)行了查詢:

結(jié)論:重復(fù)第2頁的時(shí)候,數(shù)據(jù)已經(jīng)緩存了,沒有讀數(shù)據(jù)庫查詢數(shù)據(jù),說明緩存已經(jīng)生效了。

最后要提示的一點(diǎn):

帶緩存的上下文不能擔(dān)當(dāng)生成數(shù)據(jù)庫的職責(zé),因此在第一次運(yùn)行生成數(shù)據(jù)庫的時(shí)候,必須關(guān)閉緩存。

 

三、源碼獲取

為了讓大家能第一時(shí)間獲取到本架構(gòu)的最新代碼,也為了方便我對(duì)代碼的管理,本系列的源碼已加入微軟的開源項(xiàng)目網(wǎng)站 http://www.codeplex.com,地址為:

https://gmframework.codeplex.com/

原文鏈接:http://www.cnblogs.com/guomingfeng/p/mvc-ef-caching.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2009-06-18 15:24:35

Hibernate二級(jí)

2009-09-21 14:59:31

Hibernate二級(jí)

2009-09-24 11:04:56

Hibernate二級(jí)

2009-09-21 14:39:40

Hibernate二級(jí)

2009-09-21 13:31:10

Hibernate 3

2009-09-23 09:37:07

Hibernate緩存

2009-06-10 15:00:58

Hibernate二級(jí)配置

2025-04-29 07:06:20

2013-09-08 21:41:10

RepositoryUnitOfWorkDbContext

2013-09-08 22:40:38

EF Code Fir數(shù)據(jù)查詢架構(gòu)設(shè)計(jì)

2024-12-03 14:38:07

CaffeineRedis二級(jí)緩存

2009-08-13 18:12:12

Hibernate 3

2022-12-02 12:01:30

Spring緩存生命周期

2022-03-01 18:03:06

Spring緩存循環(huán)依賴

2013-09-08 23:37:30

EF Code Fir架構(gòu)設(shè)計(jì)MVC架構(gòu)設(shè)計(jì)

2015-06-11 10:12:26

Android圖片加載緩存

2022-01-12 07:48:19

緩存Spring 循環(huán)

2025-06-26 01:55:00

2023-04-27 08:18:10

MyBatis緩存存儲(chǔ)

2019-08-21 14:34:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

午夜国产福利在线观看| 九九热这里只有精品6| 欧美视频免费看欧美视频| 欧洲毛片在线| 美腿丝袜在线亚洲一区 | 欧美影院久久久| 日本伦理一区二区三区| jizz性欧美23| 色婷婷精品久久二区二区蜜臀av| 亚洲高清在线观看一区| 午夜精品久久久久久久99 | 91av在线播放视频| 免费一级特黄3大片视频| 91久久精品无嫩草影院 | 国产一区亚洲二区三区| 秋霞午夜在线观看| 99re视频精品| 91视频免费网站| 亚洲欧美综合另类| 一本一本久久a久久综合精品| 日韩精品久久久久| 在线不卡一区二区三区| 高清视频在线观看三级| 国产女主播一区| 国产女人水真多18毛片18精品 | 国产精品美女毛片真酒店| 凹凸精品一区二区三区| 国产精品日韩精品中文字幕| 日韩视频在线你懂得| 国产精品-区区久久久狼| 18+激情视频在线| 中文欧美字幕免费| 欧美日本亚洲| 色婷婷中文字幕| 国产美女在线观看一区| 国产精品入口免费视| 久久国产视频精品| 亚洲激情精品| 欧美激情久久久| 国产精品视频一区二区三 | www.久久久久| 中文字幕免费在线看线人动作大片| 成人av资源网址| 日韩一区二区三区高清免费看看| 永久免费的av网站| 国产成人精选| 在线看日本不卡| 亚洲色欲综合一区二区三区| 蜜桃麻豆影像在线观看| 午夜精品免费在线| avav在线播放| aaa大片在线观看| 亚洲丝袜另类动漫二区| 色中文字幕在线观看| 欧美成人精品一区二区男人看| 国产婷婷精品av在线| 欧美人xxxxx| 久久综合九色综合久| 久久久久亚洲蜜桃| 亚洲春色在线| 麻豆视频在线免费观看| 中文字幕一区二区三区不卡在线| 亚洲欧美丝袜| 老司机午夜在线视频| 亚洲欧洲日韩一区二区三区| 2021狠狠干| 久久久久黄久久免费漫画| 亚洲综合自拍偷拍| 欧美牲交a欧美牲交| 亚洲十八**毛片| 在线免费一区三区| 日韩高清第一页| 欧美国产亚洲精品| 亚洲国产精品悠悠久久琪琪 | 色吊丝一区二区| 亚洲欧美日韩爽爽影院| 亚洲综合欧美综合| 亚洲精品二区三区| 久久久影视精品| 欧美特黄aaaaaa| 奇米色一区二区| 亚洲www视频| 欧美一级特黄aaaaaa| 91亚洲精品乱码久久久久久蜜桃| 青青草原亚洲| av理论在线观看| 天天影视网天天综合色在线播放| 97公开免费视频| 国产色99精品9i| 日韩成人av一区| 日本美女xxx| 欧美精选在线| 国产精品国内视频| 国产wwwxxx| 26uuu国产在线精品一区二区| 亚洲视频电影| free性欧美16hd| 欧美午夜片在线观看| 久久发布国产伦子伦精品| 婷婷成人在线| 久久国产精品久久国产精品| 国产成人免费看| 国产一区二区中文字幕| 麻豆成人小视频| xvideos国产在线视频| 欧美色播在线播放| 亚洲在线观看网站| 国产探花一区在线观看| 欧美精品福利在线| 中文字幕激情视频| 成人av免费在线观看| 水蜜桃亚洲精品| 草草在线视频| 日韩一区二区三区高清免费看看| 熟女少妇内射日韩亚洲| 一区视频在线看| 成人午夜黄色影院| 黄色小视频在线观看| 亚洲一区二区欧美日韩| 亚洲天堂网2018| 国产精品中文字幕亚洲欧美| 久久久久久有精品国产| 97人妻人人澡人人爽人人精品| 久久久久久久网| 欧美深夜福利视频| 欧美2区3区4区| 久久久国产91| 一区二区日韩在线观看| 久久久久亚洲综合| 欧美 国产 日本| 精品亚洲免a| 欧美激情三级免费| 91极品身材尤物theporn| 久久久久99精品一区| 久久精品国产精品亚洲色婷婷| av不卡一区二区| 欧美成人四级hd版| 国产精品伦一区二区三区| 中文字幕av在线一区二区三区| 18禁免费无码无遮挡不卡网站 | 日韩成人av网站| 男人天堂视频在线观看| 亚洲福利在线播放| 日本一二三区视频| 成人涩涩免费视频| www.亚洲成人网| www.久久久.com| 久久夜精品香蕉| 国产视频在线观看免费| 亚洲天堂2016| 性高潮久久久久久| 国产综合激情| 国产精品theporn88| 国产高清在线a视频大全| 日韩视频免费观看高清完整版 | 色丁香久综合在线久综合在线观看| 中文字幕av观看| 久久蜜桃资源一区二区老牛| 欧美日韩一区在线视频| av免费在线一区| 色阁综合伊人av| 国产乱淫a∨片免费观看| 亚洲三级久久久| 人妻精品久久久久中文字幕69| 亚洲五月婷婷| 老牛影视免费一区二区| 最新欧美电影| 中文字幕亚洲综合| 国产精品国产三级国产aⅴ| 中文字幕一区二区三区不卡在线| 国产91在线免费观看| 1000部精品久久久久久久久| 久久久久久99| 精品国产黄a∨片高清在线| 神马久久久久久| www.蜜臀av| 精品福利樱桃av导航| 国产免费无遮挡吸奶头视频| 蜜桃av噜噜一区| 日韩欧美不卡在线| 国产成人精品免费视| 国产啪精品视频网站| 99视频免费在线观看| 亚洲国产精品系列| 亚洲天天综合网| 夜夜嗨av一区二区三区| 国产中年熟女高潮大集合| 免费看欧美女人艹b| 奇米777四色影视在线看| 欧美三级午夜理伦三级在线观看 | 啪啪小视频网站| 亚洲精品免费在线播放| 一级特级黄色片| 久久精品国产成人一区二区三区 | 欧美一区二区三区电影在线观看 | 欧美丰满少妇xxxxx高潮对白| 久久久久久久久久久网| 久久久久久久久久久久久久久99| 国产又黄又猛的视频| 亚洲毛片av| 一区二区在线中文字幕电影视频| 粉嫩av一区二区| 国产日韩欧美视频| 英国三级经典在线观看| 欧美成人精品xxx| 国产精品影院在线| 亚洲第一精品电影| 国产又粗又猛视频| 色婷婷激情一区二区三区| 黄色一级视频在线观看| 亚洲国产精品激情在线观看| 男男做爰猛烈叫床爽爽小说| 精品一区二区影视| www.日本xxxx| 99riav1国产精品视频| 国产91av视频在线观看| 国产精品一在线观看| 国内不卡一区二区三区| 狂野欧美xxxx韩国少妇| 国产精品久久久久久久av大片| 91色在线看| 久久99热这里只有精品国产| av在线电影免费观看| 日韩精品免费一线在线观看| 精品人妻一区二区三区含羞草| 欧美性猛交xxxx黑人交| 韩国av中文字幕| 亚洲高清视频在线| 曰本女人与公拘交酡| 中文字幕视频一区| 久久日免费视频| 久久久久久久久岛国免费| 无码精品一区二区三区在线播放| 国产成人久久精品77777最新版本| 岛国毛片在线播放| 美国欧美日韩国产在线播放| 妺妺窝人体色www在线观看| 久久精品国产清高在天天线| 9久久9毛片又大又硬又粗| 亚洲激情自拍| 久无码久无码av无码| 好吊一区二区三区| 99国产精品白浆在线观看免费| 正在播放日韩欧美一页| 懂色av粉嫩av蜜臀av| 伊人成综合网| 久久人妻无码一区二区| 在线观看免费一区二区| www.-级毛片线天内射视视| 久久综合成人| 成年人三级视频| 欧美激情1区2区3区| 999久久欧美人妻一区二区| 欧美体内she精视频在线观看| 日本大胆人体视频| 激情丁香综合| 久色视频在线播放| 老鸭窝亚洲一区二区三区| 成人免费无码av| 免费在线观看成人| 亚洲制服中文字幕| 成人黄色av电影| 成年人网站免费看| 欧美国产综合色视频| 林心如三级全黄裸体| 专区另类欧美日韩| 豆国产97在线 | 亚洲| 欧美视频免费在线| 天天操夜夜操视频| 欧美久久久一区| 高h放荡受浪受bl| 日韩精品在线第一页| 国产尤物视频在线| 久久久成人精品视频| 超碰成人av| 国产精品久久久久久久久免费看| 欧美综合社区国产| 国产精品初高中精品久久| 西野翔中文久久精品国产| 色综合电影网| 欧美国产先锋| 久久国产乱子伦免费精品| 久久国产福利国产秒拍| 亚洲一二三四五| 国产性做久久久久久| 91插插插插插插| 精品久久久久久久久久ntr影视| 亚洲av无码乱码国产精品fc2| 欧美一区二区三区视频免费| 亚洲av成人精品日韩在线播放| 日韩在线视频二区| 美女的胸无遮挡在线观看| 国产精品久久久久久久久久久新郎| 国内不卡的一区二区三区中文字幕 | 每日在线更新av| 极品尤物av久久免费看| 少妇精品一区二区| 成人欧美一区二区三区黑人麻豆| 日韩三级av在线| 这里只有精品视频在线观看| 欧美色综合一区二区三区| 欧美成人黑人xx视频免费观看| 毛片无码国产| 国产高清在线一区二区| 日韩欧美1区| 粗暴91大变态调教| 成人综合在线网站| 99re6热在线精品视频| 欧美日韩在线影院| 亚洲女人18毛片水真多| 日韩性生活视频| 国内老司机av在线| 国产欧美日韩高清| 中文精品一区二区| 欧美一级视频免费看| 国产美女一区二区| 综合 欧美 亚洲日本| 色天天综合色天天久久| 免费观看黄色一级视频| 不卡毛片在线看| 在线免费成人| 亚洲一区美女| 青青草精品视频| 美女爆乳18禁www久久久久久| 亚洲国产日韩一级| www.国产精品视频| 久久精品欧美视频| 欧洲美女精品免费观看视频| 日韩av电影免费观看| 免费一区视频| 添女人荫蒂视频| 调教+趴+乳夹+国产+精品| 精品免费久久久| 欧美成人中文字幕| 精品91福利视频| 国产盗摄视频在线观看| 国产一区二区精品在线观看| 国精产品一区一区二区三区mba| 欧美色综合久久| av资源网在线观看| 国产精品自产拍高潮在线观看| 日韩成人影院| 日韩av片专区| 成人欧美一区二区三区| 国产精品无码天天爽视频| 久久综合九色九九| 久久久久久亚洲精品美女| 日韩不卡视频一区二区| 国产乱子伦视频一区二区三区| 五月天婷婷色综合| 日韩欧美高清dvd碟片| 免费网站在线观看人| 国产精品视频一区二区三区经| 在线国产欧美| 不卡一区二区在线观看| 色婷婷精品久久二区二区蜜臀av| 黄色在线视频观看网站| 国产精品在线看| 亚洲一区 二区 三区| 97中文字幕在线观看| 性做久久久久久免费观看| 亚洲av片在线观看| 国产精品成人aaaaa网站| 成人在线一区| 日日夜夜精品视频免费观看 | 69sex久久精品国产麻豆| 99久久久免费精品国产一区二区 | 欧美久久一二三四区| 青春草在线视频| 精品高清视频| 日本人妖一区二区| 国产性生活大片| 亚洲精品一区二区三区福利| 中文字幕不卡三区视频| 亚洲二区自拍| 国产成人免费视频精品含羞草妖精| 日韩三级小视频| 中文字幕av一区中文字幕天堂| 国产日韩在线观看视频| 干日本少妇首页| 综合久久综合久久| 人妻精品一区一区三区蜜桃91| 日韩暖暖在线视频| 欧美 日韩 国产一区二区在线视频 | 国产精品.xx视频.xxtv| 国产激情片在线观看| 2022国产精品视频| 国产一区二区三区黄片| 成人高潮成人免费观看| 国产视频在线观看一区二区| 91精品国产经典在线观看| 亚洲男人7777| 日韩另类视频| wwwwww欧美| 国产清纯白嫩初高生在线观看91 | 午夜大片在线观看| 亚洲精品美国一| 国产人成在线观看| 91在线精品观看| 日本在线不卡一区|