国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Mybatis的緩存——一級(jí)緩存和源碼分析

共 4508字,需瀏覽 10分鐘

 ·

2020-11-16 23:04

點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

? 作者?|??isdxh

來(lái)源 |? urlify.cn/Ynq6ry

66套java從入門到精通實(shí)戰(zhàn)課程分享

什么是緩存?

緩存就是存在內(nèi)存中的數(shù)據(jù),而內(nèi)存讀取都是非??斓?,通常我們會(huì)把更新變動(dòng)不太頻繁查詢頻繁的數(shù)據(jù),在第一次從數(shù)據(jù)庫(kù)查詢出后,存放在緩存中,這樣就可以避免之后多次的與數(shù)據(jù)庫(kù)進(jìn)行交互,從而提升響應(yīng)速度。

mybatis 也提供了對(duì)緩存的支持,分為:

  • 一級(jí)緩存

  • 二級(jí)緩存

  1. 一級(jí)緩存:
    每個(gè)sqlSeesion對(duì)象都有一個(gè)一級(jí)緩存,我們?cè)诓僮鲾?shù)據(jù)庫(kù)時(shí)需要構(gòu)造sqlSeesion對(duì)象,在對(duì)象中有一個(gè)HashMap用于存儲(chǔ)緩存數(shù)據(jù)。不同的sqlSession之間的緩存數(shù)據(jù)區(qū)域(HashMap)是互不影響的。

  2. 二級(jí)緩存:
    二級(jí)緩存是mapper級(jí)別(或稱為namespace級(jí)別)的緩存,多個(gè)sqlSession去操作同一個(gè)Mapper的sql語(yǔ)句,多個(gè)SqlSession可以共用二級(jí)緩存,二級(jí)緩存是跨sqlSession的。


一級(jí)緩存

首先我們來(lái)開一級(jí)緩存,一級(jí)緩存是默認(rèn)開啟的,所以我們可以很方便來(lái)體驗(yàn)一下一級(jí)緩存。

測(cè)試一、

準(zhǔn)備一張表,有兩個(gè)字段id和username

在測(cè)試類中:

public?class?TestCache?{
????private?SqlSession?sqlSession;
????private?UserMapper?mapper;
????@Before
????public?void?before()?throws?IOException?{
????????InputStream?resourceAsStream?=?Resources.getResourceAsStream("sqlMapConfig.xml");
????????SqlSessionFactory?build?=?new?SqlSessionFactoryBuilder().build(resourceAsStream);
????????sqlSession?=?build.openSession();
????????mapper?=?sqlSession.getMapper(UserMapper.class);
????}

????@Test
????public?void?testFirst(){
????????//第一次查詢————首先去一級(jí)緩存中查詢
????????User?user1?=?mapper.findById(1);
????????System.out.println("======"+user1);
??//第二次查詢
????????User?user2?=?mapper.findById(1);
????????System.out.println("======"+user2);
????????
????????System.out.println(user1==user2);
????}
}

我們用同一個(gè)sqlSession分別根據(jù)id來(lái)查詢用戶,id都為1,之后再比較它們的地址值。來(lái)看一下結(jié)果:

23:16:25,818?DEBUG?findById:159?-?==>??Preparing:?select?*?from?user?where?id=??
23:16:25,862?DEBUG?findById:159?-?==>?Parameters:?1(Integer)
23:16:25,894?DEBUG?findById:159?-?<==??????Total:?1
======User{id=1,?username='lucy'}
======User{id=1,?username='lucy'}
true

我們發(fā)現(xiàn)只打印了一條SQL,同時(shí)它們的地址值一致。

說(shuō)明第一次查詢,緩存中沒(méi)有,然后從數(shù)據(jù)庫(kù)中查詢——執(zhí)行SQL,然后存入緩存,第二次查詢時(shí)發(fā)現(xiàn)緩存中有了,所以直接從緩存中取出,不再執(zhí)行SQL了。

我們剛才提到,一級(jí)緩存的數(shù)據(jù)結(jié)構(gòu)是一個(gè)hashmap,也就是說(shuō)有key有value。
value就是我們查詢出的結(jié)果,key是由多個(gè)值組成的:

  • statementid?:namespace.id組成

  • params:查詢時(shí)傳入的參數(shù)

  • boundsql:mybatis底層的對(duì)象,它封裝著我們要執(zhí)行的sql

  • rowbounds:分頁(yè)對(duì)象

  • ...還有一些會(huì)在源碼分析中道明

測(cè)試二、

我們現(xiàn)在修改一下,我們?cè)诓樵兊谝淮谓Y(jié)果后,修改一下數(shù)據(jù)庫(kù)的值,然后再進(jìn)行第二次查詢,我們來(lái)看一下查詢結(jié)果。id=1 的username為lucy

@Test
????public?void?testFirst(){
????????//第一次查詢
????????User?user1?=?mapper.findById(1);
????????System.out.println("======"+user1);

????????//修改id為1的username
????????User?updateUser?=?new?User();
????????updateUser.setId(1);
????????updateUser.setUsername("李思");
????????mapper.updateUser(updateUser);
????????//手動(dòng)提交事務(wù)
????????sqlSession.commit();

????????//第二次查詢
????????User?user2?=?mapper.findById(1);
????????System.out.println("======"+user2);

????????System.out.println(user1==user2);
????}

在提交事務(wù)的地方打一個(gè)斷點(diǎn),可以看到執(zhí)行了兩條sql,一個(gè)是查詢id為1,一個(gè)是修改id為1的username

最終結(jié)果:

23:50:15,933?DEBUG?findById:159?-?==>??Preparing:?select?*?from?user?where?id=??
23:50:15,976?DEBUG?findById:159?-?==>?Parameters:?1(Integer)
23:50:16,002?DEBUG?findById:159?-?<==??????Total:?1
======User{id=1,?username='lucy',?roleList=null,?orderList=null}
23:50:16,003?DEBUG?updateUser:159?-?==>??Preparing:?update?user?set?username=??where?id?=??
23:50:16,005?DEBUG?updateUser:159?-?==>?Parameters:?李思(String),?1(Integer)
23:50:16,016?DEBUG?updateUser:159?-?<==????Updates:?1
23:53:18,316?DEBUG?JdbcTransaction:70?-?Committing?JDBC?Connection?[com.mysql.jdbc.JDBC4Connection@421e361]
23:53:22,306?DEBUG?findById:159?-?==>??Preparing:?select?*?from?user?where?id=??
23:53:22,306?DEBUG?findById:159?-?==>?Parameters:?1(Integer)
23:53:22,307?DEBUG?findById:159?-?<==??????Total:?1
======User{id=1,?username='李思',?roleList=null,?orderList=null}


我們看到,最終打印了3條sql,再進(jìn)行修改后的第二次查詢也打印了。

說(shuō)明在第二次查詢時(shí)在緩存中找不到所對(duì)應(yīng)的key了。在進(jìn)行修改操作時(shí),會(huì)刷新緩存

我們也可以通過(guò)sqlSession.clearCache();手動(dòng)刷新一級(jí)緩存

總結(jié):

  • 一級(jí)緩存的數(shù)據(jù)結(jié)構(gòu)時(shí)HashMap

  • 不同的SqlSession的一級(jí)緩存互不影響

  • 一級(jí)緩存的key是由多個(gè)值組成的,value就是其查詢結(jié)果

  • 增刪改操作會(huì)刷新一級(jí)緩存

  • 通過(guò)sqlSession.clearCache()手動(dòng)刷新一級(jí)緩存

一級(jí)緩存源碼分析:

我們?cè)诜治鲆患?jí)緩存之前帶著一些疑問(wèn)來(lái)讀代碼

  1. 一級(jí)緩存是什么?真的是上面說(shuō)的HashMap嗎?

  2. 一級(jí)緩存什么時(shí)候被創(chuàng)建?

  3. 一級(jí)緩存的工作流程是怎么樣的?

1. 一級(jí)緩存到底是什么?

之前說(shuō)不同的SqlSession的一級(jí)緩存互不影響,所以我從SqlSession這個(gè)類入手

可以看到,org.apache.ibatis.session.SqlSession中有一個(gè)和緩存有關(guān)的方法——clearCache()刷新緩存的方法,點(diǎn)進(jìn)去,找到它的實(shí)現(xiàn)類DefaultSqlSession

@Override
??public?void?clearCache()?{
????executor.clearLocalCache();
??}

再次點(diǎn)進(jìn)去executor.clearLocalCache(),再次點(diǎn)進(jìn)去并找到其實(shí)現(xiàn)類BaseExecutor

@Override
??public?void?clearLocalCache()?{
????if?(!closed)?{
??????localCache.clear();
??????localOutputParameterCache.clear();
????}
??}

進(jìn)入localCache.clear()方法。進(jìn)入到了org.apache.ibatis.cache.impl.PerpetualCache類中

package?org.apache.ibatis.cache.impl;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.concurrent.locks.ReadWriteLock;
import?org.apache.ibatis.cache.Cache;
import?org.apache.ibatis.cache.CacheException;
/**
?*?@author?Clinton?Begin
?*/
public?class?PerpetualCache?implements?Cache?{
??private?final?String?id;

??private?Map?cache?=?new?HashMap();

??public?PerpetualCache(String?id)?{
????this.id?=?id;
??}

??//省略部分...
??@Override
??public?void?clear()?{
????cache.clear();
??}
??//省略部分...
}

我們看到了PerpetualCache類中有一個(gè)屬性private Map cache = new HashMap(),很明顯它是一個(gè)HashMap,我們所調(diào)用的.clear()方法,實(shí)際上就是調(diào)用的Map的clear方法

得出結(jié)論:

一級(jí)緩存的數(shù)據(jù)結(jié)構(gòu)確實(shí)是HashMap

2. 一級(jí)緩存什么時(shí)候被創(chuàng)建?

我們進(jìn)入到org.apache.ibatis.executor.Executor
看到一個(gè)方法CacheKey createCacheKey(MappedStatement ms, Object parameterObject, RowBounds rowBounds, BoundSql boundSql)?,見名思意是一個(gè)創(chuàng)建CacheKey的方法
找到它的實(shí)現(xiàn)類和方法org.apache.ibatis.executor.BaseExecuto.createCacheKey

我們分析一下創(chuàng)建CacheKey的這塊代碼:

public?CacheKey?createCacheKey(MappedStatement?ms,?Object?parameterObject,?RowBounds?rowBounds,?BoundSql?boundSql)?{
????if?(closed)?{
??????throw?new?ExecutorException("Executor?was?closed.");
????}
????//初始化CacheKey
????CacheKey?cacheKey?=?new?CacheKey();
????//存入statementId
????cacheKey.update(ms.getId());
????//分別存入分頁(yè)需要的Offset和Limit
????cacheKey.update(rowBounds.getOffset());
????cacheKey.update(rowBounds.getLimit());
????//把從BoundSql中封裝的sql取出并存入到cacheKey對(duì)象中
????cacheKey.update(boundSql.getSql());
????//下面這一塊就是封裝參數(shù)
????List?parameterMappings?=?boundSql.getParameterMappings();
????TypeHandlerRegistry?typeHandlerRegistry?=?ms.getConfiguration().getTypeHandlerRegistry();

????for?(ParameterMapping?parameterMapping?:?parameterMappings)?{
??????if?(parameterMapping.getMode()?!=?ParameterMode.OUT)?{
????????Object?value;
????????String?propertyName?=?parameterMapping.getProperty();
????????if?(boundSql.hasAdditionalParameter(propertyName))?{
??????????value?=?boundSql.getAdditionalParameter(propertyName);
????????}?else?if?(parameterObject?==?null)?{
??????????value?=?null;
????????}?else?if?(typeHandlerRegistry.hasTypeHandler(parameterObject.getClass()))?{
??????????value?=?parameterObject;
????????}?else?{
??????????MetaObject?metaObject?=?configuration.newMetaObject(parameterObject);
??????????value?=?metaObject.getValue(propertyName);
????????}
????????cacheKey.update(value);
??????}
????}
????//從configuration對(duì)象中(也就是載入配置文件后存放的對(duì)象)把EnvironmentId存入
????????/**
?????*?????"development">
?????*?????????"development">?//就是這個(gè)id
?????*?????????????
?????*?????????????type="JDBC">
?????*?????????????
?????*?????????????type="POOLED">
?????*?????????????????"driver"?value="${jdbc.driver}"/>
?????*?????????????????"url"?value="${jdbc.url}"/>
?????*?????????????????"username"?value="${jdbc.username}"/>
?????*?????????????????"password"?value="${jdbc.password}"/>
?????*?????????????
?????*?????????
?????*?????
?????*/
????if?(configuration.getEnvironment()?!=?null)?{
??????//?issue?#176
??????cacheKey.update(configuration.getEnvironment().getId());
????}
????//返回
????return?cacheKey;
??}

我們?cè)冱c(diǎn)進(jìn)去cacheKey.update()方法看一看

/**
?*?@author?Clinton?Begin
?*/
public?class?CacheKey?implements?Cloneable,?Serializable?{
??private?static?final?long?serialVersionUID?=?1146682552656046210L;
??public?static?final?CacheKey?NULL_CACHE_KEY?=?new?NullCacheKey();
??private?static?final?int?DEFAULT_MULTIPLYER?=?37;
??private?static?final?int?DEFAULT_HASHCODE?=?17;

??private?final?int?multiplier;
??private?int?hashcode;
??private?long?checksum;
??private?int?count;
??//值存入的地方
??private?transient?List?updateList;
??//省略部分方法......
??//省略部分方法......
??public?void?update(Object?object)?{
????int?baseHashCode?=?object?==?null???1?:?ArrayUtil.hashCode(object);?
????count++;
????checksum?+=?baseHashCode;
????baseHashCode?*=?count;
????hashcode?=?multiplier?*?hashcode?+?baseHashCode;
????//看到把值傳入到了一個(gè)list中
????updateList.add(object);
??}
?
??//省略部分方法......
}

我們知道了那些數(shù)據(jù)是在CacheKey對(duì)象中如何存儲(chǔ)的了。下面我們返回createCacheKey()方法。

Ctrl+鼠標(biāo)左鍵 點(diǎn)擊方法名,查詢有哪些地方調(diào)用了此方法

我們進(jìn)入BaseExecutor,可以看到一個(gè)query()方法:

這里我們很清楚的看到,在執(zhí)行query()方法前,CacheKey方法被創(chuàng)建了

3. 一級(jí)緩存的執(zhí)行流程

我們可以看到,創(chuàng)建CacheKey后調(diào)用了query()方法,我們?cè)俅吸c(diǎn)進(jìn)去:

在執(zhí)行SQL前如何在一級(jí)緩存中找不到Key,那么將會(huì)執(zhí)行sql,我們來(lái)看一下執(zhí)行sql前后會(huì)做些什么,進(jìn)入

list?=?queryFromDatabase(ms,?parameter,?rowBounds,?resultHandler,?key,?boundSql);


分析一下:

private??List?queryFromDatabase(MappedStatement?ms,?Object?parameter,?RowBounds?rowBounds,?ResultHandler?resultHandler,?CacheKey?key,?BoundSql?boundSql)?throws?SQLException?{
????List?list;
????//1.?把key存入緩存,value放一個(gè)占位符
?localCache.putObject(key,?EXECUTION_PLACEHOLDER);
????try?{
??????//2.?與數(shù)據(jù)庫(kù)交互
??????list?=?doQuery(ms,?parameter,?rowBounds,?resultHandler,?boundSql);
????}?finally?{
??????//3.?如果第2步出了什么異常,把第1步存入的key刪除
??????localCache.removeObject(key);
????}
??????//4.?把結(jié)果存入緩存
????localCache.putObject(key,?list);
????if?(ms.getStatementType()?==?StatementType.CALLABLE)?{
??????localOutputParameterCache.putObject(key,?parameter);
????}
????return?list;
??}

至此,我們思路就非常的清晰了。

結(jié)論:

在執(zhí)行sql前,會(huì)首先根據(jù)CacheKey查詢緩存中有沒(méi)有,如果有,就處理緩存中的參數(shù),如果沒(méi)有,就執(zhí)行sql,執(zhí)行sql后把結(jié)果存入緩存。

一級(jí)緩存源碼分析結(jié)論:

  1. 一級(jí)緩存的數(shù)據(jù)結(jié)構(gòu)是一個(gè)HashMap,它的value就是查詢結(jié)果,它的key是CacheKey,CacheKey中有一個(gè)list屬性,statementId,params,rowbounds,sql等參數(shù)都存入到了這個(gè)list

  2. 一級(jí)緩存在調(diào)用query()方法前被創(chuàng)建。并傳入到query()方法中

  3. 會(huì)首先根據(jù)CacheKey查詢緩存中有沒(méi)有,如果有,就處理緩存中的參數(shù),如果沒(méi)有,就執(zhí)行sql,執(zhí)行sql后把結(jié)果存入緩存。


粉絲福利:實(shí)戰(zhàn)springboot+CAS單點(diǎn)登錄系統(tǒng)視頻教程免費(fèi)領(lǐng)取

???

?長(zhǎng)按上方微信二維碼?2 秒
即可獲取資料



感謝點(diǎn)贊支持下哈?

瀏覽 66
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 老婆中文字幕乱码中文乱码| 人人摸人人操人人爱| 天堂A片| 777超碰| 91成人小电影| 国产乱伦视频| 精品一区二区三区无码| 成人午夜小视频| 欧美69视频| 三级片在线看片AV| 成人性爱视频免费观看| 情侣av| 老骚老B老太太A片| 无码任你操| 亚洲精品美女| 日韩中文字幕AV| 人人操夜夜| 强伦轩一区二区三区在线观看| 视频一区二区三区免费| 电影豹妹香港版| 国产成人片在线观看| 亚洲中文字幕免费视频| 亚洲日韩精品秘在线观看| 97人人爽人人爽人人爽| 久久不射| 青青在线| 国产高清第一页| 日本亚洲黄色视频| 中韩AV在线免费观看| 影音先锋男人网| 三级片无码视频| 精品久久免费| 玖玖在线播放| 一区二区三区在线观看视频| www.av在线播放| 欧美一区二区三区不卡| 日韩一级在线观看| 黄色AV电影| www四虎com| 日本少妇高清视频| 一级a片激情啪啪免费观| 国产无码久久久| 亚洲欧美第一页| 亚洲午夜久久久久久久久久久| 无码欧美精品一区二区| 国产十八岁在线观看| 欧美AAAAAAAA| 日欧视频| 三级网站在线| 人妻少妇视频| 国产无遮挡又黄又爽又色学生软件| 婷婷五月天综合网| 真实国产乱子伦毛片| 欧美日韩在线电影| 操屄网| 欧美va在线| 中文字幕亚洲无码视频| 日韩三级片在线视频| 77777精品成人免费A片| 欧美视频区| 秋霞午夜久久| 四虎成人精品永久免费AV九九| 午夜亚洲视频| 久久久精品淫秽色情| 中日韩精品A片中文字幕| 69视频在线观看免费| 久久久无码精品亚洲日韩男男| 日本三级片免费观看| 日本高清色清di免费观看| 中文字幕免费观看| 德美日三级片在线观看| 韩国三级HD中文字幕2019年| 亚洲一区二区三区在线++中国| www.黄色| 日韩强操逼网| 国产AV无码区亚洲| 亚洲AV无码第一区二区三区蜜桃 | 亚洲熟妇在线观看一区二区| 黄色A毛片| 中文字幕成| 手机看片欧美+日韩+国产| 日韩精品无码人妻| 欧美色色综合| 中文字幕无码影院| 欧美日韩国产成人电影| 丁香五月婷婷中文字幕| 12——13女人毛片毛片| 欧美粗大| 操欧美女人| 视频一视频二在线视频| 91视频网站在线| 精品久久视频| a久久| 插穴网站| 国产A片电影| 免费黄色视频网站在线观看| www.91AV| 91男女| 欧美成人精品在线观看| 人人澡人人澡人人| 中文在线a√在线8| 天天艹夜夜艹| 黄色资源在线观看| 日日碰狠狠添| 久久精品在线观看| 三级免费无限AV| 激情性爱婷婷色五月| 色婷婷视频一区二区| 两根茎一起进去好爽A片在线观看| 黄色精品久久| 色五月婷婷五月天激情| 久久伊人在| yjizz视频网| 国产中文字幕第一页| 日韩欧美黄色电影| 51AV在线| 青草青在线视频| 97视频在线观看免费| 五月婷婷亚洲| 久久99综合| 日本18禁网站| 99热在线播放| 男女性爱视频免费| 嫩BBB槡BBBB槡BBBB| 亚洲无码少妇| 亲子伦一区二区三区观看方式| 人妻啪啪视频| 七六十路の高齢熟妇无码| 91色综合| 97国产精品视频| 91视频免费网站| 色婷婷丁香| 老师机性爱视频在线播放| yy午夜福利| 无码天天| 日韩精品极品视频在线观看免费| 夸克看成人片一级A片| 熟女国产| 性欧美69| 91看片| 亚洲在线视频观看| 做爱激情视频网站| 天堂久久av| 操屄视频免费观看| 99国产精品久久久久久久成人| 99热这里只有精| 日批国产| 一级生活片| 欧美中文字幕在线| 日韩另类| 69激情网| 后入av| 一道本无码在线视频| 翔田千里无码在线| 天堂中文在线视频| 国产中文字幕亚洲综合欧美| 婷婷色片| 中文字幕免费无码| 婷婷激情av| 亲子伦一区二区三区| 国产AⅤ| 黄色在线网站| 国产一区免费观看| 在线观看AV网站| 51AV在线| 在线免费看a| 黄片入口| 四虎无码丰满人妻| 日本色中文字幕| 欧美操逼在线观看| 国产夫妻自拍AV| 西西4444www大胆无| 99久久综合| AAA激情| 日本亚洲视频| 亚洲无码内射| 色先锋av| 日本中文字幕无码| 蜜臀AV一区二区三区免费看| 国产又粗又猛又黄又爽无遮挡| 黄色在线不卡| 波多野结衣无码一区二区| 日逼免费网站| 日本免费黄色视频| 日韩中文字幕区| 91AV在线免费观看| 日韩亚洲欧美在线观看| 日本无码一区二区三区| 日韩无码人妻一区二区三区| 中文字幕无码Av在线| 夜夜av| AV黄色在线观看| 久艹视频在线观看| 黄色精品久久| 亚洲AV秘无码不卡在线观看| 天天色天天干天天| 四虎看片| 69AV无码| 无码视频免费在线观看| 俺来了俺去也| 老司机午夜视频| 杨贵妃一级婬片90分钟| www.sese| 搡BBBB搡BBB搡五十粉嫩| 天天操天天干天天| 国产黄色视频网站在线观看| 上床网站| 欧美级毛片高潮| 麻豆熟妇乱妇熟色A片在线看| 国产免费无码视频| a网站在线观看| 色色一区| 91AV天天在线观看| 四虎成人无码| 日韩精品五区| 中文免费高清在线观看视频| 三级无码高清| 日本狠狠操| 亚洲成人av在线| 麻豆videos| 国产AⅤ无码一区二区| 亚洲成人娱乐网| 精品视频在线免费观看| 国产AV高潮| 日韩日韩日韩| AV免费在线播放| 黄色日逼视频| 成人国产三级| 综合天天| 一区二区三区毛片| 亚洲一级av无码毛片精品| 色色激情网| 免费无人区一码二码乱码怎么办 | 欧美一级在线观看| 国产成人三级在线播放| 北条麻纪无码视频| 免费一二区| A级片黄色片| 日韩欧美黄色电影| 北条麻妃人妻中文无码| 国产精品HongKong麻豆| 国产资源AV| 丁香五月影院| 阿宾MD0165麻豆沈娜娜| 中文字幕一级A片高清免| 欧美性爱福利视频| 亚洲不卡视频| 亚洲AV无码成人H动漫| 69久久久| 亚洲视频区| 欧美一级A片免费看视频小说| 成人区人妻精品一| 在线观看黄色小视频| 久操B网| 日韩av中文| 亚洲第一福利视频| 日本少妇高潮喷水XXXXXXX| 欧美特大黄| 无码三级在线观看| 精品免费黄色视频| 九九九精品在线| 国产久久久久| 99视频在线免费播放| 一级黄色毛片视频| 亚洲无码中文字幕在线观看| 国产精品久久7777777精品无码| 黄色操逼| 夜夜骚精品人妻av一区| 亚洲一线视频| 特级毛片片A片AAAAAA| 久久久久久三级电影| 亚洲a电影| 黑人无码在线| 欧美一级特黄AAAAAA片在线视频| 大奶AV| 伊人亚洲| 国产一级黄色大片| 超碰最新在线| 国产日本在线视频| 日日操网| 大香蕉A片| 大香蕉网站视频| 91嫩逼| 韩国午夜激情| 欧性猛交ⅩXXX乱大交| 韩国无码免费| 欧美特黄AAAAAA| 国产小视频在线播放| 黄色电影免费看| 亚洲一| 操BAV| 老司机在线免费视频| 内射视频在线免费观看| 水蜜桃在线视频| 免费看黄色片视频| 99在线精品视频免费观看软件| 欧美成人性色欲影院| 国产精品欧美一区二区| 夜夜操夜夜操| 草草影院第一页YYCCC| 中文字幕第6页| 亚洲色图一区二区| 色婷婷一区二区三区久久| 日韩视频一区| WWW.99热| 欧美成人猛片AAAAAAA| 免费观看成人毛片A片直播千姿| 少妇白洁视频| 国产牛牛在线| 粗长哭叫打桩H体育生| 中文人妻第9页| 91理伦| 一道本一区| 亚洲成人电影AV| 黄色视频小说| 天天玩夜夜玩天天玩国产99| 三级无码片| 国产高清视频在线| 蜜桃视频app| 99视频在线播放| 亚洲无码AV免费观看| 久操视频在线免费观看| 中文字幕69| 国产真实露脸乱子伦对白高清视频| 中文字幕东京热加勒比| 99精品无码视频| 亚洲三级无码| 91碰| 久久人体| 五月六月婷婷| 东京热高清无码| 蜜芽成人精品久久久视频| 久久久国产91桃色一区二区三区 | 干片网| av天堂资源在线| a免费视频| AV国产在线观看| 青草国产| 成人中文字幕在线视频| 成人黄片视频| 国产精品对白| 午夜成人免费视频| 中日韩精品A片中文字幕| AAAA毛片| 日韩A级视频| 亚洲图片一区| 国产草逼网站| 亚洲无码视频网站| 欧洲无码一区二区三区| 西西444WWW无码大胆| 91成人免费在线观看| 91含羞草www·Com| 熟女3p| 黄网站免费在线观看| 午夜精品久久久久久久99热精东| 日韩成人小电影| 色九九视频| 91麻豆精品传媒国产| 亚洲无码高清免费| 囯产精品宾馆在线精品酒店| 欧美色色综合| 中文字幕在线观看视频www| 激情综合在线| 大香蕉av在线| 操B在线视频| 欧美操逼视频| 欧美又粗又长| 国产18女人水真多免费看| 国产精品欧美一区二区三区苍井空 | 自拍偷拍AV| 久久久中文| 18禁网站禁片免费观看| 精品人妻一区二区三区日产乱码| 中文字幕AⅤ在线| 岛国免费视频| 91亚洲视频在线观看| 亚欧精品久久久| 亚洲欧洲在线视频| 亚洲家庭乱伦| 亚洲中文字幕av天堂| 国产精品粉嫩福利在线| 在线观看一区二区视频| HEZ-502搭讪绝品人妻系列| 国产精品色哟哟| 北条麻妃二区| 五月丁香欧美综合| 国产精品内射| 天堂网AV在线| 欧美第一网站| 国产精品久久久久久久久久久久久久 | 陈冠希和张柏芝mv| 大香蕉久久伊人| 99热这里有精品| 性无码一区二区三区在线观看| 成人一二区| 欧美精品区| 看免费操逼视频| 777777视频| 婷婷国产精品视频| 亚洲搞清视频日本| 黃色级A片一級片| 人人操人人网站| 人妻视频在线| 久久伊人综合| 一级毛AA片| 免费内射视频| 精品久久免费一区二区三区 | 最新中文字幕在线播放| 中文字幕免费高清在线观看| 爱爱视频免费网站| 丁香五月天堂网| 囯产精品一区二区三区线一牛影视1| 亚洲人人妻| 男女日比视频| 嫩BBB槡BBBB槡BBBB百度| www.中文字幕| 日韩人妻中文| 中国熟睡妇BBwBBw| 91狠狠综合久久| 大香蕉尹人视频| 国产一级免费在线观看| 少妇嫩搡BBBB搡BBBB| 资源av| 人人妻人人澡人人爽久久con| 亚洲色小说| 操逼视频下载| 婷婷五月天视频| 日韩精品久久久| 久草网址| 波多野结衣无码视频在线观看| 三级片免费网址| 婷婷五月电影| 久久久久久成人电影| 久一久久| 韩国三级中文字幕HD久久精品| 亚洲视频在线免费播放| 亚洲综人网| 黑人av| 69AV在线播放| 高清日韩欧美| Av天堂图片在线| 中文字幕国产av| 免费一区视频| 无码av无码AV| 中文字幕黄色电影| 91视频网站免费观看| 肏少妇女情人大骚逼直播一区二区 | 一区二区国产精品| 中文无码影院| 高清无码色播| 亚洲无码制服| 无码免费在线观看视频| 国产色婷婷一区二区| 俺也干| 婷婷午夜精品久久久久久| 一级片黑人| 欧美另类视频| 草草影院国产第一页| 中文字幕www一区| 天天爽天天干| 中文字幕久热| 91av在线电影| 午夜乱伦| 97自拍视频| 影音先锋在线视频观看| 六月丁香久久| 国产日韩精品无码去免费专区国产 | 成人123区| 九九这里有精品| 五月丁香婷婷色色| 五月天丁香婷婷视频| 大香蕉福利视频| 99精品在线观看视频| 扒开让我91看片在线看| 亚洲二区后入极品| 人人妻人人色| 91超碰免费在线| 亚洲无码成人AV| 欧美另类色图| 狼友视频在线免费观看| 免费自拍视频| 中文字幕高清无码在线播放| 欧美黄色一级视频| 婷婷三级片| 免费黄视频在线观看| 嫩草视频在线观看免费网站| 日皮视频免费观看| 日韩人妻码一区二区三区| 不卡无码中文字幕| 92午夜福利天堂视频2019| 人人骚| 亚洲V无码| 欧一美一婬一伦一区二区三区自慰国| 躁BBB躁BBB躁BBBBBB| 内射极品美女| 大香蕉AV在线观看| 日韩在线观看免| 女同二人91| 欧美中文字幕在线视频| 人人射人人爱| 欧美中文字| 欧美成人黄色小视频| 一级女婬片A片AAAA片| 午夜福利91| 亚洲热在线视频| 18sav| 中文字幕在线观看视频www| 成人久久网| 成人A片在线| 黄片www.| 搡BBB搡BBBB搡BBBB-百度| 97成人人妻一区二区三区| 免费看黄的网站在线观看| 中文字幕婷婷五月天| 国产欧美一区二区三区视频| 五月天无码| 国内精品久久久久久久| 国产中文自拍| 中文字幕无码A片久久| 国产亚洲av| 四虎成人视频| 国产精品不卡在线观看| 丁香婷婷综合网| 国产尤物在线| 99视频在线| 91黄色电影| 中文无码播放| 欧美日韩一级毛| 不卡无码免费视频| 中日美朝美女一级片免费看| 国产a√| 亚洲欧洲成人在线| 欧美日韩在线看| 人人舔人人爱| 人妻精品一区二区在线| 亚洲欧美中文字幕| 三级成人无码| 欧美成人在线视频网站| 国产性色AV| 99视频自拍| 91免费观看国产| 露脸丨91丨九色露脸| 99精品免费| 2025AV在线| 蜜桃Av噜噜一区二区三区四区| 日韩一区二区三区在线视频| 久久91久久久久麻豆精品| 日韩高清不卡| 99无码国产成人精品| 欧一美一婬一伦一区二区三区自慰, | 亚洲中文字幕在线视频观看| 大香蕉75在线| 国产成人午夜视频| 在线成人小视频| 亚洲有码中文字幕| 欧美日韩免费在线观看| 男人亚洲天堂| 一区二区三区网站| 黄色A片免费| 日本少妇性爱视频| 中文字幕黑人无码| 97超碰人人| 成人国产综合| 日本精品无码a62v在线| 亚洲国产精品二二三三区| 天堂网色| 嫩草国产在线| 女人的天堂网| 日本成人中文字幕在线观看 | 蜜臀久久99精品久久久久酒店更新时间 | 91福利视频网站| 操操操综合网| www.91madou| 欧美国产另类| 国产成人三级在线| 欧美日韩男女淫乱一区二区| 久草福利在线| 熟女人妻人妻HD| 翔田千里一区二区三区| 自拍做爱视频| 亚洲第一大网站| 国产人妖AV| 欧美AAAAAAAAAA特级| 996精品在线| 亚洲AV无码一区毛片AV| 新亚洲天堂男子Av-| 成人在线观看网站| 高清无码免费观看| 国产一级a一级a免费视频| 影音先锋天堂网| 草B网| 在线视频99| 亚洲AV秘无码不卡在线观看 | 日韩成人网站在线观看| 久久久免费观看视频| 亚洲成人av在线播放| 国产成人小电影| 久久久久久一区| 天天射夜夜骑| 亚洲一区欧美二区gay| 婷婷伊人綜合中文字幕小说| 欧美亚洲一区| 成人乱妇无码AV在线| 国产一级片在线播放| 美女久久| 欧美性性生交XXXXX无码| 99看片| 黄色免费一级片| 国产乱子伦一区二区三区免看| 激情人妻网站| 日韩字幕无码| 国产超级无码高清在线视频观看| 毛片学生妹| 大地8免费高清视频观看大全| 激情av天堂| aa无码视频| 婷婷亚洲综合| 亚洲午夜剧场| 91香蕉在线| 亚洲黄色电影网站| 国产精品你懂的| 影音先锋AV啪啪资源| 久久精品国产亚洲| 免费网站观看www在线观看| 爱搞搞就要搞搞| 小黄片在线看| 亚洲高清无码一区二区三区| 天堂俺去俺来也www久久婷婷| 亚洲中文字幕免费在线观看| 国产人妻精品一二三区| 在线观看视频无码| 欧美成人福利在线观看| 亚洲一区翔田千里无码| 国产精品久久久久久无人区| 久久午夜无码人妻精品蜜桃冫| 亚洲中文无码av| 久久精品视频免费看| 91天天在线| 影音先锋AV天堂| 国产超级无码高清在线视频观看| 污污污污污www在线观看优势| 老司机午夜电影| 五月丁香婷婷开心| 五月天在线电影| 精品国产精品国产精品国产网站| 操一操干一干| 樱桃码一区二区三区| 爱插美女网| 成人av黄色三级片在线观看| 天天色免费视频| 四川美女网久草| 最新福利视频| 97人妻精品黄网站| 91麻豆国产在线观看| 日韩精品一区二区三区四在线播放| 6969电视影片最新更新| gogogo高清在线完整免费播放韩国 | 成人无码免费毛片A片| 国产精品内射| 无码乱伦| 九七影院第二页| 国产乱伦不卡| 伊人在线成人视频| 人人干人人操人人爱| 69成人精品视频| 蜜臀久久99精品久久一区二区| 亚洲三级无码视频| 人人澡人人妻人人爽| 操逼操逼操| 亚洲最新在线观看| 色婷婷狠狠操| 激情小说在线观看| 在线免费中文字幕| 91碰| 日韩欧美中文字幕在线视频| 蜜桃Av噜噜一区| 俺也去大香蕉| 日韩一卡二卡| 亚洲成人免费在线观看| 蜜桃av在线播放| 成人在线中文字幕| 麻豆视频在线观看| 中文字幕AV在线播放| 欧美日韩成人| 小草久久95| 国产麻豆精品ThePorn| 综合激情视频| 日韩三级麻豆| 国产18禁网站| 成人在线一区二区三区| 欧美囗交大荫蒂免费| 大地资源38页| 久久黄色免费视频| 日韩AV免费在线| 黄页网站免费在线观看| 日韩成人无码视频| 国产激情av| 天堂亚洲AV无码精品成人| 欧美日韩群交| 人人操人人爽人人爱| 国产一级AA大片毛片| www.黄色av| 亚洲av小说| 久久久久久伊人| 欧美日韩性爱网站| 麻豆国产91在线播放| 安徽妇搡BBBB搡BBBB| www.男人天堂| 韩国成人啪啪无码高潮| 国产91在线视频| 日韩插泄| 欧美在线观看网站18| 亚洲天堂久久久| 天堂va欧美ⅴa亚洲va一夜| 日韩专区在线观看| 一级黄色小视频| 久久成人导航| 中文av在线播放| 色人人| 免费无码视频| 亚洲精品无码永久| 欧美日韩在线观看一区二区三区| 国产xxxx视频| 日韩日日夜夜| 精品欧美视频| 午夜AV无码| 亚洲日韩成人| 女人18特级毛片。| 中文字幕线观看| 奇米av在线| 亚洲无码高清在线视频| 国产做受91一片二片老头| 免费无码婬片AAAA片直播| 欧美AAAAAA| 免费看一区二区三区A片| 亚洲日韩中文字幕| 亚洲av小电影| 亚洲AV无码成人H动漫| 3D动漫精品一区二区在线播放免费| 五月丁香婷婷激情| 91网址| A片一级片| 电影豹妹香港版| 六月天av| 在线观看国产一级片| 国产在线高清| 久久精品亚洲无码| 中文字幕乱视频| 久久婷婷五月综合| 91丨豆花丨成人熟女| 国产超级无码高清在线视频观看 | 一区二区三区精品婷婷| 国产成人精品国内自产拍免费看| 欧美一级免费A片| 国产成人午夜精品无码区久久麻豆 | 成人在线视频网站| 蜜臀AV一区二区三区免费看| 日本少妇中文字幕| 性欧美欧美巨大69| 一级Aa视频免费看| 韩国高清无码视频| 天天干天天插| 亚洲美女网站在线观看| 黄色视频在线观看| 大吊AV| 熟女91视频| 亚州成熟少妇视频在线观看| 欧美性猛交一区二区三区精品| 特级黄色A片| 日韩免费AV电影| 熟妇人妻丰满久久久久久久无码 | 国产成人精品免费看视频| 人妻精品在线| 国产永久免费| 娇小,学生,高潮,videos| 国产一区免费观看| 精品精品精品| 欧美成人在线视频网站| 大香蕉在线精品视频| 亚洲中字幕新| 天天拍夜夜爽| 翔田千里91| 丁香婷婷视频| 黑人无码视频| 中文字幕有码在线播放| 99久久网站| 亚洲av网址| 成人福利网站| 青青操在线视频| 亚洲天堂视频网| 四房五月婷婷| 久久久黄色视频| 五月天性爱| 天天天日天天天操| 四虎亚洲| 成人做爰黄A片免费视频网站野外| 黄片免费在线播放| 日韩视频在线免费观看| 亚洲日韩欧美国产| 爱就色色网| 性饥渴熟妇乱子伦| 国产超碰在线| 亚洲中文字幕在线观看免费| 国产嫩草视频| 四季AV一区二区夜夜嗨| 国产欧美熟妇另类久久久| 国产一级性爱视频| 国产无码观看| 台湾成人在线| 超碰自拍| 国产无码久久久| 久久婷婷国产麻豆91天堂| 在线播放JUY-925被丈夫上司侵犯的第7天 | 欧美亚洲日韩在线观看| 久久免费黄色| 欧美日韩视频在线| 久久久久久久久久久久成人| 日韩区在线| 91狠狠| 国产欧美在线综合| 久久久123| 中文字幕av一区二区| 亚洲精品久| 亚洲欧美日韩不卡| 亚洲天堂视频在线播放| 三级久久久| 无码a区天堂| 国产黄色Av| 国产日韩欧美一区| 东京热综合网| 国产一区二区三区视频在线| 欧美熟妇BBB搡BBB| 成人自拍视频在线观看| 在线亚洲福利| 无码熟妇人妻无码AV在线天堂| 欧美性爱福利视频| 久久久久久国产| 蜜桃无码视频小说网站| 大鷄巴成人A片视频| 精品婷婷| 亚洲AV无码一区毛片AV| 日韩欧美国产综合| 亚洲AV永久无码精品| 中文字幕三级片在线观看| 三级无码在线播放| 春宵福利导航| 成人精品| 日韩激情一区二区| 亚洲性爱影院| 人人操人人射| 久久久久女人精品毛片九一| 北条麻妃被躁57分钟视频在线| 玩弄小怮女在线观看| 91人人妻人人做人人爽| 97人人色| 成人免费毛片AAAAAA片| 黄色视频免费在线看| 色综合久久久无码中文字幕999| 蜜臀久久99精品久久久电影| 免费AV观看| 成人黄色电影在线| 免费高清无码在线观看| 亚洲无码激情在线| 欧日韩在线| 伊人久久电影| 做爱视频网站18| 久久无码在线观看| 日韩操操| 麻豆91精品91久久久停运原因| 成人毛片AV无码| 国产AV一区二区三区四区| 国产精品欧美综合亚洲| 日韩无码不卡视频| 国产不卡在线| 高清无码一区二区在线| 丁香五月六月婷婷| 久久婷婷五月综合| 日韩成人无码电影网站| 伊人天天操| 日韩视频免费观看高清完整版在线观 | 免费在线观看黄色视频网站| 成人中文字幕在线视频| 午夜福利免费| 中文字幕永久在线| 激情无码在线观看| 四川女人毛多水多A片| 日本黄A级A片国产免费| 91蜜桃传媒在线观看| 伊人久久影院| 亚洲成人77777| 中文字幕高清无码视频| www.日韩| 国产秘精品区二区三区日本| 大香蕉黄色网| 久久av综合| 精品久久免费视频| 最新超碰| 男人的天堂视频在线观看| а√在线中文8| 国产精品秘久久久久久免费播放|