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

滴滴的分布式ID生成器(Tinyid),好用的一批

數據庫 其他數據庫 分布式
Tinyid是滴滴開發的一款分布式ID系統,Tinyid是在美團(Leaf)的leaf-segment算法基礎上升級而來,不僅支持了數據庫多主節點模式,還提供了tinyid-client客戶端的接入方式,使用起來更加方便。

 不了解分布式ID生成器的同學,先復習一下之前的 《9種分布式ID生成方式》

Tinyid是滴滴開發的一款分布式ID系統,Tinyid是在美團(Leaf)的leaf-segment算法基礎上升級而來,不僅支持了數據庫多主節點模式,還提供了tinyid-client客戶端的接入方式,使用起來更加方便。但和美團(Leaf)不同的是,Tinyid只支持號段一種模式不支持雪花模式。

Tinyid的特性

  •  全局唯一的long型ID
  •  趨勢遞增的id
  •  提供 http 和 java-client 方式接入
  •  支持批量獲取ID
  •  支持生成1,3,5,7,9...序列的ID
  •  支持多個db的配置

適用場景:只關心ID是數字,趨勢遞增的系統,可以容忍ID不連續,可以容忍ID的浪費

不適用場景:像類似于訂單ID的業務,因生成的ID大部分是連續的,容易被掃庫、或者推算出訂單量等信息

Tinyid原理

Tinyid是基于號段模式實現,再簡單啰嗦一下號段模式的原理:就是從數據庫批量的獲取自增ID,每次從數據庫取出一個號段范圍,例如 (1,1000] 代表1000個ID,業務服務將號段在本地生成1~1000的自增ID并加載到內存.。

Tinyid會將可用號段加載到內存中,并在內存中生成ID,可用號段在首次獲取ID時加載,如當前號段使用達到一定比例時,系統會異步的去加載下一個可用號段,以此保證內存中始終有可用號段,以便在發號服務宕機后一段時間內還有可用ID。

原理圖大致如下圖:

Tinyid原理圖

Tinyid實現

Tinyid的GitHub地址 :https://github.com/didi/tinyid.git

Tinyid提供了兩種調用方式,一種基于Tinyid-server提供的http方式,另一種Tinyid-client客戶端方式。不管使用哪種方式調用,搭建Tinyid都必須提前建表tiny_id_info、tiny_id_token。 

  1. CREATE TABLE `tiny_id_info` (  
  2.   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',  
  3.   `biz_type` varchar(63) NOT NULL DEFAULT '' COMMENT '業務類型,唯一',  
  4.   `begin_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '開始id,僅記錄初始值,無其他含義。初始化時begin_id和max_id應相同',  
  5.   `max_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '當前最大id',  
  6.   `step` int(11) DEFAULT '0' COMMENT '步長',  
  7.   `delta` int(11) NOT NULL DEFAULT '1' COMMENT '每次id增量',  
  8.   `remainder` int(11) NOT NULL DEFAULT '0' COMMENT '余數',  
  9.   `create_time` timestamp NOT NULL DEFAULT '2010-01-01 00:00:00' COMMENT '創建時間',  
  10.   `update_time` timestamp NOT NULL DEFAULT '2010-01-01 00:00:00' COMMENT '更新時間',  
  11.   `version` bigint(20) NOT NULL DEFAULT '0' COMMENT '版本號',  
  12.   PRIMARY KEY (`id`), 
  13.   UNIQUE KEY `uniq_biz_type` (`biz_type`)  
  14. ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT 'id信息表';  
  15. CREATE TABLE `tiny_id_token` (  
  16.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',  
  17.   `token` varchar(255) NOT NULL DEFAULT '' COMMENT 'token',  
  18.   `biz_type` varchar(63) NOT NULL DEFAULT '' COMMENT '此token可訪問的業務類型標識',  
  19.   `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '備注',  
  20.   `create_time` timestamp NOT NULL DEFAULT '2010-01-01 00:00:00' COMMENT '創建時間',  
  21.   `update_time` timestamp NOT NULL DEFAULT '2010-01-01 00:00:00' COMMENT '更新時間',  
  22.   PRIMARY KEY (`id`)  
  23. ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT 'token信息表';  
  24. INSERT INTO `tiny_id_info` (`id`, `biz_type`, `begin_id`, `max_id`, `step`, `delta`, `remainder`, `create_time`, `update_time`, `version`)  
  25. VALUES  
  26.  (1, 'test', 1, 1, 100000, 1, 0, '2018-07-21 23:52:58', '2018-07-22 23:19:27', 1);  
  27. INSERT INTO `tiny_id_info` (`id`, `biz_type`, `begin_id`, `max_id`, `step`, `delta`, `remainder`, `create_time`, `update_time`, `version`)  
  28. VALUES  
  29.  (2, 'test_odd', 1, 1, 100000, 2, 1, '2018-07-21 23:52:58', '2018-07-23 00:39:24', 3);  
  30. INSERT INTO `tiny_id_token` (`id`, `token`, `biz_type`, `remark`, `create_time`, `update_time`)  
  31. VALUES  
  32.  (1, '0f673adf80504e2eaa552f5d791b644c', 'test', '1', '2017-12-14 16:36:46', '2017-12-14 16:36:48');  
  33. INSERT INTO `tiny_id_token` (`id`, `token`, `biz_type`, `remark`, `create_time`, `update_time`)  
  34. VALUES  
  35.  (2, '0f673adf80504e2eaa552f5d791b644c', 'test_odd', '1', '2017-12-14 16:36:46', '2017-12-14 16:36:48'); 

tiny_id_info表是具體業務方號段信息數據表

max_id :號段的最大值

step:步長,即為號段的長度

biz_type:業務類型

號段獲取對max_id字段做一次update操作,update max_id= max_id + step,更新成功則說明新號段獲取成功,新的號段范圍是(max_id ,max_id +step]。

tiny_id_token是一個權限表,表示當前token可以操作哪些業務的號段信息。

修改tinyid-server中  \offline\application.properties 文件配置數據庫,由于tinyid支持數據庫多master模式,可以配置多個數據庫信息。啟動 TinyIdServerApplication 測試一下。 

  1. datasource.tinyid.primary.driver-class-name=com.mysql.jdbc.Driver  
  2. datasource.tinyid.primary.url=jdbc:mysql://127.0.0.1:3306/xin-master?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8  
  3. datasource.tinyid.primary.username=junkang  
  4. datasource.tinyid.primary.password=junkang  
  5. datasource.tinyid.primary.testOnBorrow=false  
  6. datasource.tinyid.primary.maxActive=10  
  7. datasource.tinyid.secondary.driver-class-name=com.mysql.jdbc.Driver  
  8. datasource.tinyid.secondary.url=jdbc:mysql://localhost:3306/db2?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8  
  9. datasource.tinyid.secondary.username=root  
  10. datasource.tinyid.secondary.password=123456  
  11. datasource.tinyid.secondary.testOnBorrow=false  
  12. datasource.tinyid.secondary.maxActive=10 

1、Http方式

tinyid內部一共提供了四個http接口來獲取ID和號段。 

  1. package com.xiaoju.uemc.tinyid.server.controller;  
  2. /**  
  3.  * @author du_imba  
  4.  */  
  5. @RestController  
  6. @RequestMapping("/id/")  
  7. public class IdContronller {   
  8.     private static final Logger logger = LoggerFactory.getLogger(IdContronller.class);  
  9.     @Autowired  
  10.     private IdGeneratorFactoryServer idGeneratorFactoryServer;  
  11.     @Autowired  
  12.     private SegmentIdService segmentIdService;  
  13.     @Autowired  
  14.     private TinyIdTokenService tinyIdTokenService;  
  15.     @Value("${batch.size.max}")  
  16.     private Integer batchSizeMax;  
  17.     @RequestMapping("nextId") 
  18.     public Response<List<Long>> nextId(String bizType, Integer batchSize, String token) {  
  19.         Response<List<Long>> response = new Response<>();  
  20.         try {  
  21.             IdGenerator idGenerator = idGeneratorFactoryServer.getIdGenerator(bizType);  
  22.             List<Long> ids = idGenerator.nextId(newBatchSize);  
  23.             response.setData(ids);  
  24.         } catch (Exception e) {  
  25.             response.setCode(ErrorCode.SYS_ERR.getCode());  
  26.             response.setMessage(e.getMessage());  
  27.             logger.error("nextId error", e);  
  28.         }  
  29.         return response; 
  30.     }  
  31.     @RequestMapping("nextIdSimple")  
  32.     public String nextIdSimple(String bizType, Integer batchSize, String token) {  
  33.         String response = "" 
  34.         try {  
  35.             IdGenerator idGenerator = idGeneratorFactoryServer.getIdGenerator(bizType);  
  36.             if (newBatchSize == 1) {  
  37.                 Long id = idGenerator.nextId();  
  38.                 response = id + "";  
  39.             } else {  
  40.                 List<Long> idList = idGenerator.nextId(newBatchSize);  
  41.                 StringBuilder sb = new StringBuilder();  
  42.                 for (Long id : idList) { 
  43.                     sb.append(id).append(",");  
  44.                 } 
  45.                  response = sb.deleteCharAt(sb.length() - 1).toString();  
  46.             }  
  47.         } catch (Exception e) {  
  48.             logger.error("nextIdSimple error", e); 
  49.         } 
  50.          return response;  
  51.     }  
  52.     @RequestMapping("nextSegmentId")  
  53.     public Response<SegmentId> nextSegmentId(String bizType, String token) {  
  54.         try {  
  55.             SegmentId segmentId = segmentIdService.getNextSegmentId(bizType);  
  56.             response.setData(segmentId);  
  57.         } catch (Exception e) {  
  58.             response.setCode(ErrorCode.SYS_ERR.getCode());  
  59.             response.setMessage(e.getMessage());  
  60.             logger.error("nextSegmentId error", e);  
  61.         }  
  62.         return response;  
  63.     }  
  64.     @RequestMapping("nextSegmentIdSimple")  
  65.     public String nextSegmentIdSimple(String bizType, String token) {  
  66.         String response = "" 
  67.         try {  
  68.             SegmentId segmentId = segmentIdService.getNextSegmentId(bizType); 
  69.              response = segmentId.getCurrentId() + "," + segmentId.getLoadingId() + "," + segmentId.getMaxId()  
  70.                     + "," + segmentId.getDelta() + "," + segmentId.getRemainder();  
  71.         } catch (Exception e) {  
  72.             logger.error("nextSegmentIdSimple error", e);  
  73.         }  
  74.         return response;  
  75.     }  

nextId、nextIdSimple都是獲取下一個ID,nextSegmentIdSimple、getNextSegmentId是獲取下一個可用號段。區別在于接口是否有返回狀態。 

  1. nextId:  
  2. 'http://localhost:9999/tinyid/id/nextId?bizType=test&token=0f673adf80504e2eaa552f5d791b644c 
  3. response :  
  4.  
  5.     "data": [2],  
  6.     "code": 200,  
  7.     "message": ""  
  8.  
  9. nextId Simple:  
  10. 'http://localhost:9999/tinyid/id/nextIdSimple?bizType=test&token=0f673adf80504e2eaa552f5d791b644c 
  11. response: 3 

2、Tinyid-client客戶端

如果不想通過http方式,Tinyid-client客戶端也是一種不錯的選擇。

引用 tinyid-server包 

  1. <dependency>  
  2.     <groupId>com.xiaoju.uemc.tinyid</groupId>  
  3.     <artifactId>tinyid-client</artifactId>  
  4.     <version>${tinyid.version}</version>  
  5. </dependency> 

啟動 tinyid-server項目打包后得到 tinyid-server-0.1.0-SNAPSHOT.jar ,設置版本 ${tinyid.version}為0.1.0-SNAPSHOT。

在我們的項目 application.properties 中配置 tinyid-server服務的請求地址 和 用戶身份token 

  1. tinyid.server=127.0.0.1:9999  
  2. tinyid.token=0f673adf80504e2eaa552f5d791b644c``` 

在Java代碼調用TinyId也很簡單,只需要一行代碼。 

  1. // 根據業務類型 獲取單個ID  
  2. Long id = TinyId.nextId("test");  
  3. // 根據業務類型 批量獲取10個ID  
  4. List<Long> ids = TinyId.nextId("test", 10);     

Tinyid整個項目的源碼實現也是比較簡單,像與數據庫交互更直接用jdbcTemplate實現 

  1. @Override  
  2. public TinyIdInfo queryByBizType(String bizType) {  
  3.     String sql = "select id, biz_type, begin_id, max_id," +  
  4.             " step, delta, remainder, create_time, update_time, version" +  
  5.             " from tiny_id_info where biz_type = ?";  
  6.     List<TinyIdInfo> list = jdbcTemplate.query(sql, new Object[]{bizType}, new TinyIdInfoRowMapper());  
  7.     if(list == null || list.isEmpty()) {  
  8.         return null;  
  9.     }  
  10.     return list.get(0);  

總結

兩種方式推薦使用Tinyid-client,這種方式ID為本地生成,號段長度(step)越長,支持的qps就越大,如果將號段設置足夠大,則qps可達1000w+。而且tinyid-client 對 tinyid-server 訪問變的低頻,減輕了server端的壓力。 

 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2017-07-01 16:02:39

分布式ID生成器

2019-12-27 10:00:34

開源技術 軟件

2024-10-07 08:52:59

分布式系統分布式 IDID

2021-07-14 07:17:37

Springboot分布式UIDGenerato

2025-03-11 08:50:00

CASID分布式

2024-12-04 09:36:37

2022-02-23 07:09:30

分布式ID雪花算法

2019-09-05 13:06:08

雪花算法分布式ID

2021-11-08 19:25:37

Go生成系統

2023-12-12 07:13:39

雪花算法分布式ID

2016-11-29 09:12:21

數據庫分布式ID

2023-09-03 22:14:23

分布式ID

2022-05-19 14:57:30

CSS代碼工具

2025-03-28 10:27:29

2022-06-16 07:31:15

MySQL服務器服務

2017-06-19 17:55:22

CASID分布式

2017-04-12 09:29:02

HiveMapReduceSpark

2021-06-28 14:45:07

分布式框架操作

2020-07-21 11:35:21

開發技能代碼

2022-02-15 10:30:58

UUID
點贊
收藏

51CTO技術棧公眾號

欧美一级在线| 成人国产免费电影| 强制捆绑调教一区二区| 久久精品国产欧美亚洲人人爽| 欧美国产日韩在线视频| 91jq激情在线观看| 国产精品婷婷午夜在线观看| 国产高清一区视频| 久久久久久av无码免费看大片| 一区二区中文字| 亚洲男人天堂网| 日韩高清在线一区二区| 瑟瑟视频在线看| 成人欧美一区二区三区视频网页 | 最新国产精品精品视频| 91黄色免费观看| 欧美日韩午夜爽爽| 第一视频专区在线| av亚洲精华国产精华精华| 国产精品久久久久久久久免费看 | av网站在线免费观看| 国产成人h网站| 国产精品欧美日韩一区二区| 亚洲国产精品午夜在线观看| 91精品啪在线观看国产81旧版| 亚洲人成人99网站| 久久人妻少妇嫩草av无码专区| 国产精品久久久久久久久久久久久久久 | 欧美日韩黄色网| 国产成人精品一区二区免费看京| 日韩欧美123| 五月激情五月婷婷| 欧美暴力调教| 一本色道亚洲精品aⅴ| 日韩在线观看a| caopon在线免费视频| 中文字幕欧美区| 日本一区免费在线观看| 少妇精品高潮欲妇又嫩中文字幕 | 精品毛片三在线观看| 乱熟女高潮一区二区在线| 欧美性天天影视| 中文字幕第一区第二区| 免费成人在线观看av| 好吊色一区二区| 精品一区二区三区免费播放| 国产精品国产三级国产专播精品人 | 日韩免费网站| 国产精品久久网站| 亚洲精品国产精品久久| 3d成人动漫在线| 国产精品丝袜91| 亚洲一区美女| 免费网站看v片在线a| 国产精品国产三级国产普通话蜜臀 | 午夜久久美女| 欧美极品美女电影一区| 国产精品 欧美 日韩| 亚洲国产专区| 欧美又大粗又爽又黄大片视频| 麻豆久久久久久久久久| 性色av一区二区怡红| 欧洲美女7788成人免费视频| 色屁屁影院www国产高清麻豆| 蜜桃av综合| 国产91在线高潮白浆在线观看| 中文字字幕在线中文| 久久久国产亚洲精品| 国产91色在线免费| 亚洲无码精品在线观看| 狠狠色丁香久久婷婷综| 91国产丝袜在线放| 日本韩国免费观看| 久久精品一区二区三区av| 日韩一区二区电影在线观看| 免费黄网站在线| 亚洲黄色尤物视频| 欧美日韩黄色一级片| 香蕉久久免费电影| 欧美老肥妇做.爰bbww| 26uuu国产| 香蕉视频一区二区三区| 日韩中文字幕在线| 国产在线视频你懂的| 欧美一级网站| 成人精品久久久| 国产综合在线播放| 国产亚洲午夜高清国产拍精品 | 91精品国产全国免费观看| 国产ts在线观看| 国产成人影院| 欧美成人精品激情在线观看| 好吊妞视频一区二区三区| 老鸭窝91久久精品色噜噜导演| 国产欧美va欧美va香蕉在| 国精产品乱码一区一区三区四区| 久久久蜜臀国产一区二区| av不卡在线免费观看| 涩涩视频网站在线观看| 91精品国产欧美一区二区成人| 黑人巨大精品欧美| 亚洲深深色噜噜狠狠爱网站| 欧美一级视频在线观看| 国产激情视频在线播放| 亚洲国产精品黑人久久久| 黄色三级中文字幕| 日本久久二区| 亚洲人成在线观| 国产在线综合网| 国产制服丝袜一区| 日本三级中国三级99人妇网站| 欧美xxx黑人xxx水蜜桃| 欧美日韩国产另类一区| 一本加勒比北条麻妃| 午夜欧美精品| 91色视频在线观看| yjizz视频网站在线播放| 午夜视频久久久久久| 中文 日韩 欧美| 成人高清电影网站| 日本欧美中文字幕| 天堂影院在线| 亚洲人成网站在线| 超碰超碰在线观看| 欧美精选一区二区三区| 欧美日韩福利视频| 国产精品永久久久久久久久久| 国产欧美1区2区3区| 成人综合视频在线| 欧美交a欧美精品喷水| 欧美激情精品在线| 国产欧美综合视频| 综合色中文字幕| 欧美美女一级片| 成人91在线| 国产精品日韩电影| 国产视频第一区| 一本到高清视频免费精品| 黄色av网址在线观看| 亚洲性人人天天夜夜摸| 国产伦精品一区二区三区四区视频 | 九九99久久精品在免费线bt| 日韩视频中文字幕| 在线播放国产一区| 国产精品国产三级国产aⅴ原创| 国产一区视频免费观看| 色综合综合网| 国产精品亚洲视频在线观看| 最新电影电视剧在线观看免费观看| 色噜噜夜夜夜综合网| 蜜桃传媒一区二区亚洲av| 免费日韩精品中文字幕视频在线| 国产综合欧美在线看| 国产精品一二三产区| 日韩精品在线观| 久久久久99精品成人片我成大片| 91丝袜高跟美女视频| 国产精品后入内射日本在线观看| 天堂成人娱乐在线视频免费播放网站| 97人人做人人爱| 你懂的在线观看| 欧美在线一区二区三区| 免费在线观看黄色小视频| 国产精品一区二区果冻传媒| 成人免费a级片| 美女福利一区| 国产成人免费av| 日本视频在线免费观看| 日韩一区二区电影网| 日本三级片在线观看| xf在线a精品一区二区视频网站| 久久久久狠狠高潮亚洲精品| 清纯唯美日韩| 99r国产精品视频| 丝袜老师在线| 日韩中文字幕精品| 懂色av成人一区二区三区| 欧美午夜激情在线| 亚洲色偷偷综合亚洲av伊人| 国产成人超碰人人澡人人澡| 噜噜噜久久亚洲精品国产品麻豆| 欧美自拍偷拍| 国产福利不卡| 欧美三级精品| 欧美大片网站在线观看| 免费在线国产| 日韩欧美一区电影| 亚洲图片在线视频| 亚洲免费在线看| 一级片手机在线观看| 国产精品一品视频| 欧美激情精品久久久久久小说| 欧美在线资源| 日韩一本精品| 好吊妞视频这里有精品| 国产精品免费在线免费| 丰满的护士2在线观看高清| 一区二区在线视频| 日本xxxxwww| 在线播放视频一区| 狠狠人妻久久久久久| 亚洲精品国产无天堂网2021 | 亚洲天堂国产视频| 亚洲日韩成人| www.69av| 成人羞羞视频播放网站| 精品亚洲第一| 亚洲2区在线| 成人h视频在线观看播放| 亚洲天堂导航| 欧美日韩国产成人在线观看| 99精品老司机免费视频| 日韩精品在线观看网站| 精品国产亚洲av麻豆| 欧美色视频一区| 探花视频在线观看| 亚洲香肠在线观看| 一区二区三区影视| 欧美国产亚洲另类动漫| 亚洲AV无码国产精品| 成人午夜电影网站| 一级片黄色免费| 麻豆国产精品视频| 色婷婷综合久久久久中文字幕 | 国内精品久久久久久| 看黄网站在线| 在线观看视频亚洲| 国产在线三区| 亚洲美女中文字幕| 丝袜视频国产在线播放| 亚洲国产精久久久久久| 俄罗斯嫩小性bbwbbw| 日韩精品一区二区三区在线| 97人妻精品一区二区三区视频| 欧美这里有精品| 这里只有精品国产| 91精品办公室少妇高潮对白| 亚洲欧美综合另类| 欧美三级免费观看| 美女又爽又黄免费视频| 欧美性色19p| 毛片基地在线观看| 狠狠躁夜夜躁人人躁婷婷91| 日本亚洲欧美在线| 偷拍亚洲欧洲综合| 日韩和一区二区| 精品福利免费观看| 天堂中文在线网| 色综合久久综合网97色综合| 亚洲精品中文字幕乱码三区91| 欧美视频国产精品| 91九色丨porny丨肉丝| 欧美日韩免费网站| 看黄色一级大片| 欧美日韩一区不卡| 国产免费高清av| 欧美变态tickle挠乳网站| 国产香蕉在线观看| 亚洲精品综合久久中文字幕| 欧美伦理影视网| 正在播放国产一区| 麻豆网在线观看| 久久99精品国产99久久6尤物| 国产成人高清精品| 欧美激情图片区| 在线观看特色大片免费视频| 国产suv精品一区二区| 欧美成人黄色| 91成人在线看| 日韩精品社区| 亚洲最大免费| 欧美激情五月| 国产日产欧美视频| 亚洲黄色视屏| 亚洲天堂av线| 懂色av中文一区二区三区| 18禁裸乳无遮挡啪啪无码免费| 国产精品乱码妇女bbbb| 久久高清免费视频| 欧美三区在线观看| 欧美视频一二区| 在线观看成人黄色| 亚洲欧美成人影院| 日韩免费高清在线观看| 国产日本亚洲| 欧美在线日韩精品| 欧美福利影院| 国产三级日本三级在线播放| 国产乱子轮精品视频| www.免费av| 亚洲男人的天堂av| 中文字幕日本视频| 亚洲第一福利在线观看| jizzjizz在线观看| 欧美激情亚洲视频| 久久亚洲精品人成综合网| 国产精品视频免费一区| 韩日一区二区三区| 草草视频在线免费观看| 蜜臀久久99精品久久久画质超高清 | 欧美成年网站| 日韩hmxxxx| 99精品国产福利在线观看免费| 日本人69视频| 久久亚洲一区二区三区四区| 全程偷拍露脸中年夫妇| 欧美亚洲尤物久久| 色网站免费观看| 九九精品视频在线| 国内欧美日韩| 欧美资源一区| 国产欧美丝祙| 久久久久国产免费| 成人免费小视频| 无码人妻精品一区二区蜜桃色欲| 精品区一区二区| 免费观看成人高潮| 国产精品一区二区三| 亚洲精品中文字幕99999| 日韩a级在线观看| 国产一区二区导航在线播放| 日韩影视一区二区三区| 欧美性黄网官网| 婷婷丁香花五月天| 久久久久久尹人网香蕉| 精品国产三级| 一区二区三区电影| 六月婷婷色综合| 国产成人免费观看网站| 黑人与娇小精品av专区| 天堂在线视频观看| 国模极品一区二区三区| 亚洲一区电影| 丝袜人妻一区二区三区| 成人久久久精品乱码一区二区三区| 久久国产精品国语对白| 在线播放91灌醉迷j高跟美女 | 国产在线视频网| 国产成人激情小视频| 久久99国产精品视频| 国产三区在线视频| 久久久久国色av免费看影院| 欧美日韩一级黄色片| 日韩精品极品在线观看播放免费视频| а√天堂8资源中文在线| 国产伦精品一区二区三区视频免费 | 欧美大片在线看免费观看| 亚洲午夜免费| 日本在线xxx| 久久综合久久综合久久| 秋霞精品一区二区三区| 亚洲欧美制服综合另类| 黄色精品视频| 一区二区三区观看| 国产盗摄女厕一区二区三区| 久久综合久久鬼| 日韩精品高清在线观看| 深夜成人影院| 亚洲午夜精品一区二区| 国产伦精品一区二区三区在线观看| 欧美精品一区二区蜜桃| 亚洲精品在线三区| 欧美性猛交xxx高清大费中文| 手机看片福利永久国产日韩| 狠狠久久亚洲欧美| 国产亚洲欧美精品久久久久久 | 91久久极品少妇xxxxⅹ软件| 黄色日韩精品| 亚洲做受高潮无遮挡| 欧美视频中文一区二区三区在线观看 | av综合在线播放| 精人妻无码一区二区三区| 日日狠狠久久偷偷四色综合免费| 精品国产麻豆| av天堂永久资源网| 国产精品久久久久久福利一牛影视| 精品国产乱码久久久久久蜜臀网站| 国产最新精品视频| 亚洲成人一品| 国产女同无遮挡互慰高潮91| 亚洲国产精品欧美一二99| 韩国中文字幕2020精品| 成人激情免费在线| 日韩视频在线一区二区三区| 纪美影视在线观看电视版使用方法| 日韩欧美亚洲另类制服综合在线 | 欧美欧美全黄| 亚洲av综合一区二区| 91精品国产福利| 欧美momandson| 日韩精品第1页| 久久色.com| 亚洲老妇色熟女老太| 国产精品久久久久久久7电影| 精品电影一区| 国产成人在线网址| 日韩精品免费在线视频| 欧洲大片精品免费永久看nba| 国产日韩成人内射视频| 亚洲已满18点击进入久久|