精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久日韩精品一区二区五区| 成人同人动漫免费观看| 亚洲国产日日夜夜| 玛丽玛丽电影原版免费观看1977| 国语对白做受69按摩| 久久精品亚洲人成影院| 亚洲第一色中文字幕| 五月婷婷之综合激情| 日韩123区| 久久精品视频免费观看| 亚洲aⅴ日韩av电影在线观看| 懂色av.com| 久久精品亚洲欧美日韩精品中文字幕| 亚洲福利小视频| 天天操天天干天天做| 国产高清在线a视频大全| 国产免费成人在线视频| 国产精品初高中精品久久| 五月婷婷六月婷婷| 激情国产一区| 久久国产精品99国产精| 亚洲成人黄色av| 国产精品午夜av| 欧美麻豆精品久久久久久| 91视频最新入口| 麻豆福利在线观看| 国产精品久久看| 久久久综合香蕉尹人综合网| www.色播.com| 久久成人av少妇免费| 天天影视涩香欲综合网 | 国产综合av在线| 国产二区三区在线| 中文天堂在线一区| 欧美日本韩国在线| 色呦呦视频在线| 国产福利精品一区| 亚洲va欧美va国产综合剧情| 中文字幕第三页| 久久久国产精品一区二区中文| 欧美国产乱视频| 紧身裙女教师波多野结衣| 日本欧美视频| 在线视频日本亚洲性| aaaaa级少妇高潮大片免费看| 97se亚洲| 亚洲福利在线播放| 捆绑裸体绳奴bdsm亚洲| 国产精品白丝一区二区三区 | 日本天堂在线| av电影在线观看一区| 国产精品久久一区二区三区| 国产草草影院ccyycom| 精品在线观看免费| 成人免费视频网| 91超薄丝袜肉丝一区二区| 蜜桃视频一区二区三区| 国产精品香蕉av| 亚洲一区二区激情| 久久精品国产精品亚洲红杏| 国产欧美精品一区二区三区-老狼| 波多野结衣影片| 免费观看在线综合色| 国产精品一区二区三区成人| 91福利免费视频| 国产精品一区专区| 懂色av一区二区三区在线播放| 午夜精品久久久久久久爽 | 国产精品一二| 日本人成精品视频在线| 日本欧美www| 另类综合日韩欧美亚洲| 91久久精品国产| 亚洲国产精品18久久久久久| 雨宫琴音一区二区在线| 欧美激情视频在线免费观看 欧美视频免费一 | 久久久久久中文| 日本在线观看中文字幕| 在线综合亚洲| 国产精品永久免费视频| 午夜精品久久久久久久96蜜桃| 不卡的av网站| 日韩一区不卡| 99在线播放| 精品国产乱码久久久久酒店| 国产精品久久久久9999小说| 精品国产一级| 日韩av在线免费播放| 婷婷色一区二区三区| 欧美电影免费播放| 欧美精品久久一区二区 | 免费一级欧美片在线播放| 国产精品福利网站| 性生活三级视频| 久久这里只有精品首页| 这里只有精品66| 国产精品论坛| 欧美精选午夜久久久乱码6080| 欧美丰满熟妇bbb久久久| 免费电影一区二区三区| 欧美精品制服第一页| 国产精品第5页| 国产在线精品不卡| 麻豆av一区二区三区| 精品欧美色视频网站在线观看| 精品福利樱桃av导航| 蜜臀av免费观看| 精品视频一区二区三区| 亚洲欧美激情视频| 欧美成人免费观看视频| 天堂成人免费av电影一区| 成人欧美一区二区三区在线观看 | 国产精品一区二区黑人巨大| 99r国产精品| 一区精品在线| a欧美人片人妖| 日韩一级免费观看| 国产99在线 | 亚洲| 99精品欧美| 99久久免费国| 美女免费久久| 欧美在线一二三| 插我舔内射18免费视频| 欧美在线1区| 91精品久久久久久久久| 成人精品一区二区| 色久优优欧美色久优优| 插我舔内射18免费视频| 激情综合视频| 99中文字幕| 黄色网在线看| 欧美日韩精品一二三区| 国产毛片久久久久久久| 9色精品在线| 国产精品一区二区欧美| 影院在线观看全集免费观看| 欧美美女喷水视频| 国产三级精品三级观看| 精品视频免费| 青草青草久热精品视频在线网站 | 色哟哟入口国产精品| 久久久国产免费| 久久久久久久综合| 免费在线激情视频| 亚洲三级性片| 国产97色在线|日韩| 久色视频在线| 日韩欧美中文免费| 成年人免费观看视频网站| 午夜亚洲影视| 欧美亚洲另类在线一区二区三区 | 欧美日韩国产一区二区| 少妇一级淫免费观看 | 天天爱天天操天天干| 国产调教一区二区三区| 国产精品第七影院| xxxxx日韩| 欧美久久久久久久久| 国产黄色的视频| 国产91丝袜在线播放0| 国产精品69久久久| 欧美国产极品| 日本午夜精品理论片a级appf发布| 牛牛热在线视频| 在线观看亚洲精品视频| 手机av在线不卡| 激情成人综合网| 天天想你在线观看完整版电影免费| 亚洲码欧美码一区二区三区| 性日韩欧美在线视频| 日本一级在线观看| 欧美精品在线一区二区三区| 欧美成人三级视频| 91视频免费播放| 男操女免费网站| 亚洲老妇激情| 国产精品对白一区二区三区| h片在线观看视频免费免费| 日韩精品视频免费| 在线免费看av片| 亚洲综合一区二区| 四虎永久免费在线观看| 久久国产三级精品| 丰满少妇大力进入| 国产精品片aa在线观看| 91精品免费视频| av在线私库| 中文字幕亚洲一区| 蜜桃久久一区二区三区| 91国偷自产一区二区使用方法| 国产喷水在线观看| av不卡一区二区三区| 在线观看免费不卡av| 亚洲精选国产| 不卡中文字幕在线| 亚洲国产精品嫩草影院久久av| 国产精品久久久久久影视| 中文字幕在线播放网址| 亚洲女在线观看| 国产v在线观看| 欧美最猛性xxxxx直播| 国产亚洲成人精品| 日本一区二区三区在线不卡| 在线观看免费视频国产| 奇米亚洲午夜久久精品| 国产手机免费视频| 91亚洲成人| 欧美精品一区二区三区在线看午夜 | 欧美丝袜一区二区| 日本a级片视频| 国产欧美一区视频| 日本性生活一级片| 狠狠色狠狠色综合| 亚洲国产精品三区| 国产一区二区三区的电影| 日本一二三区视频在线| 成人无号精品一区二区三区| 久久伊人一区| 成人性生交大片免费看中文视频| 成人在线播放av| 成人视屏在线观看| 欧美一级大片在线观看| 国产高清在线a视频大全| 久久久999精品免费| 成年人免费在线视频| 精品亚洲va在线va天堂资源站| 国产青青草视频| 欧美日韩国产一二三| 男人的天堂av网站| 欧美日韩在线视频首页| 国产亚洲精品久久777777| 综合欧美一区二区三区| 欧美老女人性生活视频| 久久久不卡网国产精品一区| 国产精品九九视频| 成人丝袜18视频在线观看| 日本黄色大片在线观看| 国产一区二区三区免费播放| 永久免费的av网站| 麻豆精品一区二区综合av| 欧洲熟妇精品视频| 日韩 欧美一区二区三区| 国产在线青青草| 亚洲欧美日韩一区在线观看| 日韩欧美在线播放视频| 午夜一区不卡| 国产视频一区二区视频| 日韩主播视频在线| 精品日韩久久久| 日本亚洲欧美天堂免费| 人人爽人人av| 久久精品国产77777蜜臀| 羞羞的视频在线| 国产在线精品一区二区夜色 | 日本免费一区二区三区视频| 亚洲一区二区三区乱码aⅴ| 久久久91麻豆精品国产一区| 亚洲free嫩bbb| 影音先锋欧美激情| 国内精品视频免费| 在线看成人短视频| 视频一区二区在线观看| 99精品全国免费观看视频软件| dy888午夜| 国产精品红桃| 凹凸国产熟女精品视频| 日本中文一区二区三区| 国产乱码一区二区三区四区| 国产成人在线影院| 欧美在线一级片| www香蕉视频| 不卡的电视剧免费网站有什么| 最新版天堂资源在线| 91免费观看视频| 1024在线看片| 一区二区三区不卡视频在线观看| 日韩av女优在线观看| 一本久久精品一区二区| 一级黄色大片免费观看| 日韩精品一区二区三区视频播放 | 18视频在线观看娇喘| 伊人天天综合| 在线免费av播放| 成人美女视频在线看| 一道本在线观看| 亚洲精品视频免费看| 草久久免费视频| 欧美日韩美少妇| 日韩一级免费视频| www.国产一区| 免费高潮视频95在线观看网站| 国产精品久久久久久久久免费 | 亚洲成人av片在线观看| 精品视频三区| 久久99精品久久久久久噜噜| 怡红院成人在线| 风间由美久久久| 久久中文字幕二区| 日本中文字幕网址| 狠狠色2019综合网| 蜜桃精品一区二区| 洋洋av久久久久久久一区| 国产亚洲欧美日韩高清| 精品久久国产字幕高潮| 香蕉视频在线看| 欧美在线影院在线视频| 中文一区二区三区四区| 亚洲一区二区三区午夜| 国产精品主播| 无码人妻丰满熟妇啪啪网站| 国产精品国产三级国产aⅴ中文 | 日本中文字幕一区二区视频| 亚洲熟女一区二区| 亚洲乱码国产乱码精品精可以看 | 成人av在线资源网站| 四虎国产成人精品免费一女五男| 五月天视频一区| 99精品免费观看| 色偷偷亚洲男人天堂| 亚洲精品中文字幕| 国产精品午夜av在线| 亚洲电影影音先锋| 国产超碰在线播放| 久久伊人中文字幕| 国产成人在线播放视频| 日韩欧美一区中文| 免费观看在线黄色网| 国产精品av在线播放| 亚洲精品aaaaa| 精品久久久久久久久久中文字幕| 懂色av一区二区在线播放| 日韩欧美国产成人精品免费| 欧美日韩一区二区在线观看视频| 日本v片在线免费观看| 8x海外华人永久免费日韩内陆视频| 久久亚洲精精品中文字幕| 在线观看精品视频| 美国av一区二区| 强制高潮抽搐sm调教高h| 欧美日韩在线播| 最新97超碰在线| 国产精品一区电影| 久久一区二区三区喷水| 亚洲18在线看污www麻豆| 国产精品国产自产拍高清av王其| 国产成人精品一区二区色戒| 在线观看欧美成人| 国产精品传媒麻豆hd| 图片区小说区区亚洲五月| 日本不卡一区二区三区 | 深夜福利免费在线观看| 欧美综合一区第一页| 精品在线观看入口| 日韩av一二三四| 欧美国产禁国产网站cc| 中文字幕制服诱惑| 日韩中文字幕免费看| 国产精品一区免费在线| 日本a级片在线播放| 成人中文字幕电影| 免费看日韩毛片| 亚洲色图综合久久| 激情久久一区二区| 日韩成人午夜影院| 成人国产精品免费| 免费黄色网址在线| 中文字幕在线精品| 一区视频网站| 99久久久无码国产精品6| 国产色91在线| 国产精品久久久久久久久久久久久久久久 | 日本理论中文字幕| 欧美精品亚洲一区二区在线播放| www.久久ai| 精品国产一区二区三区免费| 天堂在线一区二区| √天堂中文官网8在线| 亚洲精品wwww| 久久福利在线| 男人天堂av片| 中文av一区特黄| 亚洲欧美激情国产综合久久久| 国产91|九色| 天天久久综合| 中文字幕狠狠干| 欧美裸体一区二区三区| 国产精品蜜芽在线观看| 亚洲欧美影院| aaa亚洲精品| 亚洲性在线观看| 91av中文字幕| 91精品一区二区三区综合在线爱| 超碰97在线资源站| 777精品伊人久久久久大香线蕉| 9999热视频在线观看| 亚洲草草视频| 波多野结衣在线一区| 夜夜骚av一区二区三区| 97成人超碰免| 欧美a级在线|