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

Redis 實戰篇:通過 Geo 類型實現附近的人邂逅女神

開發 前端 Redis
GEO 類型使用 GeoHash 編碼方法實現了經緯度到 Sorted Set 中元素權重分數的轉換,這其中的兩個關鍵機制就是對二維地圖做區間劃分,以及對區間進行編碼。

[[409485]]

碼老濕,閱讀了你的巧用數據類型實現億級數據統計之后,我學會了如何游刃有余的使用不同的數據類型(String、Hash、List、Set、Sorted Set、HyperLogLog、Bitmap)去解決不同場景的統計問題。

產品經理說他有一個 idea,為廣大少男少女提供一個連接彼此的機會。

讓處于這最美的年齡的少男少女能在每一個十二時辰里能邂逅到那個 Ta。

所以就想開發一款 App,用戶登陸后能發現附近的那個 Ta,連接彼此。

我該如何實現發現附近的人?我也希望通過這個 App邂逅女神……

記憶中,一個下班的夜晚,她從人群中輕盈的移動著,那高挑苗條的身材像漂浮在空間中的一個飄逸的音符。她的眼睛充滿清澈的陽光和活力,她的雙眸中印著銀河系的星光。

開篇寄語

  • 多鍛煉自己的表達能力,特別是在工作中。很多人說「干活的不如那些做 PPT 的」,實際上老板都不傻,為何他們會更認可那些做 PPT 的?
  • 因為他們從老板的角度考慮問題,對他而言,需要的是一個「解決方案」。多從一個創造者的視角去考慮問題,而不是局限在用程序員的視角考慮問題;
  • 多想一下這個東西到底給人提供什么價值,而不是「我要怎么實現它」。當然,怎么實現是必須的,但通常不是最重要的。

什么是面向 LBS 應用

經緯度是經度與緯度的合稱組成一個坐標系統。又稱為地理坐標系統,它是一種利用三度空間的球面來定義地球上的空間的球面坐標系統,能夠標示地球上的任何一個位置(小數點后7位,精度可以到1厘米)。

經度的范圍在 (-180, 180],緯度的范圍 在(-90, 90],緯度正負以赤道為界,北正南負,經度正負以本初子午線 (英國格林尼治天文臺) 為界,東正西負。

附近的人 也就是常說的 LBS (Location Based Services,基于位置服務),它圍繞用戶當前地理位置數據而展開的服務,為用戶提供精準的邂逅服務。

附近的人核心思想如下:

  1. 以 “我” 為中心,搜索附近的 Ta;
  2. 以 “我” 當前的地理位置為準,計算出別人和 “我” 之間的距離;
  3. 按 “我” 與別人距離的遠近排序,篩選出離我最近的用戶。

MySQL 實現

計算「附近的人」,通過一個坐標計算這個坐標附近的其他數據,按照距離排序,如何下手呢?

以用戶為中心,給定一個 1000 米作為半徑畫圓,那么圓形區域內的用戶就是我們想要邂逅的「附近的人」。

將經緯度存儲到 MySQL:

  1. CREATE TABLE `nearby_user` ( 
  2.   `id` int(11) NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(255) DEFAULT NULL COMMENT '名稱'
  4.   `longitude` double DEFAULT NULL COMMENT '經度'
  5.   `latitude` double DEFAULT NULL COMMENT '緯度'
  6.   `create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '創建時間'
  7.   PRIMARY KEY (`id`) 
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

可是總不能遍歷所有的「女神」經緯度與自己的經緯度數據計算在根據距離排序,這個計算量也太大了。

我們可以通過區域來過濾出有限「女神」坐標數據,再對矩形區域內的數據進行全量距離計算再排序,這樣計算量明顯降低。

如何劃分矩形區域呢?

”在圓形外套上一個正方形,根據用戶經、緯度的最大最小值(經、緯度 + 距離),作為篩選條件過濾數據,就很容易將正方形內的「女神」信息搜索出來。


多出來的一些區域咋辦?

多出來的這部分區域內的用戶,到圓點的距離一定比圓的半徑要大,那么我們就計算用戶中心點與正方形內所有用戶的距離,篩選出所有距離小于等于半徑的用戶,圓形區域內的所用戶即符合要求的附近的人。

為了滿足高性能的矩形區域算法,數據表需要在經緯度坐標加上復合索引 (longitude, latitude),這樣可以最大優化查詢性能。

實戰

根據經緯度和距離獲取外接矩形最大、最小經緯度以及根據經緯度計算距離使用了一個第三方類庫:

  1. <dependency> 
  2.      <groupId>com.spatial4j</groupId> 
  3.      <artifactId>spatial4j</artifactId> 
  4.      <version>0.5</version> 
  5. </dependency> 

獲取到外接矩形后,以矩形的最大最小經、緯度值搜索正方形區域內的用戶,再剔除超過指定距離的用戶,就是最終的附近的人。

  1. /** 
  2.  * 獲取附近 x 米的人 
  3.  * 
  4.  * @param distance 搜索距離范圍 單位km 
  5.  * @param userLng  當前用戶的經度 
  6.  * @param userLat  當前用戶的緯度 
  7.  */ 
  8. public String nearBySearch(double distance, double userLng, double userLat) { 
  9.   //1.獲取外接正方形 
  10.   Rectangle rectangle = getRectangle(distance, userLng, userLat); 
  11.   //2.獲取位置在正方形內的所有用戶 
  12.   List<User> users = userMapper.selectUser(rectangle.getMinX(), rectangle.getMaxX(), rectangle.getMinY(), rectangle.getMaxY()); 
  13.   //3.剔除半徑超過指定距離的多余用戶 
  14.   users = users.stream() 
  15.     .filter(a -> getDistance(a.getLongitude(), a.getLatitude(), userLng, userLat) <= distance) 
  16.     .collect(Collectors.toList()); 
  17.   return JSON.toJSONString(users); 
  18.  
  19. // 獲取外接矩形 
  20. private Rectangle getRectangle(double distance, double userLng, double userLat) { 
  21.   return spatialContext.getDistCalc() 
  22.     .calcBoxByDistFromPt(spatialContext.makePoint(userLng, userLat),  
  23.                          distance * DistanceUtils.KM_TO_DEG, spatialContext, null); 
  24.  
  25.      /*** 
  26.      * 球面中,兩點間的距離 
  27.      * @param longitude 經度1 
  28.      * @param latitude  緯度1 
  29.      * @param userLng   經度2 
  30.      * @param userLat   緯度2 
  31.      * @return 返回距離,單位km 
  32.      */ 
  33.     private double getDistance(Double longitude, Double latitude, double userLng, double userLat) { 
  34.         return spatialContext.calcDistance(spatialContext.makePoint(userLng, userLat), 
  35.                 spatialContext.makePoint(longitude, latitude)) * DistanceUtils.DEG_TO_KM; 
  36.     } 

由于用戶間距離的排序是在業務代碼中實現的,可以看到SQL語句也非常的簡單。

  1. SELECT * FROM nearby_user 
  2. WHERE 1=1 
  3. AND (longitude BETWEEN #{minlng} AND #{maxlng}) 
  4. AND (latitude BETWEEN #{minlat} AND #{maxlat}) 

但是數據庫查詢性能畢竟有限,如果「附近的人」查詢請求非常多,在高并發場合,這可能并不是一個很好的方案。

嘗試 Redis Hash 未果

我們一起分析下 LBS 數據的特點:

  1. 每個「女神」都有一個 ID 編號,每個ID 對應著經緯度信息。
  2. 「宅男」登陸 app獲取「心動女生」的時候,app根據「宅男」的經緯度查找附近的「女神」。
  3. 獲取到位置符合的「女神」ID 列表后,再從數據庫獲取 ID 對應的「女神」信息返回用戶。

數據特點就是一個女神(用戶)對應著一組經緯度,讓我想到了 Redis 的 Hash 結構。也就是一個 key(女神 ID) 對應著 一個 value(經緯度)。

Hash看起來好像可以實現,但是 LBS 應用除了記錄經緯度以外,還需要對 Hash 集合中的數據進行范圍查詢,根據經緯度換算成距離排序。

而 Hash 集合的數據是無序的,顯然不可取。

Sorted Set 初見端倪

Sorted Set 類型是是否合適呢?因為它可以排序。

Sorted Set 類型也是一個 key對應一個 value,key元素內容,而value `就是該元素的權重分數。

Sorted Set可以根據元素的權重分數對元素排序,這樣看起來就滿足我們的需求了。

比如,Sorted Set 的元素是「女神ID」,元素對應的權重 score 是經緯度信息。

問題來了,Sorted Set 元素的權重值是一個浮點數,經緯度是經度、緯度兩個值,咋辦呢?能不能將經緯度轉換成一個浮點數呢?

思路對了,為了實現對經緯度比較,Redis 采用業界廣泛使用的 GeoHash 編碼,分別對經度和緯度編碼,最后再把經緯度各自的編碼組合成一個最終編碼。

這樣就實現了將經緯度轉換成一個值,而 Redis 的 GEO 類型的底層數據結構用的就是 Sorted Set來實現。

我們來看下 GeoHash 如何將經緯度編碼的。

GEOHash 編碼

關于 GeoHash 可參考 :https://en.wikipedia.org/wiki/Geohash

GeoHash算法將二維的經緯度數據映射到一維的整數,這樣所有的元素都將在掛載到一條線上,距離靠近的二維坐標映射到一維后的點之間距離也會很接近。

當我們想要計算「附近的人時」,首先將目標位置映射到這條線上,然后在這個一維的線上獲取附近的點就行了。

GeoHash 編碼會把一個經度值編碼成一個 N 位的二進制值,我們來對經度范圍[-180,180]做 N 次的二分區操作,其中 N 可以自定義。

在進行第一次二分區時,經度范圍[-180,180]會被分成兩個子區間:[-180,0) 和[0,180](我稱之為左、右分區)。

此時,我們可以查看一下要編碼的經度值落在了左分區還是右分區。如果是落在左分區,我們就用 0 表示;如果落在右分區,就用 1 表示。

這樣一來,每做完一次二分區,我們就可以得到 1 位編碼值(不是0 就是 1)。

再對經度值所屬的分區再做一次二分區,同時再次查看經度值落在了二分區后的左分區還是右分區,按照剛才的規則再做 1 位編碼。當做完 N 次的二分區后,經度值就可以用一個 N bit 的數來表示了。

所有的地圖元素坐標都將放置于唯一的方格中。方格越小,坐標越精確。然后對這些方格進行整數編碼,越是靠近的方格編碼越是接近。

編碼之后,每個地圖元素的坐標都將變成一個整數,通過這個整數可以還原出元素的坐標,整數越長,還原出來的坐標值的損失程度就越小。對于「附近的人」這個功能而言,損失的一點精確度可以忽略不計。

比如對經度值等于 169.99 進行 4 位編碼(N = 4,做 4 次分區),把經度區間[-180,180]分成了左分區[-180,0) 和右分區[0,180]。

  • 169.99 屬于右分區,使用 1 表示第一次分區編碼;
  • 再將 169.99 經過第一次劃分所屬的 [0, 180] 區間繼續分成 [0, 90) 和 [90, 180],169.99 依然在右區間,編碼 ‘1’。
  • 將[90, 180] 分為[90, 135) 和 [135, 180],這次落在左分區,編碼 ‘0’。

如此,最后我們就得到一個 4 位的編碼。

而緯度的編碼思路跟經度也是一樣的,不再贅述。

合并經緯度編碼

假如計算的經緯度編碼分別是 11011 和00101`,目標編碼第 0 位則從經度第 0 位的值 1 作為目標值,目標編碼的第 1 位則從緯度第 0 位值 0 作為目標值,以此類推:

就這樣,經緯度(35.679,114.020)就可以使用 1010011011 表示,而這個值就可以作為 SortedSet 的權重值實現排序。

Redis GEO 實現

GEO 類型是將經緯度的經過 GeoHash 編碼的合并值作為 Sorted Set 元素的 score 權重,Redis 的 GEO 有哪些指令呢?

我們需要把登陸 app 的女生 ID 和對應的經緯度存到 Sorted Set 里面。

更多 GEO 類型指令可參考:https://redis.io/commands#geo

GEOADD

Redis 提供了 GEOADD key longitude latitude member 命令,將一組經緯度信息和對應的「女神 ID」記錄到 GEO 類型的集合中,如下:一次記錄多個用戶(蒼井空、波多野結衣)的經緯度信息。

  1. GEOADD girl:localtion 13.361389 38.115556 "蒼井空" 15.087269 37.502669 "波多野結衣" 

GEORADIUS

我登陸了 app,獲取自己的經緯度信息,如何查找以這個經緯度為中心的一定范圍內的其他用用戶呢?

Redis GEO類型提供了 GEORADIUS指令:會根據輸入的經緯度位置,查找以這個經緯度為中心的一定范圍內的其他元素。

假設自己的經緯度是(15.087269 37.502669),需要獲取附近 10 km 的「女神」并返回給 LBS 應用:

  1. GEORADIUS girl:locations 15.087269 37.502669 km ASC COUNT 10 

ASC可以實現讓「女神」信息按照這個距離自己的經緯度由近到遠排序。

COUNT選項表示指定返回的「女神」數量,防止附近太多「女神」,節省帶寬資源。

如果覺得自己需要更多女神,那么可以無限制,但是需要注意身體,多吃雞蛋補一補。

用戶下線后,如刪除下線的「女神」經緯度呢?

”這個問題問得好,GEO 類型是基于 Sorted Set 實現的,所以可以借用 ZREM 命令實現對地理位置信息的刪除。

比如刪除「蒼井空」的位置信息:

  1. ZREM girl:localtion "蒼井空" 

小結

GEO 本身并沒有設計新的底層數據結構,而是直接使用了 Sorted Set 集合類型。

GEO 類型使用 GeoHash 編碼方法實現了經緯度到 Sorted Set 中元素權重分數的轉換,這其中的兩個關鍵機制就是對二維地圖做區間劃分,以及對區間進行編碼。

一組經緯度落在某個區間后,就用區間的編碼值來表示,并把編碼值作為 Sorted Set 元素的權重分數。

在一個地圖應用中,車的數據、餐館的數據、人的數據可能會有百萬千萬條,如果使用 Redis 的 Geo 數據結構,它們將全部放在一個 zset 集合中。

在 Redis 的集群環境中,集合可能會從一個節點遷移到另一個節點,如果單個 key 的數據過大,會對集群的遷移工作造成較大的影響,在集群環境中單個 key 對應的數據量不宜超過 1M,否則會導致集群遷移出現卡頓現象,影響線上服務的正常運行。

所以,這里建議 Geo 的數據使用單獨的 Redis 集群實例部署。

如果數據量過億甚至更大,就需要對 Geo 數據進行拆分,按國家拆分、按省拆分,按市拆分,在人口特大城市甚至可以按區拆分。

本文轉載自微信公眾號「 碼哥字節」,可以通過以下二維碼關注。轉載本文請聯系 碼哥字節公眾號。

 

責任編輯:姜華 來源: 碼哥字節
相關推薦

2021-07-05 08:41:49

RedisGEO系統

2019-10-23 09:48:46

RedisMySQLMongoDB

2021-06-08 08:51:50

Redis 數據類型數據統計

2021-05-24 08:58:34

Redis Bitmap 數據統計

2019-05-21 14:33:01

2021-07-02 10:10:55

SecurityJWT系統

2009-06-15 16:05:30

設計AnnotatioJava

2017-11-08 13:31:34

分層架構代碼DDD

2015-07-15 13:18:27

附近的人開發

2021-04-29 09:40:32

測試IDEAirtest

2018-05-08 18:26:49

數據庫MySQL性能

2025-05-12 07:35:52

2021-09-08 09:48:39

數據庫工具技術

2016-12-09 13:45:21

RNN大數據深度學習

2010-11-09 10:03:26

2016-08-31 09:19:57

2023-02-23 10:03:57

2025-07-15 10:06:54

2021-03-30 05:58:01

JavascriptCss3轉盤小游戲

2021-09-09 08:55:50

Python項目驗證碼
點贊
收藏

51CTO技術棧公眾號

久久国产劲爆∧v内射| 色999五月色| 免费中文字幕在线观看| av日韩在线播放| 精品高清美女精品国产区| 欧美极品jizzhd欧美| 又骚又黄的视频| 91精品国偷自产在线电影| 精品福利在线导航| 国产日韩成人内射视频| 久做在线视频免费观看| 成人精品小蝌蚪| 国产精品美女久久久久av超清| 国产黄色小视频网站| 人人精品视频| 制服丝袜中文字幕一区| 男人日女人逼逼| 免费黄色网址在线观看| 北岛玲一区二区三区四区| 国产精品久久久久久久久影视| 久久99久久98精品免观看软件| 精品日本12videosex| 精品国产一区二区精华| 中文字幕永久视频| heyzo一区| 国产精品美女久久久久久| 国产精品国色综合久久| 区一区二在线观看| 黄色另类av| 中文字幕日韩精品在线观看| yjizz视频| gogo大尺度成人免费视频| 欧美日韩亚洲成人| 日韩国产小视频| 在线免费av网站| 久久久亚洲精品石原莉奈| 高清国产在线一区| 国产精品爽爽久久久久久| 亚洲精品色图| 久久国产精品首页| 亚洲欧洲综合网| 国产探花一区二区| 日韩国产在线播放| 性色av浪潮av| 国产精品日韩精品在线播放| 欧美视频三区在线播放| 女性女同性aⅴ免费观女性恋| 欧美另类tv| 一区二区三区精品视频| 国产成人精品免费看在线播放 | 欧美一区二区久久久| 日本www.色| av有声小说一区二区三区| 精品高清一区二区三区| 激情伊人五月天| 国内精彩免费自拍视频在线观看网址| 亚洲精品国产第一综合99久久| 亚洲美女自拍偷拍| 黄色av电影在线播放| 亚洲日本在线a| 日本xxxxx18| 超碰个人在线| 亚洲欧美福利一区二区| 400部精品国偷自产在线观看| 50度灰在线| 亚洲五月六月丁香激情| 蜜臀av无码一区二区三区| 国产蜜臀av在线播放| 亚洲成人免费在线观看| 久久精品国产sm调教网站演员| 蜜桃av在线| 日本精品视频一区二区| 亚洲精品高清无码视频| 国产精品原创视频| 4hu四虎永久在线影院成人| 中文字幕剧情在线观看| 伊人精品综合| 亚洲欧美国产一区二区三区| 久久午夜福利电影| 99精品美女| 久久久久久av| 最新中文字幕一区| 六月丁香婷婷色狠狠久久| 96pao国产成视频永久免费| 亚洲第一成年人网站| zzijzzij亚洲日本少妇熟睡| 欧美激情第六页| 日本视频不卡| 亚洲国产精品麻豆| 欧美三级午夜理伦三级| 四虎影视精品永久在线观看| 日韩欧美成人激情| 欧美熟妇精品黑人巨大一二三区| 欧美亚洲精品在线| 九九热r在线视频精品| 日韩免费不卡视频| 日韩激情视频在线观看| 5g国产欧美日韩视频| 久青青在线观看视频国产| 国产精品成人午夜| 欧美久久久久久久久久久久久| 你懂得影院夜精品a| 91精品国产综合久久久久久久| 日本人妻一区二区三区| 国产99久久| 九九热在线精品视频| 亚洲AV无码成人精品区东京热| 久久99国产精品久久99果冻传媒| 国产视频不卡| 黄色精品免费看| 一本色道a无线码一区v| 午夜诱惑痒痒网| 狠狠做六月爱婷婷综合aⅴ | 欧美另类一区| 日本孕妇大胆孕交无码| 欧美羞羞免费网站| 艳妇乳肉豪妇荡乳xxx| 国产精品毛片一区二区在线看| 97在线视频一区| 99这里有精品视频| 欧美国产禁国产网站cc| 少妇高潮毛片色欲ava片| www一区二区三区| 亚洲最新在线视频| 800av免费在线观看| 国产高清不卡一区二区| 亚洲高清资源综合久久精品| 少妇视频一区| 亚洲电影免费观看高清| 一区二区视频免费看| 蜜臀久久久99精品久久久久久| 久久久久久一区| 波多野结衣中文字幕久久| 在线不卡免费av| 婷婷综合在线视频| 视频一区免费在线观看| 麻豆传媒一区二区| 91吃瓜在线观看| 精品久久国产字幕高潮| 欧美国产精品一二三| 精久久久久久久久久久| 亚洲精品视频一二三| 中文字幕一区久| 国产视频久久网| 五月激情六月丁香| 99精品欧美一区二区三区小说| a天堂资源在线观看| 亚洲日本视频在线| 欧美大片免费看| www五月婷婷| 亚洲综合色噜噜狠狠| 三上悠亚 电影| 午夜日韩电影| 高清视频在线观看一区| 黄色成人在线网| 精品国精品国产| 日韩精品人妻中文字幕| eeuss鲁片一区二区三区在线观看| 成人小视频在线观看免费| av成人男女| 91国产一区在线| 毛片免费在线播放| 在线亚洲免费视频| 欧美性猛交xxxx乱大交少妇| 久久国产成人午夜av影院| 一本—道久久a久久精品蜜桃| 国产精久久一区二区| 精品综合久久久久久97| 少妇高潮一区二区三区99小说| 天天综合色天天综合色h| 人妻丰满熟妇av无码久久洗澡| 久久午夜精品| 亚洲最新在线| 中文字幕日韩在线| 97视频人免费观看| 国产三级在线免费观看| 欧美日韩国产精品成人| 欧美成人aaa片一区国产精品| 成人激情免费电影网址| 丝袜老师办公室里做好紧好爽| 国产精品三级| 亚洲尤物视频网| 欧美少妇网站| 深夜成人在线观看| 可以免费观看的毛片| 日韩欧美国产网站| 国产一区二区精彩视频| 成人黄色在线看| 日韩有码免费视频| 亚洲精品二区三区| 久久久婷婷一区二区三区不卡| 电影亚洲一区| 欧美激情视频免费观看| 暖暖视频在线免费观看| 欧美一区二区三区男人的天堂| 国产真人真事毛片| 中文字幕 久热精品 视频在线| 天天操夜夜操很很操| 香蕉久久夜色精品| 老汉色影院首页| 国产成人av| 国产99在线播放| 91精品美女| 欧美精品免费在线| 国产剧情在线观看| 亚洲国产福利在线| 亚洲一级特黄毛片| 精品国产乱码久久久久久婷婷 | 色婷婷热久久| 国产日韩精品推荐| 亚洲欧美在线综合| 国产91色在线| 96av在线| 欧美黑人一级爽快片淫片高清| 丁香婷婷在线观看| 亚洲国产欧美一区二区三区同亚洲 | 日韩美女视频中文字幕| 欧美人与性动交α欧美精品济南到| 中文字幕亚洲一区| 青青草视频在线免费观看| 日韩西西人体444www| 超碰在线97观看| 欧美日韩综合视频| 国产精品美女毛片真酒店| 国产精品电影院| 国产熟女一区二区| 成人v精品蜜桃久久一区| 黄色aaaaaa| 久久精品国产一区二区| 免费裸体美女网站| 国产精品视频| 免费观看国产精品视频| 国产精品www.| 色婷婷777777仙踪林| 日韩88av| 亚洲一区二区三区午夜| 欧美限制电影| 亚洲成人第一| 欧美伦理在线视频| 清纯唯美一区二区三区| 爽爽窝窝午夜精品一区二区| 国模精品一区二区三区| 超碰地址久久| 国产精品xxx在线观看www| 午夜日韩影院| 超碰97在线资源| 视频二区欧美毛片免费观看| 成人两性免费视频| 亚洲电影二区| 91性高湖久久久久久久久_久久99| 欧美天堂一区二区| 成人欧美一区二区三区黑人| 亚洲男男av| 亚洲一区二区三区sesese| 国产一区二区三区国产精品| 91热精品视频| 成人影院中文字幕| 国产伦精品一区二区三毛| 乱中年女人伦av一区二区| 精品免费视频123区| 视频福利一区| 无码免费一区二区三区免费播放| 成人同人动漫免费观看 | 成人日韩在线电影| 精品一区91| 国产日韩欧美精品| 九九视频免费观看视频精品| 日韩精品国内| 91精品国产91久久久久久密臀| 干日本少妇视频| 亚洲国产精品一区| 国产欧美在线一区| 美女网站色91| 久久av一区二区三| 99国产精品99久久久久久| 91中文字幕永久在线| 中文字幕国产精品一区二区| 男人在线观看视频| 亚洲高清免费在线| 中文字幕手机在线视频| 欧美日韩免费观看一区三区| 国产又大又粗又长| 亚洲国产日韩一区| 国产精品久久久久久久龚玥菲| 日韩视频一区在线| av中文字幕在线观看第一页| 国产激情久久久| 欧美视频三区| 欧美在线日韩精品| 欧美成人国产| 黄色一级免费大片| 国产成人福利片| 老司机福利av| 亚洲男人的天堂av| 无码人妻久久一区二区三区不卡| 欧美亚洲国产一区在线观看网站| 亚洲第一页综合| 中日韩美女免费视频网站在线观看 | 国产情侣第一页| 日韩国产精品大片| www.美色吧.com| 国产精品丝袜久久久久久app| 国产一级做a爰片在线看免费| 欧美在线观看视频一区二区三区| 亚洲第九十九页| 最近2019年手机中文字幕 | 97久久夜色精品国产| 777777av| 国产精品88888| 青青青视频在线播放| 午夜精品视频一区| 国产亲伦免费视频播放| 亚洲欧美一区二区激情| 日本性爱视频在线观看| 国产欧美一区二区三区久久人妖| 欧美高清视频看片在线观看| 99热都是精品| 免费成人在线网站| 久久久久久久久久久国产精品| 一区二区三区视频在线看| 18国产免费视频| 日韩精品视频免费在线观看| 少女频道在线观看免费播放电视剧| 国产精品99久久久久久久久 | 色婷婷综合久久久中字幕精品久久| 99爱精品视频| 国产精品videosex性欧美| 成人免费毛片播放| 26uuu亚洲| 国产成人愉拍精品久久| 日韩一区国产二区欧美三区| 日本视频不卡| 国产日韩精品在线观看| 精品久久一区| 成熟老妇女视频| 91在线云播放| 制服.丝袜.亚洲.中文.综合懂色| 精品国产91久久久久久久妲己| 最爽无遮挡行房视频在线| 成人免费视频网址| 99国产精品一区二区| 色国产在线视频| 国产精品免费aⅴ片在线观看| av首页在线观看| 一区二区三区亚洲| 日韩制服诱惑| 亚洲人成人77777线观看| 日产国产高清一区二区三区| 丰满少妇高潮一区二区| 日韩欧美在线视频免费观看| 欧美日韩国产中文字幕在线| 人人澡人人澡人人看欧美| 自拍自偷一区二区三区| 久久9精品区-无套内射无码| 久久女同精品一区二区| 亚洲天堂五月天| 伊人久久免费视频| 六九午夜精品视频| 国产系列第一页| 国产成人亚洲精品青草天美| 日本少妇毛茸茸高潮| 亚洲激情成人网| 日韩精品99| 亚洲国产精品123| 国产一区999| 国产一级片免费| 亚洲精品一区二区三区婷婷月| 美女福利一区二区| 亚洲一区二区三区精品视频| 久久99久久精品| 免费三片在线播放| 亚洲精品99久久久久中文字幕| 中文日产幕无线码一区二区| 神马一区二区影院| 国产高清在线观看免费不卡| 日本三级理论片| 一区二区在线视频播放| 在线观看欧美| 人妻无码久久一区二区三区免费| 久久日一线二线三线suv| 天堂网一区二区| 不卡中文字幕av| 首页亚洲中字| 超碰在线超碰在线| 欧美日韩国产影院| 婷婷成人激情| 国产欧美在线一区二区| 日韩av一级电影| 久久精品视频8| 色老头一区二区三区| 2020国产精品极品色在线观看| 免费日韩视频在线观看| 国产精品国产精品国产专区不蜜| 亚洲欧美另类综合| 国产精品久久二区| 激情偷拍久久| 激情高潮到大叫狂喷水| 亚洲激情视频在线播放| 日本黄色成人| av网址在线观看免费|