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

Jedis連接池究竟是何物

開發(fā) 前端
實(shí)際上在提到配置參數(shù)、BorrowObject 時,還有一個機(jī)制,稱之為 Abandoned,由于本文的契機(jī)是因?yàn)?Jedis 的問題分析所寫,而 Jedis 連接池并不支持配置 Abandoned,所以本文暫不做解析,或者感興趣的可以自己到上面講的源碼路徑去看一下,本身這個機(jī)制的理解也不是特別復(fù)雜。

一、前言

連接池的用途實(shí)際上有過開發(fā)經(jīng)驗(yàn)的朋友都已經(jīng)比較清楚了,當(dāng)資源對象的創(chuàng)建/銷毀比較耗時的場景下,可以通過"池化"技術(shù),達(dá)到資源的復(fù)用,以此來減少系統(tǒng)的開銷、增大系統(tǒng)吞吐量,比如數(shù)據(jù)庫連接池、線程池、Redis 連接池等都是使用的該方式,而我們在開發(fā)場景中使用較為廣泛的 Jedis 就是使用了 GenericObjectPool 作為它底層的連接池實(shí)現(xiàn)。

二、原理概述

圖示

圖片圖片

  • BorrowObject

業(yè)務(wù)模塊通過 BorrowObject 方法從空閑連接隊列中獲取空閑連接,最長會等待 maxWaitMillis 毫秒,如果拿不到則走 Create。

  • ReturnObject
  • 把連接重新放回到 IdleObjects 隊列中。

類結(jié)構(gòu)

圖片圖片

Jedis里如何使用的

一般情況下我們在 Spring Boot 應(yīng)用中會通過 Spring-Data-Redis 來使用 Redis,而在業(yè)務(wù)層會通過 RedisTemplate 來進(jìn)行 Redis 的操作,但是 RedisTemplate 是怎么來的呢?可以看到當(dāng)我們引入 Spring-Data-Redis 時,就會引入 RedisAutoConfiguration,這個 AutoConfiguration 定義了,當(dāng)我們存在 Jedis 的配置時且不存在 RedisTempalte 的 Bean 實(shí)例時會自動創(chuàng)建 Bean,核心代碼如下圖。

圖片圖片

而 RedisConnectionFactory 的其中一個實(shí)現(xiàn)就是 JedisConnectionFactory,其中就包含了 Pool。

圖片圖片

而 Pool 本身內(nèi)部就能看到我們真正的主角。

圖片圖片

捋一下其中的關(guān)系,我們常用的 Spring-Data-Redis 的 Jedis 實(shí)現(xiàn)最終是通過以下的層級結(jié)構(gòu)來使用 GenericObjectPool 的。

圖片圖片

三、深入分析

參數(shù)說明

如上述類結(jié)構(gòu)所示,GenericObjectPool 都是在 GenericObjectPoolConfig 或 BaseObjectPoolConfig 中進(jìn)行配置相關(guān)參數(shù)的,其中核心參數(shù)以及默認(rèn)值如下:

圖片圖片

上圖對這些參數(shù)按顏色進(jìn)行了一個歸類:

圖片圖片

這里需要注意的是,雖然 GenericObjectPool 支持我們配的參數(shù)較多,但是 Spring-Data-Redis 將這部分參數(shù)收斂了,具體可供我們修改的只有表格上面的這部分內(nèi)容,其他參數(shù),有一部分在 JedisPoolConfig 類中,繼承了 GenericObjectPoolConfig 進(jìn)行了修改,比如 Spring-Data-Redis 就修改了以下參數(shù)的默認(rèn)值。

testWhileIdle=true

minEvictableIdleTimeMillis=60000

timeBetweenEvictinotallow=30000

numTestsPerEvictinotallow=-1

核心方法

本文只會針對方法的一些核心鏈路進(jìn)行說明,如想知道更多細(xì)節(jié),針對源碼解析的可以在網(wǎng)上搜索其他相關(guān)文章或是到我的參考鏈接里進(jìn)行翻看。

BorrowObject

  • 超時時間怎么用的?

該方法用于從連接池中獲取一個空閑對象,它有可能是從空閑池中直接獲取的,或是直接創(chuàng)建出來的,如果第一次從空閑對象中沒有獲取到,會走創(chuàng)建后重新獲取,此時如果對象池目前配置的 BlockWhenExhausted=true,那么就會受 maxWaitMillis 參數(shù)所配置的超時時間所控制,如果超過了超時時間,都沒拿到一個空閑的對象,則會直接拋出異常。

  • testOnBorrow 和 testOnCreate 的使用場景

當(dāng)獲取到一個對象后,由于對象池中往往存放的是諸如數(shù)據(jù)庫連接、Redis 連接等創(chuàng)建時較為耗時的資源,但是因?yàn)檫B接本身是復(fù)用的,如果 MySQL/Redis Server 端如果因?yàn)槟承┰驍嚅_/釋放了該鏈接,那么此時拿到的對象就是個無效的對象,因此在 borrowObject 階段會判定,如果:

testOnBorrow=true || (create && testOnCreate=true)

就會走到:

factory.validateObject

這里如何進(jìn)行 validateObject 的,是由上層使用對象池的場景所決定的,比如在 Jedis 場景中,會向 Redis Server 發(fā)送一個 Ping 命令,如果 Server 返回了 Pong,則認(rèn)為該連接仍然有效,可以給業(yè)務(wù)層使用。

但是!!!!!!

線上環(huán)境千萬不要配置 testOnBorrow=true 或是 testOnCreate=true。

每個對象的獲取都需要先校驗(yàn)再拿,會大大增加單次請求的 RT。

ReturnObject

  • testOnReturn 的使用場景

實(shí)際上 testOnReturn 的使用場景與上述 borrowObject 時的 testOnBorrow 是類似的,只是testOnReturn就是一個歸還對象的操作。同理,線上千萬不要配置 testOnReturn=true。

  • 什么時候歸還,什么時候銷毀?

對象池中維護(hù)了一個結(jié)構(gòu)為 LinkedBlockingDeque,名為 IdleObjects 的對象用于維護(hù)空閑對象隊列,且是否歸或銷毀的判斷邏輯如下:

final int maxIdleSave = getMaxIdle();
if (isClosed() || maxIdleSave > -1 && maxIdleSave <= idleObjects.size()) {
  ...銷毀對象
}else{
  ...返還至idleObjects
}

如果:

  • 對象池已經(jīng)關(guān)閉(只要是程序在運(yùn)行,且正常使用,不會關(guān)閉)

  • 配置了 maxIdle 且空閑對象列表數(shù)量 >=maxIdle

則對象會被銷毀,否則對象會重新回到 IdleObjects 中。

四、內(nèi)部機(jī)制

Evict(定期驅(qū)逐/保活機(jī)制)

  • 周期怎么定?

當(dāng) timeBetweenEvictionRunsMillis 配置 >0 時,在 GenericObjectPool 所繼承的基類中,會啟一個周期性執(zhí)行的線程,它的執(zhí)行周期就是 timeBetweenEvictionRunsMillis 的值。

  • 為什么要驅(qū)逐?

當(dāng)空閑對象過多,對于客戶端或服務(wù)端的 TCP 連接維護(hù)來講,本身就是一個開銷,因此,需要有一個規(guī)則,當(dāng)有一些對象實(shí)在太空閑了,就把它們踢掉。

  • 哪些對象應(yīng)該被驅(qū)逐?

首先會從空閑對象列表中挑選出一部分對象,而這個挑選過程本身也有一個規(guī)則,它受 numTestsPerEvictionRun 參數(shù)控制。

當(dāng) numTestsPerEvictionRun>0,會挑選出 numTestsPerEvictionRun 數(shù)量的空閑連接進(jìn)行檢查。

當(dāng) numTestsPerEvictionRun<0 時,首先會對 numTestsPerEvictionRun 取絕對值,再然后挑選出空閑數(shù)量 /numTestsPerEvictionRun 絕對值的數(shù)量進(jìn)行檢查,舉個例子,如果 numTestsPerEvictinotallow=-2,就會挑選出一半進(jìn)行檢查。

  • 驅(qū)逐檢查怎么做?

本身驅(qū)逐檢查的實(shí)現(xiàn)方式是支持自定義的,也就是 evictionPolicy 參數(shù),但是往往只會選擇用默認(rèn)的實(shí)現(xiàn),也就是 DefaultEvictionPolicy,它的驅(qū)逐檢查策略如下:

if ((config.getIdleSoftEvictTime() < underTest.getIdleTimeMillis() &&
        config.getMinIdle() < idleCount) ||
        config.getIdleEvictTime() < underTest.getIdleTimeMillis()) {
    return true;
}
return false;

underTest 為被檢查對象,當(dāng)存在以下場景時,滿足驅(qū)逐檢查規(guī)則,會觸發(fā)驅(qū)逐。

underTest 的空閑時間 > softMinEvictableIdleTimeMillis 且當(dāng)前空閑對象數(shù)量 > minIdle 或 underTest 的空閑時間 > minEvictableIdleTimeMillis。

Tips:有一些好奇的同學(xué)可能會問,對象的空閑時間是怎么算的?

池中的對象本身會維護(hù)一個 lastReturnTime 的時間戳,它會隨著對象每一次 returnObject 時進(jìn)行更新,當(dāng)獲取對象空閑時間時,只要它還是在空閑對象中,那么用當(dāng)前時間戳 -lastReturnTime 就是認(rèn)為該對象的空閑時間。

  • 驅(qū)逐與保活的關(guān)系是怎么樣的?

由于前面提到過,不能配置 testOnBorrow 和 testOnReturn,那么如果 Server 端的鏈接直接斷開了,怎么能保證池中對象的有效性呢?如果讓調(diào)用端調(diào)用時再觸發(fā),會不會太晚了呢?這時候就有個參數(shù) testWhileIdle,當(dāng)此參數(shù)打開時,就代表會在對象空閑時進(jìn)行對象可用性檢查,具體代碼如下:

if (evict) {
    destroy(underTest);
    destroyedByEvictorCount.incrementAndGet();
} else {
    if (testWhileIdle) {
        try {
            factory.activateObject(underTest);
        } catch (final Exception e) {
            destroy(underTest);
            destroyedByEvictorCount.incrementAndGet();
        }
    }
}

這里隱掉了一些相關(guān)的非核心邏輯,這里可以看到 testWhileIdle 的保活機(jī)制實(shí)際上和 evict 是配套使用的,如果被檢查對象需要被驅(qū)逐,也就是 evict=true,則會直接 destory 對象,否則它會判定 testWhileIdle 的狀態(tài),此時如果 testWhileIdle=true,那么就會激活一下對象,具體激活的方式是由使用對象池的上層工廠所決定的。

Test(檢查機(jī)制)

本身 GenericObjectPool 為了保證在池子中的對象有效性,會允許上層分別在幾個節(jié)點(diǎn)進(jìn)行對象的有效性檢查,分別是:
testOnBorrow、testOnReturn、testOnCreate。

這幾個基本看名字就知道是什么意思了,在前面講 borrowObject 和 returnObject 的時候也有提到,還有一個相對比較特別的是:

testWhileIdle。

該參數(shù)目的是為了對象在空閑期間可以進(jìn)行檢查,而它的觸發(fā)實(shí)際上是和 evict(定期驅(qū)逐機(jī)制)聯(lián)合起來進(jìn)行使用的。

Abandoned(拋棄機(jī)制)

實(shí)際上在提到配置參數(shù)、BorrowObject 時,還有一個機(jī)制,稱之為 Abandoned,由于本文的契機(jī)是因?yàn)?Jedis 的問題分析所寫,而 Jedis 連接池并不支持配置 Abandoned,所以本文暫不做解析,或者感興趣的可以自己到上面講的源碼路徑去看一下,本身這個機(jī)制的理解也不是特別復(fù)雜。

五、排障方式

本身 GenericObjectPool 默認(rèn)會把自己的一些參數(shù)通過 JMX 的方式進(jìn)行注冊,那么我們可以通過 Jvisualvm 進(jìn)行查看,或是通過 Arthas,輸入如下命令:

mbean org.apache.commons.pool2:type=GenericObjectPool,name=pool-redisConnectionFactory
可以獲取到對象池當(dāng)前的一些屬性,如下圖:

圖片圖片

其中對于優(yōu)化比較有用的就是 CreatedCount(創(chuàng)建對象的數(shù)量)、DestoryedCount(對象銷毀的對象)、DestoryedByEvictorCount(因?yàn)轵?qū)逐機(jī)制而被銷毀的對象數(shù)量)。

六、總結(jié)

上述文章以 Jedis 為引,分析了 GenericObjectPool 連接池的底層原理以及 Jedis 是如何使用該連接池的,并且結(jié)合了 Arthas 分享了一個簡單的排障方式,實(shí)際上如果知道了 GenericObjectPool 連接池的原理,其他連接池也是大同小異,本文希望拋磚引玉,帶大家對于連接池的底層實(shí)現(xiàn)有個基本概念,相信以后遇到此類問題也會有分析的思路,不再迷茫~

責(zé)任編輯:武曉燕 來源: 得物技術(shù)
相關(guān)推薦

2010-08-24 09:19:59

2009-01-12 09:56:52

2011-02-28 09:51:43

內(nèi)省

2019-04-26 13:55:02

Istio微服務(wù)架構(gòu)

2011-02-16 16:13:40

Debian

2020-06-11 09:18:34

動靜分離架構(gòu)架構(gòu)設(shè)計開發(fā)

2019-06-04 14:15:08

JavaScript V8前端

2018-07-05 16:15:26

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

2019-07-22 15:29:53

JavaScriptGitHub語言

2015-12-14 15:34:35

開源投資創(chuàng)業(yè)

2018-09-10 13:47:21

數(shù)據(jù)科學(xué)統(tǒng)計學(xué)決策

2019-05-27 15:30:44

Node.jsJavaScript前端

2015-09-29 09:47:14

2016-06-17 12:31:10

Spark SQL數(shù)據(jù)處理Spark

2021-12-28 11:05:55

比特幣加密貨幣貨幣

2021-05-27 11:08:44

接入網(wǎng)網(wǎng)絡(luò)互聯(lián)網(wǎng)

2014-08-05 09:43:59

超級手機(jī)病毒XXshengqi

2015-01-20 10:19:02

谷歌AraGoogle

2015-08-26 09:54:19

物聯(lián)網(wǎng)

2010-06-28 14:47:45

云計算
點(diǎn)贊
收藏

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

久久综合视频网| 欧美aaaaaaaaaaaa| 91福利在线观看| 亚洲欧洲久久| 亚洲欧美另类日韩| 玖玖玖国产精品| 久久亚洲精品网站| 波多野结衣先锋影音| 日本午夜免费一区二区| 精品久久久国产| 在线视频不卡一区二区三区| 欧美特黄一级视频| 久热成人在线视频| 日本aⅴ大伊香蕉精品视频| 91视频青青草| av一区二区在线播放| 日韩欧美三级在线| 欧美伦理片在线看| 黄色成人在线网| 久久久久久99精品| 91久久久精品| 中文字幕高清在线免费播放| 精品久久久中文字幕| 91精品国产综合久久久蜜臀图片 | 免费黄视频在线观看| 超碰在线97国产| 国产精品乱码一区二区三区软件 | 久久久久久久国产精品影院| 91日本在线观看| 九九精品免费视频| 欧美在线网站| 一本色道久久88综合亚洲精品ⅰ| 日本少妇xxx| 精品久久福利| 色综合网色综合| 欧美一区二区视频在线播放| h网站视频在线观看| www.成人网.com| 91亚洲va在线va天堂va国 | 亚洲xxxx做受欧美| 国产字幕在线观看| 亚洲精品少妇| 成人97在线观看视频| 一级黄色录像毛片| 老司机精品在线| 日韩情涩欧美日韩视频| 牛夜精品久久久久久久| 欧美freesex黑人又粗又大| 亚洲蜜臀av乱码久久精品| 日韩美女一区| 国产视频三级在线观看播放| 99精品久久免费看蜜臀剧情介绍| 成人一区二区三区四区| 一区二区日韩在线观看| 日韩av中文字幕一区二区三区| 97精品在线视频| 国产一级视频在线| 国产精品v日韩精品v欧美精品网站 | 91久久精品无码一区二区| 久久狠狠婷婷| 青青久久av北条麻妃黑人| 日韩高清免费av| 亚洲人成在线影院| 国产做受高潮69| 久久97人妻无码一区二区三区| 久久久久国产| 亚洲人成在线播放| 狠狠人妻久久久久久综合蜜桃| 久久久久久亚洲精品美女| 91精品国产入口| 久久这里只精品| 美女日韩欧美| 亚洲色图19p| 欧美另类一区| av网站无病毒在线| 中文字幕中文在线不卡住| 午夜精品亚洲一区二区三区嫩草 | 91精品一久久香蕉国产线看观看 | 日本久久精品一区二区| 天然素人一区二区视频| 欧美主播一区二区三区| 在线观看亚洲色图| 亚洲我射av| 777久久久精品| 亚洲成人福利视频| 日韩精品成人| 日韩精品一区二区三区第95| www.啪啪.com| 天堂网av成人| 在线激情影院一区| 国产大学生自拍| 亚洲精品美女91| 国产成人短视频| 国产一区二区三区四区视频| 国产高清久久久久| 精品国产乱码久久久久久蜜柚| 亚州男人的天堂| 亚洲国产精品黑人久久久| 中文字幕一区综合| 丰乳肥臀在线| 日本韩国欧美三级| 在线免费看污网站| 给我免费播放日韩视频| 一本一本久久a久久精品综合小说| 一级免费黄色录像| 国产综合网站| 国产精品福利网| 午夜久久久久久久久久| 久久久久久久一区| 日韩中文字幕亚洲精品欧美| 中文av在线全新| 3d动漫精品啪啪一区二区竹菊| 黄色国产在线视频| 成人一二三区| 97国产真实伦对白精彩视频8| 中文字幕在线观看视频免费| 美女脱光内衣内裤视频久久网站| 成人网在线视频| 国产精品国产高清国产| 中文字幕日韩一区| 69堂免费视频| 日本在线成人| 亚洲天天在线日亚洲洲精| 国产波霸爆乳一区二区| 免费一区二区视频| 激情伦成人综合小说| 黄网页在线观看| 色狠狠色狠狠综合| 亚洲男人在线天堂| 欧美三区在线| 国产精品影片在线观看| 一区二区小视频| av一区二区三区| www插插插无码免费视频网站| 91九色综合| 亚洲男人第一av网站| 国产无套粉嫩白浆内谢| 国产在线播放一区三区四| 日韩在线三区| xxx欧美xxx| 日韩成人在线网站| 久久无码精品丰满人妻| 精久久久久久久久久久| 亚洲成色www久久网站| 偷拍自拍在线看| 精品国产凹凸成av人网站| 夫妻性生活毛片| 老司机午夜精品99久久| 日日骚一区二区网站| 韩日精品一区二区| 精品亚洲va在线va天堂资源站| 一区二区成人免费视频| 麻豆国产91在线播放| 五月天国产一区| 欧美男女交配| 亚洲最新av在线| 久久影视中文字幕| 久久久久久影视| 日本成年人网址| 天堂俺去俺来也www久久婷婷| 97人人爽人人喊人人模波多| 囯产精品一品二区三区| 夜夜爽夜夜爽精品视频| 亚洲一区二区图片| 欧美激情一级片一区二区| 91在线观看免费| 成人video亚洲精品| 欧美一区二区三区四区高清| 久久久久久久久久97| 精品一区二区在线免费观看| 一本一道久久a久久综合精品| 国产精品久久乐| 最近的2019中文字幕免费一页| 欧美另类高清videos的特点| 一区免费观看视频| 宇都宫紫苑在线播放| 欧美亚韩一区| 久久久综合香蕉尹人综合网| 电影一区二区三区| 亚洲欧洲高清在线| av图片在线观看| 久久久99精品久久| 成人性生交视频免费观看| 欧美freesex交免费视频| 国产精品免费在线播放| 欧美xxxhd| 在线成人免费网站| 国产乱淫片视频| 亚洲国产一区二区三区| 色噜噜在线观看| 久久国产免费看| 亚洲天堂第一区| 亚洲精品小区久久久久久| 国产精品高潮呻吟久久av无限 | 国产日产欧美一区二区三区| www.亚洲高清| 一区在线观看| 先锋影音日韩| 99久久香蕉| 国产suv精品一区二区| 免费在线观看av| 亚洲国产精品成人精品| 中文字幕乱伦视频| 一二三四社区欧美黄| 国产免费看av| 国产精品中文字幕欧美| 精品少妇一区二区三区在线| 成人免费看片39| www日韩av| 在线天堂资源www在线污| 色综合五月天导航| 999在线视频| 亚洲国产欧美精品| 亚洲天堂国产精品| 一区二区三区中文在线| 国产熟女一区二区| 成人免费高清视频| 中文字幕精品一区二区三区在线| 伊人久久亚洲热| 日本精品免费| 日韩av字幕| 91一区二区三区| 久久久久久久性潮| 日产日韩在线亚洲欧美| 青青青草视频在线| www.色综合| 国内三级在线观看| 精品国产乱码久久| 国产精品-色哟哟| 91国模大尺度私拍在线视频| 日韩av一区二区在线播放| 亚洲视频在线观看三级| 精品人妻一区二区三区四区| 91蜜桃在线观看| 毛片毛片毛片毛| 激情五月播播久久久精品| 777米奇影视第四色| 影音先锋亚洲一区| 女人被男人躁得好爽免费视频| 日韩1区2区| 日韩中文一区二区三区| 伊人春色之综合网| 久久99精品久久久久久三级| 日韩中文字幕在线一区| 91在线高清免费观看| 久久久久久久性潮| 国产精品丝袜久久久久久高清| 深夜成人在线| 91精品国产91久久久久| 91九色在线看| 8090成年在线看片午夜| a在线视频v视频| 欧美国产在线视频| 不卡的av影片| 68精品久久久久久欧美| 9999精品成人免费毛片在线看| 久久久久一本一区二区青青蜜月| bestiality新另类大全| 欧美乱妇40p| 秋霞在线视频| 97久久伊人激情网| 日本免费一区二区六区| 欧美重口另类videos人妖| 天堂电影一区| 日本最新高清不卡中文字幕| 日韩国产网站| 国产欧美日韩免费看aⅴ视频| 国产精品黄色片| 91啪国产在线| 国产成人澳门| 久久久久久久久久久一区| 亚洲自拍电影| 日本一区二区三不卡| 精品高清久久| 在线国产伦理一区| 欧美性久久久| 欧美日韩在线不卡视频| 久久香蕉精品| 老司机久久精品| 国产成人av福利| 香蕉视频免费网站| 久久亚洲二区三区| 五月天精品在线| 亚洲自拍偷拍综合| 亚洲精品中文字幕乱码三区91| 欧美亚洲图片小说| 国产三级自拍视频| 亚洲精品第一国产综合精品| 黄上黄在线观看| 久久精品91久久久久久再现| 久久www人成免费看片中文| 77777少妇光屁股久久一区| 蜜桃成人精品| 99中文字幕| 精品日韩毛片| www.xxx麻豆| 免费高清在线视频一区·| 潘金莲一级淫片aaaaa| 26uuu久久天堂性欧美| 可以免费看av的网址| 五月激情综合婷婷| 一级黄色片网站| 亚洲精品美女在线观看播放| 午夜在线免费观看视频| 国语对白做受69| 丁香久久综合| 国产精品一区二区三区四区五区| 狠狠做深爱婷婷综合一区| 亚洲综合欧美日韩| 亚洲综合不卡| 巨乳女教师的诱惑| 国产亚洲欧美色| 久久精品视频久久| 欧美日韩精品一区二区三区四区 | 欧美日韩一区在线观看视频| 999视频精品| 成人免费毛片网| 国产综合久久久久久鬼色| 特大黑人巨人吊xxxx| 中文字幕亚洲区| 国内精品福利视频| 欧美一区二区日韩一区二区| 国产视频第一页在线观看| 久久久久久久影院| 成人豆花视频| 色综合电影网| 久久久久国产精品一区二区| 免费看91视频| 一区精品在线播放| wwwwww在线观看| 欧美va亚洲va| 亚洲精品传媒| 国产日本欧美一区二区三区| 久久不见久久见国语| 日日摸日日碰夜夜爽无码| 国产剧情一区在线| 啪啪一区二区三区| 91精品办公室少妇高潮对白| 五月婷婷丁香六月| 美女视频黄免费的亚洲男人天堂| 九九热这里有精品| 国产欧美韩日| 亚洲精品一二| 欧美xxxxx少妇| 一区二区成人在线视频| 97人人爽人人爽人人爽| 最近中文字幕mv在线一区二区三区四区| 极品视频在线| 精品九九九九| 亚洲欧美日本日韩| 久久人人爽人人爽人人片 | www.日本精品| 亚洲国产精品人久久电影| 操喷在线视频| 国产偷国产偷亚洲高清97cao| 国产一区二区三区四区老人| 亚洲第一狼人区| 欧美国产激情二区三区| 亚洲视频在线免费播放| 日韩中文有码在线视频| 国产成人精品一区二区三区视频| 日韩免费三级| 久草在线在线精品观看| 精品无码久久久久成人漫画| 欧美一区二区精品久久911| 美女av在线播放| 国产美女扒开尿口久久久| 久久要要av| 天美一区二区三区| 一区二区三区久久| 高清毛片aaaaaaaaa片| 91国产美女在线观看| 美女少妇全过程你懂的久久| 亚洲天堂av线| 1区2区3区欧美| 亚洲大尺度视频| 欧美俄罗斯性视频| 亚洲男人都懂第一日本| 亚洲视频在线a| 亚洲欧美色图小说| 国产91久久久| 91精品国产91久久久| 青青草原在线亚洲| 久久婷婷综合色| 一区二区三区四区激情| 天堂中文资源在线| 国产精品福利网站| 欧美日韩影院| 久久午夜夜伦鲁鲁片| 精品久久久久久久久国产字幕| 国产69精品久久app免费版| 91丝袜美腿美女视频网站| 国产精品theporn| 色欲狠狠躁天天躁无码中文字幕 | 久草视频免费播放| 亚洲人成电影网站色…| 日韩大陆av| 国产精品久久中文字幕| 国产精品久久久久久亚洲毛片| www.黄色av|