日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

从PHP5到PHP7自我封装MongoDB以及平滑升级

發布時間:2024/9/20 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从PHP5到PHP7自我封装MongoDB以及平滑升级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.序言

使用PHP+MongoDB的企業級用戶很多,因為MongoDB對非結構化數據的存儲很方便。在PHP5及以前,官方提供了兩個擴展,Mongo和MongoDB,其中Mongo是對以MongoClient等幾個核心類為基礎的類群進行操作,封裝得很方便,所以基本上都會選擇Mongo擴展,詳情請見官方手冊:

http://php.net/manual/en/class.mongoclient.php
  • 1

但是隨著PHP5升級到PHP7,官方不再支持Mongo擴展,只支持MongoDB,而PHP7的性能提升巨大,讓人無法割舍,所以怎么把Mongo替換成MongoDB成為了一個亟待解決的問題。MongoDB引入了命名空間,但是功能封裝非常差,如果非要用原生的擴展,幾乎意味著寫原生的Mongo語句。這種想法很違背ORM簡化dbIO操作帶來的語法問題而專注邏輯優化的思路。詳情也可參見官方手冊;

http://php.net/manual/en/class.mongodb-driver-manager.php
  • 1

在這種情況之下,MongoDB官方忍不住了,為了方便使用,增加市場占有率,推出了基于MongoDB擴展的庫,詳情參見:

https://github.com/mongodb/mongo-php-library
  • 1

實際上在我們使用的過程中,總是希望能夠實現盡可能的解耦,于是分層清晰變得尤為重要。由于官方的庫并不能實現筆者分離和特定的功能需要,于是筆者自己造了一次輪子。

二.自我封裝的MongoDBClient類

1.構造函數
筆者希望構造函數能夠有兩種方式,一種以單例模式去實現對Model層繼承傳參構造,另一種是簡單地直接構造,以實現代碼的充分復用和封裝類的廣泛適用。

public $_client; public $_manager; public $_db; public $_collection;public function __construct(){$config=$this->getDbConnection();if(!empty($config['server']) && !empty($config['db'])){$uri=$config['server']."/".$config['db'];if(isset($config['urioptions'])){$urioptions=$config['urioptions'];}else{$urioptions=array();}if(isset($config['driveroptions'])){$driveroptions=$config['driveroptions'];}else{$driveroptions=array();}$this->setClient($uri,$urioptions,$driveroptions);$this->setDatabase($config['db']);}$collectionName=$this->collectionName();if($this->getDatabase()){$this->setCollection($collectionName);}}public function collectionName(){return '';}public function getDbConnection(){return array();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

以上為單例模式的構造方法,顯然定義了兩個沒有意義的獲取參數的函數,實際上初始化的入口應該在繼承的子類中完成重寫。每一個set函數,都會把實例傳給該對象的屬性以保存并在后續中調用。

public function initInstance($uri,$db,$collectionName){// $config = $this->getMongoConfig();// $tempStr='mongodb://'.$config['username'].':'.$config['password'].'@'.$config['host'].'/'.$config['db'];// $mongodbclient=new MongoDBClient();$this->setClient($uri);$this->setDatabase($db);$this->setCollection($collectionName);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

這里為簡單地直接初始化。而構造函數的設計決定了兩者并不沖突,至于為何要設計兩種初始化方法,是出于對清晰分層的更好支持的原因

2.filter過濾器的構造
從Mongodb官方的原生到php官方的擴展到Mongodb的依賴庫,對于filter的構建方法非常粗暴,就是讓人去直接寫Mongodb的filter的原生語句,這與ORM簡化語法耦合的思路大相徑庭。為了方便別人使用復雜的過濾器,筆者對過濾器進行了簡化的構造。具體思路是把一個語義化的過濾器看作一個算式,一組條件看作一個數,連接符則當作運算符,通過中綴表達式轉后綴表達式實現去括號,然后再執行后綴表達式,實現語義化的連接符的語法化,從而簡化了業務層的開發者的成本。詳情如下:

public function filterConstructor($key,$operator,$value,$connector=array()){$filter=array();$subfilter=array();switch ($operator) {case '=':$subfilter=array($key=>$value);break;case '>':$subfilter=array($key=>array('$gt'=>$value));break;case '>=':$subfilter=array($key=>array('$gte'=>$value));break;case '<':$subfilter=array($key=>array('$lt'=>$value));break;case '<=':$subfilter=array($key=>array('$lte'=>$value));break;case '!=':$subfilter=array($key=>array('$ne'=>$value));break;default:die();break;}$filter=array_merge($filter,$subfilter);return $filter;}/** construct a easy-and filter with double arrays via key-value input* @param (Array)$trible1 (Array)$trible2* @return an array of mongo-dialect filter* @author wangyang*/public function andFilterConstructor($trible1,$trible2){$ret1=$this->filterConstructor($trible1[0],$trible1[1],$trible1[2]);$ret2=$this->filterConstructor($trible2[0],$trible2[1],$trible2[2]);array_merge($ret1,$ret2);return $ret1;}/** construct a easy-or filter with double arrays via key-value input* @param (Array)$trible1 (Array)$trible2* @return an array of mongo-dialect filter* @author wangyang*/public function orFilterConstructor($trible1,$trible2){$ret1=$this->filterConstructor($trible1[0],$trible1[1],$trible1[2]);$ret2=$this->filterConstructor($trible2[0],$trible2[1],$trible2[2]);$ret=array('$or'=>array());array_push($ret['$or'],$ret1);array_push($ret['$or'],$ret2);return $ret;}/** construct a easy-and filter with double filters* @param (Array)$query1 (Array)$query2* @return an array of mongo-dialect filter* @author wangyang*/public function onlyAndFilterConstructor($query1,$query2){$query1=array_merge_recursive($query1,$query2);return $query1;}/** construct a easy-or filter with double filters* @param (Array)$query1 (Array)$query2* @return an array of mongo-dialect filter* @author wangyang*/public function onlyOrFilterConstructor($query1,$query2){$query=array('$or'=>array());array_push($query['$or'],$query1);array_push($query['$or'],$query2);return $query;}/** resolve the complicated connectors set filter* @param (Array)$query e.g. array(filterarray1(),$connector,filterarray2()) * e.g. array(arr1(),'or','(',arr2(),'and',arr3(),')')* @return an array of mongo-dialect filter* @author wangyang*/public function queryFilterConstructor($query){$priority=array('('=>3,'and'=>2,'or'=>2,')'=>1);$stack1=array();$stack2=array();//transfer nifix expression to postfix expressionforeach ($query as $key => $value) {if(is_array($value)){array_push($stack2,$value);}elseif($value=='('||empty($stack1)){array_push($stack1,$value);}elseif($value==')') {while(($top=array_pop($stack1))!=='('){array_push($stack2,$top);}}elseif(end($stack1)=='('){array_push($stack1,$value);}else{while($priority[$value]<$priority[end($stack1)]){$top=array_pop($stack1);array_push($stack2,$top);}array_push($stack1,$value);} }while(!empty($stack1)){$top=array_pop($stack1);array_push($stack2,$top);}foreach ($stack2 as $key => $value) {if(is_array($value)){$stack2[$key]=$this->filterConstructor($value[0],$value[1],$value[2]);}}//compute the postfix expressionforeach ($stack2 as $key => $value) {if(is_array($value)){array_push($stack1,$value);}else{$top=array_pop($stack1);$subtop=array_pop($stack1);if($value=='and'){$ret=$this->onlyAndFilterConstructor($top,$subtop);array_push($stack1,$ret);}elseif($value=='or'){$ret=$this->onlyOrFilterConstructor($top,$subtop);array_push($stack1,$ret);}else{die('undefined connector');}}}$ret=array_pop($stack1);return $ret;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139

在處理的時候用到了棧的思想,在PHP中使用數組進行代替,實際上,PHP的數組函數還是相當契合棧的思路的,比如插入array_push(),刪除頂部元素array_pop(),而在轉逆波蘭式的過程中,完成對最基礎的語句的拼裝,后面的復雜語句通過迭代來實現。
比如要實現{“likes”: {$gt:50}, $or: [{“by”: “菜鳥教程”},{“title”: “MongoDB 教程”}]}這樣一句查詢過濾器,我們就可以用 [[‘likes’,’>’,’50’],’or’,’(‘,[‘by’,’=’,’菜鳥教程’],’and’,[‘title’,’=’,’MongoDB教程’],’)’]來代替了。這大概是我在這個類里最得意的部分了。

3.從數據庫到聚合到具體文檔的CURD
這個就直接上demo吧~
值得注意的是官方的find()返回為一個cursor,通過foreach遍歷輸出的結果卻是一組documents,說明其實官方的對象設計得很不友好

require 'MongodbExtension.php'; $mongo=new MongoDBClient(); $mongo->setClient("mongodb://127.0.0.1:27017");function DataBase($mongo){//列出所有數據庫名$databases=$mongo->listDatabases();//創建數據庫,獲得數據庫實例$database=$mongo->createDatabase('BUPT');//刪除數據庫$mongo->dropDatabase('BUPT');//選擇數據庫,獲得數據庫實例$database=$mongo->selectDatabase('wangyang');} function Collection($mongo){//列出所有集合$collections=$mongo->listCollections();//創建集合,獲得集合實例$collection=$mongo->createCollection('BUPT');//刪除集合$mongo->dropCollection('BUPT');//選擇集合,獲得集合實例$collection=$mongo->selectCollection('test');} function DocumentInsert($mongo){//插入一條數據$insert=array('name'=>'BUPT');$mongo->collectionInsertOne($insert);//插入多條數據$inserts=array(array('name'=>'BUPT'),array('by'=>'wangyang'));$mongo->collectionInsertMany($inserts);} function DocumentDelete($mongo){//簡單的過濾器設置$filter=$mongo->filterConstructor('name','=','BUPT');//復雜的過濾器$filter=$mongo->queryFilterConstructor(array(array('by','=','me'),'or',array('title','=','BUPT')));//刪除很多條,返回刪了多少條$deletenum=$mongo->collectionDeleteMany($filter);//刪除一條$mongo->collectionDeleteOne($filter);} function DocumentUpdate($mongo){//簡單的過濾器設置$filter=$mongo->filterConstructor('name','=','BUPT');//復雜的過濾器$filter=$mongo->queryFilterConstructor(array(array('by','=','me'),'or',array('title','=','BUPT')));//更新后的鍵值對$update=$mongo->updateConstructor('title','THU');//更新一條$mongo->collectionUpdateOne($filter,$update);//更新很多條$mongo->collectionUpdateMany($filter,$update);} function DocumentFind($mongo){//簡單的過濾器設置$filter=$mongo->filterConstructor('name','=','BUPT');//復雜的過濾器$filter=$mongo->queryFilterConstructor(array(array('by','=','me'),'or',array('title','=','BUPT')));//選項,目前只提供limit和sort設置,可為空$option=$mongo->optionConstructor(4,array('key'=>'_id','value'=>'-1'));//查找一條,返回一條數據實例$document=$mongo->collectionFindOne($filter,$option);//查找許多條,返回數據實例數組$documents=$mongo->collectionFindMany($filter,$option);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

4.異常處理
全程try catch,進入一個異常處理函數,詳情如下

public function throwException($e){if($e instanceof UnsupportedException){die("options are used and not supported by the selected server (e.g. collation, readConcern, writeConcern).");}elseif($e instanceof InvalidArgumentException){die("errors related to the parsing of parameters or options.");}elseif($e instanceof MongoDB\Driver\Exception\RuntimeException){die("other errors at the driver level (e.g. connection errors).");}elseif($e instanceof UnexpectedValueException){die(" the command response from the server was malformed.");}elseif($e instanceof MongoDB\Driver\Exception\BulkWriteException ){die("errors related to the write operation. Users should inspect the value returned by getWriteResult() to determine the nature of the error.");}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

三.平滑過度

話說的是平滑過度,但實際上并不可能。舉例而論,Mongo和MongoDB很多相同功能的函數的返回值都不一樣,設計上并不統一。其實這很能反應出老代碼的設計模式有沒有問題,如果分層清晰,那么在邏輯層里就根本不需要改動,需要改動的只是Model層到擴展層的關聯層,但是很遺憾的是往往事與愿違,筆者花費了很多時間在業務代碼上來做邏輯改動,只是為了適應新的版本。但是說到底,感覺自己單獨設計后臺邏輯時,也不會考慮這么多,畢竟誰能想到官方都這么坑呢?想得太多也是給自己挖坑,可能到了過度設計的范疇了。

需要注意的是Mongo的時間類MongoDate已經不再適用,而MongoDB的UTCDateTime的格式并不是簡單的unix時間戳,而是以微秒為單位的時間戳,升級的時候需要注意這一點,這意味新的時間戳是13位,而舊的時間戳是10位,而且在獲取時間戳的方式上也大不相同,MongoDate中設置了Get/set魔術方法,可以直接獲取時間戳屬性,而在UTCDateTime中則根本沒有public的成員,只能通過調用內部函數獲得時間戳。

此外,Mongo中的返回值是array結構的,MongoDB的返回值則是object結構的,需要通過BSONDocument類的getArrayCopy()方法進行轉換,筆者通過(array)強制轉換也是Ok的。

建議對這些部分也進行一個封裝,如下

public static function getUTCDateTime($timestamp=NULL){return new MongoDB\BSON\UTCDateTime($timestamp);}
  • 1
  • 2
  • 3

這樣通過靜態方法可以不實例化直接調用,使用起來很方便。

總的來說,這個從調研到封裝到修改測試上線,花了筆者很多的心血,造輪子是一個寂寞又不太容易獲取滿足感的事情,希望通過寫這篇博客,能有所幫助,實際上呢,獨立寫這樣一個封裝類,對我而言也是一個極大的鍛煉和提高


來源:http://blog.csdn.net/byr_wy/article/details/70768990

總結

以上是生活随笔為你收集整理的从PHP5到PHP7自我封装MongoDB以及平滑升级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

五月婷婷操 | 成年人视频免费在线播放 | 又黄又爽又刺激视频 | 99超碰在线观看 | 婷婷视频在线 | 国产最新福利 | 日韩在线播放视频 | 在线精品视频免费播放 | 欧美 日韩精品 | 久久综合福利 | 亚洲精品久久激情国产片 | 亚洲禁18久人片 | 国产免费一区二区三区网站免费 | 亚洲精品tv久久久久久久久久 | 国产精品av久久久久久无 | 一区二区电影在线观看 | 久久精品这里精品 | 狠狠色丁香婷婷综合久久片 | 日本性xxxxx| 91黄色免费网站 | 亚洲片在线| 久久精品视 | 国产亚洲aⅴaaaaaa毛片 | 最近中文字幕免费观看 | 视频一区视频二区在线观看 | 91女子私密保健养生少妇 | 国产亚洲一区 | 日日操狠狠干 | 91精品国产福利在线观看 | 亚洲精品在线视频网站 | 中文在线字幕免费观看 | 国产视频不卡 | 中文字幕欧美三区 | 特级a毛片| 天堂va欧美va亚洲va老司机 | 国产精品一区二区av麻豆 | 欧美日韩国产精品一区二区 | 久久综合九色综合网站 | 国产精品视频专区 | 中文字幕视频观看 | 欧美一区二视频在线免费观看 | 久草精品在线播放 | 精品久久久久国产 | 精品黄色在线观看 | 精品一区二区三区四区在线 | 中文字幕免费高清av | 91精品视频在线免费观看 | 日本久久久久久久久 | 免费色网站 | 7777xxxx| 精品国产三级 | 亚洲成人免费 | 9999激情 | 一区二区三区在线播放 | 亚洲jizzjizz日本少妇 | 免费看色视频 | 伊人婷婷久久 | 国产精品成人在线观看 | 久日精品| 99精品一区二区三区 | av大片免费看 | 成人av高清在线观看 | 亚洲日本三级 | 欧美午夜一区二区福利视频 | 激情影院在线观看 | 亚洲精品美女视频 | 尤物97国产精品久久精品国产 | 美女黄视频免费看 | 91在线91拍拍在线91 | 精品久久久影院 | 久久99国产精品二区护士 | 久久精品欧美 | 27xxoo无遮挡动态视频 | 国产理伦在线 | 精品欧美一区二区精品久久 | 人人爽人人乐 | 国产精品 欧美 日韩 | 摸阴视频 | 97香蕉久久超级碰碰高清版 | 久久激情视频免费观看 | www.久久久com | 久久综合久久综合这里只有精品 | 亚洲精品久久久蜜臀下载官网 | 色婷婷精品 | 亚洲精选久久 | 国产亚洲欧美日韩高清 | 亚州国产视频 | 一区二区三区免费网站 | 日韩精品一区电影 | 国产小视频在线免费观看视频 | 免费视频久久久 | 在线观看mv的中文字幕网站 | 热久久最新地址 | 国产超碰在线 | 二区在线播放 | 欧美视频xxx| 日本久久久久久久久久 | 日本成人中文字幕在线观看 | 欧美成人h版 | 黄色免费视频在线观看 | 中文字幕专区高清在线观看 | 99久久久久久久久久 | 五月天综合网站 | 国产精品成人aaaaa网站 | 91探花系列在线播放 | 天天综合在线观看 | 日本特黄一级片 | 九九视频网站 | 美女黄频 | 国产黄色精品在线 | 91亚洲夫妻 | a视频免费在线观看 | www.com在线观看 | 久久视频在线 | 视频一区二区三区视频 | 日韩精品大片 | 麻豆成人在线观看 | 亚洲一区二区精品视频 | 国产精品久久嫩一区二区免费 | 久久免费视频网站 | 久一网站 | 欧美精品你懂的 | 国产成人久久精品77777 | 久久美女免费视频 | 国产精品丝袜久久久久久久不卡 | 青青河边草观看完整版高清 | 波多野结衣在线观看视频 | 亚洲永久精品在线观看 | 国产福利91精品 | 亚洲精品影视在线观看 | 久久天堂精品视频 | 精品国偷自产在线 | 亚洲成人精品国产 | 精品美女久久 | 国产精品久久久久9999吃药 | 国产精品成人久久 | 一级久久精品 | 又爽又黄又无遮挡网站动态图 | 天天操人人要 | 欧美日韩亚洲在线观看 | 视频一区视频二区在线观看 | 国产护士hd高朝护士1 | 少妇bbw搡bbbb搡bbbb | 黄色av网站在线观看免费 | 久草在线这里只有精品 | 午夜精品一二区 | 国产视频日韩视频欧美视频 | 久久综合偷偷噜噜噜色 | 91av视屏 | 国产精品久久免费看 | 国产女人18毛片水真多18精品 | 成x99人av在线www | 欧美永久视频 | 久久久久久高潮国产精品视 | 婷婷久月| 亚洲在线视频免费观看 | 在线视频欧美精品 | 国产亚洲情侣一区二区无 | 中国一级片免费看 | 国产高清无av久久 | 丁香婷婷深情五月亚洲 | 国产精品aⅴ | 日韩精品免费在线播放 | 成人在线播放视频 | 色偷偷88欧美精品久久久 | 人人看人人爱 | 国产精品一区二区三区久久久 | 婷婷激情在线 | 欧美另类交人妖 | 成人一级免费电影 | 黄色一及电影 | 亚洲亚洲精品在线观看 | 色综合久久五月 | 日本精品免费看 | 久久综合加勒比 | 日韩精品一区二区三区不卡 | 在线观看中文字幕av | 天天操 夜夜操 | 久久毛片网站 | 国产精品av免费在线观看 | 98超碰人人| 人人草人 | 国产剧情一区二区 | 亚洲精品午夜视频 | 丁香花在线视频观看免费 | 国产色拍| www.大网伊人 | 欧美日韩综合在线观看 | 精品专区| 日韩素人在线观看 | 亚洲精品在线观看中文字幕 | 综合久久综合久久 | 欧美日一级片 | 中文字幕一区二区三区四区在线视频 | 欧美久久久影院 | 在线国产中文字幕 | 草莓视频在线观看免费观看 | 日本在线观看黄色 | 久久夜色精品国产欧美乱 | 日韩在线视频免费播放 | 亚洲精品欧美精品 | 国产一区av在线 | 久热国产视频 | 激情综合五月天 | 婷婷综合视频 | 中文字幕丝袜美腿 | 免费黄色一区 | 国产精品高潮呻吟久久久久 | 免费日韩一区 | 久久久黄色| 国产精品乱码久久久久 | www.亚洲精品在线 | 免费看黄在线观看 | 狠狠色狠狠色综合日日92 | 成人黄色大片在线观看 | 亚洲免费视频在线观看 | 探花视频网站 | 欧洲精品在线视频 | av福利在线 | 久99久视频| 九九久久视频 | 久草视频在线播放 | 日本精品视频在线观看 | 久久精品99国产 | 91大神在线观看视频 | 欧美精品在线观看免费 | 免费看污黄网站 | 日本三级大片 | 欧美人交a欧美精品 | 在线亚洲人成电影网站色www | 中文字幕在线一区观看 | 超碰人人国产 | 国产视频在线看 | 91麻豆精品国产91久久久更新时间 | 久久色网站 | 久青草国产在线 | 亚洲综合在线五月天 | 人人插人人草 | 在线视频 一区二区 | 日韩免费在线视频观看 | 国产高清精品在线 | 深夜免费小视频 | 在线免费av网站 | 婷婷国产在线观看 | 97色狠狠| 国产精品久久久久久久毛片 | 久免费视频 | 超碰97成人 | 久久久久久久久久久综合 | 久久国产经典视频 | 91精品视频在线免费观看 | 国产精品免费久久久 | 久久伊人操 | 最近中文字幕mv | 亚洲粉嫩av | 看片的网址 | 福利视频一区二区 | 粉嫩aⅴ一区二区三区 | 色偷偷88欧美精品久久久 | 在线精品视频免费观看 | 中文字幕刺激在线 | 91完整版观看| 狠狠久久伊人 | 久久免费福利 | 五月婷婷综合久久 | 97在线视频免费 | 黄a网站 | 国产一区福利在线 | 国产99re | 91中文字幕在线播放 | 久久久久久久久久久高潮一区二区 | www.五月婷 | 99久久精品费精品 | 亚洲黄网站 | 手机成人免费视频 | 日韩午夜三级 | 久久国产经典视频 | 国产精品一区在线 | www.91成人| 国产精品久久久久久模特 | 精品免费久久久久久 | 国产精品99久久久久的智能播放 | 日韩中文久久 | 久久国产精品久久精品国产演员表 | 成年人网站免费在线观看 | 国产综合视频在线观看 | 99视频网站| 日本久久高清视频 | 777xxx欧美| 亚洲精品字幕在线 | 亚洲午夜小视频 | 日韩av一卡二卡三卡 | 国产精品亚洲精品 | 狠狠久久 | 二区三区精品 | 少妇按摩av| 久久亚洲专区 | 久久男女视频 | 中文字幕欧美日韩va免费视频 | 99热在 | 国产成人福利在线观看 | 午夜久久久久久久久久久 | 国产激情免费 | 91亚瑟视频| 狠狠的操狠狠的干 | 在线免费视频你懂的 | 狠狠色丁香久久婷婷综合_中 | 久久婷婷色 | 在线亚洲人成电影网站色www | 日日日操操 | 欧美色噜噜噜 | 中文久草| 欧美 亚洲 另类 激情 另类 | 欧美亚洲久久 | 麻豆91在线播放 | 人人网av| 亚洲成人av在线播放 | av超碰在线| 在线精品亚洲 | 国产亚洲综合在线 | 亚洲理论在线观看电影 | 黄色一级大片在线免费看国产一 | 日韩一区二区三区观看 | 中文字幕av在线不卡 | 六月丁香社区 | 亚洲激情| av看片网| 亚洲成人av一区二区 | 亚洲国产一二三 | 国产精品久久毛片 | 欧美性色综合 | 久久免费看a级毛毛片 | 日韩三级不卡 | 成人资源站 | 国产精品一区二区久久久 | 天天干天天插 | 日日操日日插 | 久草观看视频 | 国产一级a毛片视频爆浆 | 久久的色| 久草在线视频在线观看 | 精品福利视频在线 | 国产精品6999成人免费视频 | 国产视频在线观看一区二区 | 欧洲精品一区二区 | 在线视频国产区 | 91麻豆精品国产91久久久久久 | 久久久久欠精品国产毛片国产毛生 | 欧美一级片在线播放 | 超碰在线97观看 | 黄色三级免费网址 | 久久久资源网 | 国产精品一区二区av日韩在线 | 国产精品久久久久久久午夜 | 国内精品一区二区 | 黄色三级网站在线观看 | japanesexxxxfreehd乱熟| 81国产精品久久久久久久久久 | 国产69精品久久99不卡的观看体验 | 国产在线精品福利 | 欧美一级片在线播放 | 丁香视频 | 日韩在线观看网址 | av丝袜在线 | 色综合久| 国产日产精品久久久久快鸭 | 午夜免费视频网站 | 国产一级片久久 | 天天艹天天 | 亚洲综合少妇 | 青青河边草观看完整版高清 | 色狠狠一区二区 | 98福利在线 | 绯色av一区 | 久久久久国产一区二区三区 | 日本中文字幕视频 | 国产精品美女视频网站 | 国产午夜精品一区二区三区欧美 | 国产午夜精品一区二区三区在线观看 | 婷婷成人在线 | 毛片永久新网址首页 | 91久久精品一区二区二区 | 精品99免费 | 高清av在线免费观看 | 日韩三级中文字幕 | 成人影视免费看 | 青青草久草在线 | 九九热免费观看 | 国产精品久久久久久久久免费看 | 欧美激情精品一区 | 久久国内精品99久久6app | 在线观看国产中文字幕 | 久久影视网| 国产精品视频全国免费观看 | 免费在线日韩 | 国产91国语对白在线 | 午夜精品久久久久久久99 | 国产成人精品999在线观看 | 国产在线观看国语版免费 | 久久久综合香蕉尹人综合网 | ,午夜性刺激免费看视频 | 激情综合网天天干 | 亚洲中字幕 | 免费在线黄色av | 日韩久久精品一区二区三区下载 | 日韩在线视频线视频免费网站 | 午夜精品成人一区二区三区 | 黄网站免费看 | 国产精品资源在线观看 | 亚洲干 | 99高清视频有精品视频 | 国产精品va在线观看入 | 日本成人中文字幕在线观看 | 国产99久久久欧美黑人 | 亚洲自拍av在线 | 成人作爱视频 | 午夜精品一区二区三区四区 | 在线免费国产视频 | 91久色蝌蚪 | 色播99 | 国产一区二区在线视频观看 | 美女精品久久久 | 国产高清久久 | 99在线精品免费视频九九视 | 天天天天色射综合 | 中文字幕乱偷在线 | av一区二区在线观看中文字幕 | 五月婷婷激情网 | 日日操日日操 | 99国产在线 | 中文字幕免费看 | 精品国产一区二区三区久久久 | 国产一级二级三级在线观看 | 日本大尺码专区mv | 久久国语露脸国产精品电影 | www.狠狠色 | 日韩精品视频第一页 | 三级a视频 | 婷婷视频| 免费又黄又爽视频 | 国产精品久久久久一区 | 亚洲国产中文在线观看 | 国产伦精品一区二区三区高清 | 一级欧美一级日韩 | 国产一区二区午夜 | 国产精品毛片久久久久久 | 亚洲欧美国产日韩在线观看 | 成人午夜电影免费在线观看 | 五月婷婷香蕉 | 99免费精品视频 | 国产成本人视频在线观看 | 97超碰人人模人人人爽人人爱 | 成人在线免费观看视视频 | 欧美a在线免费观看 | 亚洲性少妇性猛交wwww乱大交 | 国产福利在线免费 | 日本中文字幕影院 | 日韩免费一区二区三区 | 日韩高清一区 | 在线天堂中文在线资源网 | 亚洲精品视频偷拍 | 免费a网址 | 国产一区二区三区黄 | 精品专区一区二区 | 欧美在线视频免费 | 亚洲国产影院av久久久久 | 香蕉视频国产在线 | 99精品在线免费 | 亚洲日本va午夜在线电影 | 欧美成人黄色片 | 精品婷婷 | 亚洲成人国产精品 | 午夜精品一区二区三区在线 | 日韩免费视频在线观看 | 97精品国产97久久久久久免费 | 成人毛片在线观看 | 国产麻豆果冻传媒在线观看 | 日本3级在线观看 | 成x99人av在线www | 国产精品毛片久久久久久久久久99999999 | 黄色aa久久 | 日韩精品在线观看av | 91高清免费 | 2017狠狠干| 中文字幕精品三区 | 97夜夜澡人人爽人人免费 | 成年人视频免费在线播放 | 一级a毛片高清视频 | 久久精品专区 | 免费三级黄色 | 国产又粗又猛又爽又黄的视频先 | 欧美另类人妖 | 中文字幕 在线 一 二 | 91久久精品一区二区二区 | 国产精品第一页在线观看 | 大胆欧美gogo免费视频一二区 | 亚洲丁香久久久 | 黄色在线成人 | 五月婷婷av | 亚洲伦理一区二区 | 国产aa精品 | 狠狠婷婷| 97香蕉久久国产在线观看 | 亚洲 精品在线视频 | 国产在线观看国语版免费 | 日韩电影一区二区在线观看 | 久草手机视频 | 久热国产视频 | 国产精品网站一区二区三区 | 亚洲精品在线网站 | 精品在线播放视频 | 日韩v在线91成人自拍 | 成人一区二区三区中文字幕 | 国产精品18久久久久久久网站 | 91丨精品丨蝌蚪丨白丝jk | 国产不卡精品 | 日韩欧美在线国产 | 成人影片在线免费观看 | 中文在线字幕免费观看 | 国产精品精品国产 | 精品久久久久久久久久岛国gif | 日韩免费成人 | 国产99久久久久 | 亚洲精品乱码久久久久久写真 | av在线成人 | 亚洲另类视频在线观看 | 精品免费久久久久久 | 国产精品久久久久久久久软件 | 久草在线网址 | 日本成人黄色片 | 久久国产精品视频 | 九九久久久久99精品 | 丁香五月网久久综合 | 亚洲一区二区三区精品在线观看 | 国产99久久久欧美黑人 | 五月导航| 亚洲精品在线观看中文字幕 | 在线观看视频国产一区 | 日韩精品免费一线在线观看 | 日韩网站在线免费观看 | 午夜电影久久 | 久久五月天婷婷 | 午夜av日韩 | 亚洲高清网站 | 国产亚洲日本 | 欧美日韩亚洲精品在线 | 天堂v中文| www久久久久 | 99久久精品免费 | 99精品国产99久久久久久福利 | 99国产精品久久久久久久久久 | 久久黄色网页 | 一二三久久久 | 久久久久久久久久电影 | 国产精品久久久久久久av大片 | 精品亚洲视频在线观看 | 人人爽人人爽人人爽学生一级 | 天天插日日插 | 久久麻豆视频 | 日韩中文字幕在线 | 人人爽人人爽人人爽 | 97国产超碰 | av黄网站| 国产黄色在线看 | 亚洲精品ww | 激情丁香| 波多野结衣日韩 | 欧美va在线观看 | 2021国产精品 | 精品国产电影一区二区 | 成人av影视观看 | 久久99精品国产一区二区三区 | 国产精品观看在线亚洲人成网 | 97高清视频 | 国产精品免费一区二区三区 | 天天操天天操天天操天天操天天操天天操 | 精品在线视频播放 | 激情综合久久 | 国产高清 不卡 | 99久久精品免费看国产免费软件 | 亚洲一区精品人人爽人人躁 | 五月天视频网站 | 狠狠狠狠狠狠 | 九色免费视频 | www成人精品 | 国产精品视频永久免费播放 | 亚洲精品视频在 | 色视频在线免费观看 | 九九久| 国产精品一区二区三区观看 | 九九九热精品 | 免费中文字幕 | 97国产超碰在线 | 午夜久久久精品 | 欧美日韩99| 在线观看视频你懂得 | 在线精品视频免费播放 | 久操视频在线免费看 | www.夜色321.com| 91精品国产欧美一区二区成人 | 五月精品| 亚洲黄色免费 | 国产精品久久久久久久久久免费 | 午夜91在线| 色婷婷狠 | 国际av在线| 亚州av免费 | av观看免费在线 | 久久国产精品一国产精品 | 国产一区二区精品久久 | 91精品视频在线 | 97超碰人人澡人人 | 九九久久国产精品 | 天天色 天天 | 在线观看中文字幕 | 麻豆精品视频 | 欧美日韩精品久久久 | 中国一级片免费看 | wwwwwww色| 国产黑丝一区二区 | 久久久久久久久网站 | 日韩深夜在线观看 | 久草在线免费色站 | 久久久网页 | 99热这里只有精品国产首页 | 国产一区二区久久精品 | 亚洲国产午夜 | 久久久久久久久久免费 | 黄色片视频免费 | 久久人人爽人人片 | 免费看毛片在线 | 国产小视频你懂的在线 | 麻豆免费在线视频 | 在线成人免费电影 | 欧美日韩有码 | 久久99久久99精品免费看小说 | 中文字幕高清在线播放 | 国产日韩在线一区 | 九九九九免费视频 | 国产九色在线播放九色 | 日韩av一区二区在线播放 | 在线视频 国产 日韩 | 三级av在线播放 | 久久99亚洲热视 | 在线 视频 一区二区 | 99精品久久久久久久久久综合 | 久艹视频在线观看 | 香蕉久草在线 | 欧美精品久久久久久久久久 | 麻豆精品视频在线 | 韩国一区视频 | 中文字幕在线播放日韩 | 九九九毛片| 日韩av男人的天堂 | 久久国产露脸精品国产 | 99精品视频在线 | 日韩精品视频免费专区在线播放 | 国产成人在线免费观看 | 91九色porny蝌蚪视频 | 五月开心六月婷婷 | 欧美天天干 | 天天干天天射天天爽 | 国产伦精品一区二区三区无广告 | 免费网站看v片在线a | 91成人网在线 | 一区二区三区日韩精品 | 在线观看视频中文字幕 | 狠狠色丁香婷婷综合久小说久 | 高清不卡一区二区在线 | 丁香九月激情 | 久久久久久看片 | 97国产电影 | 在线观看你懂的网址 | 日韩中文字幕在线观看 | 最近中文字幕完整视频高清1 | 日韩av有码在线 | 99热最新| 欧美午夜久久 | 国产 精品 资源 | 久久久久免费网站 | 精品国产成人av | 日日夜夜天天射 | 日韩专区 在线 | 免费试看一区 | 久久99久国产精品黄毛片入口 | 99中文视频在线 | 国产高清第一页 | 中文字幕亚洲综合久久五月天色无吗'' | 国产精品不卡av | 人人干网站 | 99视频免费在线观看 | 狠狠色狠狠色综合日日92 | 午夜久久久久久久久久久 | 久久99精品久久只有精品 | 国产精品一区二区吃奶在线观看 | 国产视频亚洲精品 | 亚洲精品456在线播放 | 日本h视频在线观看 | 日韩免费一二三区 | 91在线国内视频 | 中文字幕亚洲不卡 | 国产乱视频 | 国产日韩欧美自拍 | 午夜精品久久久久久99热明星 | 国产色影院 | 香蕉精品视频在线观看 | 天天射天天操天天干 | 欧美成人视 | 99这里只有 | 日韩精品一区二区在线视频 | 9999在线观看 | 欧美大片第1页 | 亚洲妇女av | 国产色拍拍拍拍在线精品 | 狠狠色综合网站久久久久久久 | 正在播放国产一区二区 | 久久夜色精品国产欧美一区麻豆 | 日韩精品免费一区二区三区 | 日韩在线观看的 | 九草视频在线观看 | 亚洲永久国产精品 | 高清av在线免费观看 | 日韩在线观看电影 | 九九九九色 | 久久精品—区二区三区 | 国产亚洲精品综合一区91 | 国产精品一区二区三区久久 | 国产精品国产三级国产不产一地 | avwww在线观看 | 色综合天天爱 | 久久美女电影 | 日韩高清网站 | 成人黄色视 | 国内精品久久久久 | 欧美日一级片 | 黄色小视频在线观看免费 | 五月婷婷六月丁香 | 亚洲免费av在线播放 | 欧美日韩大片在线观看 | 最新免费av在线 | 欧美aa一级| 欧美日韩高清一区二区三区 | 国产精品久久久久三级 | 色视频一区 | 中文字幕日本在线 | 欧美在线不卡一区 | 欧美在线观看视频 | 91麻豆高清视频 | 亚洲精品国偷拍自产在线观看 | 日韩中字在线 | 日韩高清不卡一区二区三区 | 色播五月激情综合网 | 亚洲精品国内 | 色小说在线 | 99国产情侣在线播放 | 亚洲一级免费观看 | 国产精品一区二区久久久 | 久久av免费观看 | av片子在线观看 | 国产剧情一区二区 | 日本黄色a级大片 | 91香蕉视频720p | 狠狠操操网| 国产 一区二区三区 在线 | 日日操日日操 | 久久色网站 | av免费看电影 | 欧美一二三区在线观看 | 天天操天天干天天玩 | 国产精品一区二区三区在线看 | 人人看97| 国产精品国产亚洲精品看不卡 | 成人91免费视频 | 国产视频精品免费 | 中文字幕人成乱码在线观看 | 国产男女免费完整视频 | 国产又粗又猛又爽又黄的视频免费 | 成人黄色在线播放 | 午夜精品久久久久久久久久久 | 夜夜视频资源 | 88av视频 | 91亚洲精品久久久蜜桃网站 | 日韩欧美一区二区三区免费观看 | 亚洲成人欧美 | 日韩视频免费观看高清完整版在线 | 欧美一区在线看 | 蜜臀一区二区三区精品免费视频 | 大型av综合网站 | 国产一级高清 | 中文字幕国产在线 | 亚洲精品国产精品国 | 500部大龄熟乱视频 欧美日本三级 | 欧美韩国日本在线观看 | 激情综合亚洲精品 | 日日婷婷夜日日天干 | 99久久婷婷国产综合亚洲 | 91精品国产乱码 | 国产日本亚洲高清 | wwwwwww色| 亚洲免费一级电影 | 亚洲无人区小视频 | 日本中文不卡 | 在线a亚洲视频播放在线观看 | 尤物九九久久国产精品的分类 | 国产成人精品亚洲 | 最近中文字幕完整视频高清1 | 麻豆视频国产 | 91麻豆精品国产午夜天堂 | 日韩久久影院 | 国产糖心vlog在线观看 | 国产视频97 | av免费播放 | 99久久精品国产亚洲 | 日韩乱色精品一区二区 | 18岁免费看片 | 天天草天天草 | 夜夜操综合网 | 成人亚洲免费 | 精品国产aⅴ麻豆 | 免费成人av在线看 | 久久久久成人精品免费播放动漫 | 日韩网站在线免费观看 | 亚洲精品tv久久久久久久久久 | 久久视影| 精品在线一区二区三区 | 久久久wwww | 久久综合五月婷婷 | 精品一区二三区 | 成人黄色毛片 | 999久久久免费视频 午夜国产在线观看 | 国产麻豆电影在线观看 | 日日干网 | 久久午夜电影网 | 国产精品大尺度 | 久青草视频在线观看 | 国产日产精品一区二区三区四区的观看方式 | 九色porny真实丨国产18 | 国产精品久久网站 | 中午字幕在线观看 | 成人小视频在线观看免费 | 毛片美女网站 | 天天综合天天综合 | 日韩,中文字幕 | 日韩两性视频 | 日日夜夜天天干 | 视频在线一区二区三区 | 久久综合成人网 | 中文视频在线 | 色.www| 91网免费看 | 国产精品免费看久久久8精臀av | 96精品视频 | 亚洲最新精品 | 热久久视久久精品18亚洲精品 | 色在线免费视频 | 五月婷婷六月丁香在线观看 | 青青河边草免费直播 | 奇米影视8888在线观看大全免费 | 操操操人人人 | 一区二区伦理电影 | 五月婷婷丁香综合 | 国产精品久久久久免费观看 | 日本性xxxxx| 免费看一级片 | 久久精品8 | 狠狠色噜噜狠狠 | 99视屏| 在线中文字幕av观看 | 国产成a人亚洲精v品在线观看 | 久草在线免费新视频 | 狠狠狠狠干| 精品久久网 | 国产亚洲情侣一区二区无 | 国产黄在线 | 五月丁婷婷 | 国产成人a亚洲精品v | 激情综合网在线观看 | 狠狠操影视 | 黄网站色成年免费观看 | 国产高清黄色 | 免费特级黄色片 | 日批在线看 | 激情片av | 国产精品久久久久久久av电影 | 亚洲欧美国产精品 | 久久av免费电影 | 天天干天天搞天天射 | 中文字幕欧美三区 | 毛片网在线观看 | 99久久99久久精品国产片果冰 | 我要看黄色一级片 | 黄网站免费大全入口 | 日韩高清一区 | 三级在线国产 | 日本在线视频一区二区三区 | 国产视频精选在线 | 成人午夜电影网 | 夜色.com| 国产专区在线视频 | 亚洲精品字幕 | 久草爱视频| 久久香蕉国产精品麻豆粉嫩av | 女人高潮特级毛片 | 日韩激情网 | 婷婷综合av | 亚洲91av| 国产黄色片免费观看 | 日韩中文字幕第一页 | 亚洲午夜精品电影 | 国产丝袜网站 | 中文字幕制服丝袜av久久 | 亚洲国产欧美在线看片xxoo | av不卡免费在线观看 | av在线播放网址 | 三级黄色网络 | 午夜精品成人一区二区三区 | 久草在线视频首页 | 国产韩国精品一区二区三区 | 亚洲欧美成人在线 | 中文字幕视频观看 | 久草视频资源 | 最近中文字幕免费视频 | 成年美女黄网站色大片免费看 | 国产特黄色片 | 精品一区二区免费在线观看 | 色资源网在线观看 | 人人狠 | 亚洲精品456在线播放第一页 | 久久视频这里有精品 | 激情五月六月婷婷 | 久久精品国产亚洲a | 久久 一区| 亚洲永久精品一区 | 91久久久久久久一区二区 | 色婷婷色| 久久久免费观看完整版 | 主播av在线| 中文字幕中文 | 99精品欧美一区二区三区黑人哦 | 99综合电影在线视频 | 久久伊人国产精品 | 国产黄色片在线 | 亚洲欧美少妇 | 黄色免费在线视频 | 日本精品一区二区在线观看 | 日本特黄特色aaa大片免费 | 99在线热播精品免费 | 中文av字幕在线观看 | 亚洲国产精品女人久久久 | 五月激情五月激情 | 91精品办公室少妇高潮对白 | 久久久久久久影视 | 免费亚洲片 | 天天综合网久久综合网 | av丝袜天堂 | 九月婷婷人人澡人人添人人爽 | 色婷婷在线播放 | 精品国产_亚洲人成在线 | 黄色com| 国产综合在线视频 | 欧美午夜a | 高清国产午夜精品久久久久久 | 国产精品久久二区 | 欧美激情第一区 | 精品视频免费 | 国内成人av | 成人精品一区二区三区中文字幕 | 国产精品福利在线观看 | 999国内精品永久免费视频 | 黄色软件在线观看视频 | 久久综合视频网 | 成人av免费在线播放 | 五月婷婷播播 | 日韩中文字幕第一页 | 一区二区三区av在线 | 午夜精品久久久久久久久久久 | 中文字幕在线观看一区二区 | 午夜神马福利 | 国产一级大片免费看 | 国产手机在线 | 免费在线看v | 亚洲一级免费观看 | 欧美一级xxxx | 成年性视频| 五月天视频网站 | 日韩激情视频在线 | 波多野结衣视频网址 | 最新av免费在线观看 | 日韩有码专区 | 韩国av免费 | 一级黄色片在线播放 | www.黄色在线 | 毛片网免费 | 成人网444ppp | 成人黄色一级视频 | 欧美一区二区在线免费观看 | 在线精品视频免费观看 | 久久99精品国产99久久6尤 |