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

分布式ID解決方案詳解

網絡 網絡管理
使用了ZooKeeper的臨時節點來協調各個工作節點,如果一個工作節點掛掉了,它的臨時節點也會被刪除,這樣可以保證每個工作節點獲得的ID是唯一的。

在分布式系統中,生成全局唯一ID是非常重要的,因為在分布式系統中,多個節點同時生成ID可能會導致ID沖突。下面介紹幾種常用的分布式ID解決方案。

UUID

UUID(通用唯一標識符)是由128位數字組成的標識符,它可以保證在全球范圍內的唯一性,因為其生成算法基于時間戳、節點ID等因素。UUID可以使用Java自帶的UUID類來生成,如下所示:

javaCopy code
import java.util.UUID;


public class UuidGenerator {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString());
}
}

UUID的優點是簡單易用,無需額外的配置和管理,可以直接使用Java自帶的UUID類生成。但是UUID長度較長(128位),不太適合作為數據庫表的主鍵,且不易于排序和索引。

Snowflake

Snowflake是Twitter開源的一種分布式ID生成算法,它可以生成64位的唯一ID,其中包含了時間戳、數據中心ID和機器ID等信息。Snowflake算法的Java代碼如下所示:

Snowflake算法的Java代碼:

javaCopy code
public class SnowflakeGenerator {
private final static long START_STMP = 1480166465631L;
private final static long SEQUENCE_BIT = 12;
private final static long MACHINE_BIT = 5;
private final static long DATACENTER_BIT = 5;
private final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);
private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
private final static long MACHINE_LEFT = SEQUENCE_BIT;
private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
private long datacenterId;
private long machineId;
private long sequence = 0L;
private long lastStmp = -1L;
public SnowflakeGenerator(long datacenterId, long machineId) {
if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {
throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");
}
if (machineId > MAX_MACHINE_NUM || machineId < 0) {
throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");
}
this.datacenterId = datacenterId;
this.machineId = machineId;
}
public synchronized long nextId() {
long currStmp = getNewstmp();
if (currStmp < lastStmp) {
throw new RuntimeException("Clock moved backwards. Refusing to generate id");
}
if (currStmp == lastStmp) {
sequence = (sequence + 1) & MAX_SEQUENCE;
if (sequence == 0L) {
currStmp = getNextMill();
}
} else {
sequence = 0L;
}
lastStmp = currStmp;
return (currStmp - START_STMP) << TIMESTMP_LEFT
| datacenterId << DATACENTER_LEFT
| machineId << MACHINE_LEFT
| sequence;
}
private long getNextMill() {
long mill = getNewstmp();
while (mill <= lastStmp) {
mill = getNewstmp();
}
return mill;
}
private long getNewstmp() {
return System.currentTimeMillis();
}
}

Snowflake算法的優點是生成ID的性能高,且ID長度較短(64位),可以作為數據庫表的主鍵,且便于排序和索引。但是需要注意,如果集群中的節點數超過了機器ID所占的位數,或者集群規模很大,時間戳位數不夠用,那么就需要考慮其他的分布式ID生成算法。

Leaf

Leaf是美團點評開源的一種分布式ID生成算法,它可以生成全局唯一的64位ID。Leaf算法的Java代碼如下所示:

Leaf算法的Java代碼:

javaCopy code
public class LeafGenerator {
private static final Logger logger = LoggerFactory.getLogger(LeafGenerator.class);
private static final String WORKER_ID_KEY = "leaf.worker.id";
private static final String PORT_KEY = "leaf.port";
private static final int DEFAULT_PORT = 8080;
private static final int DEFAULT_WORKER_ID = 0;
private static final int WORKER_ID_BITS = 10;
private static final int SEQUENCE_BITS = 12;
private static final int MAX_WORKER_ID = (1 << WORKER_ID_BITS) - 1;
private static final int MAX_SEQUENCE = (1 << SEQUENCE_BITS) - 1;
private static final long EPOCH = 1514736000000L;
private final SnowflakeIdWorker idWorker;
public LeafGenerator() {
int workerId = SystemPropertyUtil.getInt(WORKER_ID_KEY, DEFAULT_WORKER_ID);
int port = SystemPropertyUtil.getInt(PORT_KEY, DEFAULT_PORT);
this.idWorker = new SnowflakeIdWorker(workerId, port);
logger.info("Initialized LeafGenerator with workerId={}, port={}", workerId, port);
}
public long nextId() {
return idWorker.nextId();
}
private static class SnowflakeIdWorker {
private final long workerId;
private final long port;
private long sequence = 0L;
private long lastTimestamp = -1L;
SnowflakeIdWorker(long workerId, long port) {
if (workerId < 0 || workerId > MAX_WORKER_ID) {
throw new IllegalArgumentException(String.format("workerId must be between %d and %d", 0, MAX_WORKER_ID));
}
this.workerId = workerId;
this.port = port;
}
synchronized long nextId() {
long timestamp = System.currentTimeMillis();
if (timestamp < lastTimestamp) {
throw new RuntimeException("Clock moved backwards. Refusing to generate id");
}
if (timestamp == lastTimestamp) {
sequence = (sequence + 1) & MAX_SEQUENCE;
if (sequence == 0L) {
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = timestamp;
return ((timestamp - EPOCH) << (WORKER_ID_BITS + SEQUENCE_BITS))
| (workerId << SEQUENCE_BITS)
| sequence;
}
private long tilNextMillis(long lastTimestamp) {
long timestamp = System.currentTimeMillis();
while (timestamp <= lastTimestamp) {
timestamp = System.currentTimeMillis();
}
return timestamp;
}
}
}

Leaf算法的特點是生成ID的速度比Snowflake算法略慢,但是可以支持更多的Worker節點。Leaf算法生成的ID由三部分組成,分別是時間戳、Worker ID和序列號,其中時間戳占用42位、Worker ID占用10位、序列號占用12位,總共64位。

以上是常見的分布式ID生成算法,當然還有其他的一些方案,如:MongoDB ID、UUID、Twitter Snowflake等。不同的方案適用于不同的業務場景,具體實現細節和性能表現也有所不同,需要根據實際情況選擇合適的方案。

除了上述介紹的分布式ID生成算法,還有一些新的分布式ID生成方案不斷涌現,例如Flicker的分布式ID生成算法,它使用了類似于Snowflake的思想,但是采用了不同的位數分配方式,相比Snowflake更加靈活,并且可以根據需要動態調整每個部分占用的位數。此外,Facebook還推出了ID Generation Service (IGS)方案,該方案將ID的生成和存儲分離,提供了更加靈活和可擴展的方案,但是需要進行更加復雜的架構設計和實現。

針對不同的業務需求,可以設計多套分布式ID生成方案。下面是我個人的一些建議:

  1. 基于數據庫自增ID生成:使用數據庫自增ID作為全局唯一ID,可以很好的保證ID的唯一性,并且實現簡單,但是并發量較高時可能會導致性能瓶頸。因此,在高并發場景下不建議使用。
  2. 基于UUID生成:使用UUID作為全局唯一ID,可以很好地保證ID的唯一性,但是ID長度較長(128位),不便于存儲和傳輸,并且存在重復ID的概率非常小但不為0。因此,建議在分布式系統中使用時要考慮ID的長度和存儲傳輸的成本。
  3. 基于Redis生成:使用Redis的原子性操作,可以保證ID的唯一性,并且生成ID的速度非常快,可以適用于高并發場景。但是需要注意,如果Redis宕機或者性能不足,可能會影響ID的生成效率和可用性。
  4. 基于ZooKeeper生成:使用ZooKeeper的序列號生成器,可以保證ID的唯一性,并且實現較為簡單,但是需要引入額外的依賴和資源,并且可能會存在性能瓶頸。

選擇適合自己業務場景的分布式ID生成方案,需要綜合考慮ID的唯一性、生成速度、長度、存儲成本、可擴展性、可用性等多個因素。同時需要注意,不同方案的實現細節和性能表現也有所不同,需要根據實際情況進行權衡和選擇。

下面給出每種方案的詳細代碼demo:

基于數據庫自增ID生成

javaCopy code
public class IdGenerator {
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/test";
private static final String JDBC_USER = "root";
private static final String JDBC_PASSWORD = "password";

public long generateId() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);
pstmt = conn.prepareStatement("INSERT INTO id_generator (stub) VALUES (null)", Statement.RETURN_GENERATED_KEYS);
pstmt.executeUpdate();
rs = pstmt.getGeneratedKeys();
if (rs.next()) {
return rs.getLong(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return 0L;
}
}

基于UUID生成

javaCopy code
import java.util.UUID;


public class IdGenerator {
public String generateId() {
return UUID.randomUUID().toString().replace("-", "");
}
}

基于Redis生成

javaCopy code
import redis.clients.jedis.Jedis;


public class IdGenerator {
private static final String REDIS_HOST = "localhost";
private static final int REDIS_PORT = 6379;
private static final String REDIS_PASSWORD = "password";
private static final int ID_GENERATOR_EXPIRE_SECONDS = 3600;
private static final String ID_GENERATOR_KEY = "id_generator";

public long generateId() {
Jedis jedis = null;
try {
jedis = new Jedis(REDIS_HOST, REDIS_PORT);
jedis.auth(REDIS_PASSWORD);
long id = jedis.incr(ID_GENERATOR_KEY);
jedis.expire(ID_GENERATOR_KEY, ID_GENERATOR_EXPIRE_SECONDS);
return id;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
jedis.close();
}
}
return 0L;
}
}

基于ZooKeeper生成

javaCopy code
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;


public class IdGenerator implements Watcher {
private static final String ZK_HOST = "localhost";
private static final int ZK_PORT = 2181;
private static final int SESSION_TIMEOUT = 5000;
private static final String ID_GENERATOR_NODE = "/id_generator";
private static final int ID_GENERATOR_EXPIRE_SECONDS = 3600;
private long workerId = 0;

public IdGenerator() {
try {
ZooKeeper zk = new ZooKeeper(ZK_HOST + ":" + ZK_PORT, SESSION_TIMEOUT, this);
CountDownLatch latch = new CountDownLatch(1);
latch.await();
if (zk.exists(ID_GENERATOR_NODE, false) == null) {
zk.create(ID_GENERATOR_NODE, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
workerId = zk.getChildren(ID_GENERATOR_NODE, false).size();
zk.create(ID_GENERATOR_NODE + "/worker_" + workerId, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
} catch (Exception e) {
e.printStackTrace();
}
}

public long generateId() {
ZooKeeper zk = null;
try {
zk = new ZooKeeper(ZK_HOST + ":" + ZK_PORT, SESSION_TIMEOUT, null);
CountDownLatch latch = new CountDownLatch(1);
latch.await();
zk.create(ID_GENERATOR_NODE + "/id_", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL, (rc, path, ctx, name) -> {}, null);
byte[] data = zk.getData(ID_GENERATOR_NODE + "/worker_" + workerId, false, null);
long id = Long.parseLong(new String(data)) * 10000 + zk.getChildren(ID_GENERATOR_NODE, false).size();
return id;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (zk != null) {
try {
zk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return 0L;
}


@Override
public void process(WatchedEvent event) {
if (event.getState() == Event.KeeperState.SyncConnected) {
System.out.println("Connected to ZooKeeper");
CountDownLatch latch = new CountDownLatch(1);
latch.countDown();
}
}
}

注意,這里使用了ZooKeeper的臨時節點來協調各個工作節點,如果一個工作節點掛掉了,它的臨時節點也會被刪除,這樣可以保證每個工作節點獲得的ID是唯一的。

以上就是各種分布式ID生成方案的詳細代碼demo,實際上,每種方案都有其優缺點,應根據具體業務場景和系統架構選擇合適的方案。

責任編輯:武曉燕 來源: 德哥很ok
相關推薦

2023-09-14 15:44:46

分布式事務數據存儲

2020-05-28 09:35:05

分布式事務方案

2025-04-29 04:00:00

分布式事務事務消息

2025-04-28 00:44:04

2020-09-23 09:52:01

分布式WebSocketMQ

2024-03-26 12:08:53

分布式事務存儲

2010-07-21 13:53:41

SQL Server分

2019-01-11 18:22:07

阿里巴巴技術開源

2025-05-07 00:10:00

分布式事務TCC模式

2023-09-28 08:39:23

分布式鎖Redis

2025-09-08 02:35:00

Redisson分布式鎖WatchDog

2019-07-25 15:32:35

分布式事務微服務系統架構

2021-05-08 08:01:05

Session登錄瀏覽器

2025-08-27 09:11:48

2021-09-28 09:43:11

微服務架構技術

2025-06-30 07:15:32

.NET應用分布式

2024-12-09 09:35:00

2019-09-09 10:09:51

分布式事務 數據庫

2023-11-30 07:19:08

.NET開源

2022-02-10 08:57:45

分布式線程鎖
點贊
收藏

51CTO技術棧公眾號

26uuu亚洲电影| 国产亚洲欧美精品久久久久久| 国产乱码在线| 91亚洲精品久久久蜜桃| 国产精品av网站| 性生交大片免费全黄| av综合网站| 91国偷自产一区二区三区成为亚洲经典| 品久久久久久久久久96高清| 国产精品视频第一页| 亚洲国产日韩欧美一区二区三区| 国产丝袜高跟一区| 亚欧激情乱码久久久久久久久| 伊人影院在线视频| 久久精品免视看| 91麻豆国产精品| 亚洲精品720p| 婷婷丁香激情网| 欧美寡妇性猛交xxx免费| 久久美女高清视频| 91情侣在线视频| 黄色av一区二区| 激情另类综合| www.久久久久| 一级黄色片大全| 最新精品在线| 在线不卡a资源高清| 妺妺窝人体色www看人体| 成人免费高清在线播放| 99久久精品情趣| 51国偷自产一区二区三区| 免费一级a毛片| 中文亚洲字幕| 久久久久久美女| 一区二区视频免费看| 国产aⅴ精品一区二区三区久久| 欧美一级高清片| 国产视频1区2区3区| 伊人久久精品一区二区三区| 亚洲一区二区三区在线| 中文字幕成人一区| av在线电影观看| 精品视频高清无人区区二区三区| www亚洲色图| 欧美wwwwww| 欧美一区二区三区四区视频| 99久久99久久免费精品蜜臀| 欧美激情视频一区| 极品美妇后花庭翘臀娇吟小说| 欧美黄色录像| 亚洲第一区在线| 中文字幕制服丝袜| 日韩精品一区二区三区中文| 欧美精品在线观看播放| 久热精品在线播放| 久久天天久久| 欧美日韩国产经典色站一区二区三区| 欧美午夜aaaaaa免费视频| 日韩成人动漫| 欧美性色综合网| 天天色综合社区| 91嫩草国产线观看亚洲一区二区| 欧洲一区二区三区在线| 杨幂毛片午夜性生毛片| 成人精品国产亚洲| 欧美三区在线观看| 天天干天天av| 日本精品视频| 亚洲黄色www| 精品少妇人妻一区二区黑料社区| 欧美人与牛zoz0性行为| 一区二区三区国产视频| 狂野欧美性猛交| 欧美在线影院| 8x拔播拔播x8国产精品| 国语对白永久免费| 性欧美一区二区| 日韩av午夜| 亚洲欧美另类人妖| 少妇无套高潮一二三区| 99久久99久久精品国产片桃花| 91精品人妻一区二区| 99re久久| 欧美一区三区四区| 女同性αv亚洲女同志| 成功精品影院| 精品视频www| 一级片手机在线观看| 色婷婷一区二区三区| 久久久成人精品视频| 久久久久久蜜桃| 香蕉久久a毛片| 国产精品一区二区电影| a视频免费在线观看| 99久久夜色精品国产网站| 欧美最大成人综合网| 国产在线观看a视频| 午夜久久电影网| 香蕉视频网站入口| 成人自拍在线| 国产亚洲a∨片在线观看| 伊人在线视频观看| 亚洲黄色av| 国产日韩精品视频| 全国男人的天堂网| 国产精品国产三级国产a| 无码人妻少妇伦在线电影| 羞羞影院欧美| 欧美成人综合网站| 国产91丝袜美女在线播放| 欧美日韩精选| 国产精品偷伦视频免费观看国产 | 在线免费看黄色片| 国产精品自拍区| 欧美黑人性猛交| 91久久久久国产一区二区| 99久久99久久免费精品蜜臀| 好吊色这里只有精品| 日本一二三四区视频| 四虎影视精品永久在线观看| 亚洲大胆美女视频| 午夜激情福利电影| 男人天堂欧美日韩| 99视频在线免费观看| 岛国在线视频| 精品日本高清在线播放| 亚洲精品一二三四| 欧美超碰在线| 国产成人自拍视频在线观看| 刘亦菲毛片一区二区三区| 中文字幕一区在线观看| 女人另类性混交zo| 欧美人妖视频| 色与欲影视天天看综合网| 亚洲视频在线观看一区二区| 91麻豆免费视频| 欧美视频免费看欧美视频| 久久99精品久久久野外观看| 色婷婷久久av| 欧美一级做a爰片免费视频| 99久久精品免费精品国产| 一二三四中文字幕| 开心久久婷婷综合中文字幕| 免费观看性欧美大片无片| 亚洲国产视频a| 国产精品igao网网址不卡| 91亚洲国产| 国产精品视频内| 91精品专区| 欧美色手机在线观看| 欧美午夜激情影院| 蜜臀av亚洲一区中文字幕| 色综合666| abab456成人免费网址| 国产亚洲视频在线观看| 黄色av网站免费观看| 国产午夜精品一区二区三区嫩草| av天堂永久资源网| 精品在线99| 国产精品久久久久久久美男| av午夜在线| 黄色成人在线播放| 正在播放久久| 日韩三区免费| 亚洲天堂男人天堂| 国产欧美高清在线| 精品亚洲精品| 91国产高清在线| 亚洲 国产 欧美 日韩| 偷窥少妇高潮呻吟av久久免费 | 久久成人精品无人区| 亚洲欧美成人一区| 成人av在线播放| 色与欲影视天天看综合网| 性生活视频软件| 亚洲va韩国va欧美va精品| 欧美熟妇精品黑人巨大一二三区| 视频一区二区国产| 中文字幕av日韩精品| 51社区在线成人免费视频| 国语自产在线不卡| 国产小视频免费在线观看| 欧美美女黄视频| 国产亚洲第一页| 久久综合九色综合欧美98| 免费看国产黄色片| 欧美午夜免费影院| 久久99久久精品国产| 国产在视频一区二区三区吞精| 另类视频在线观看| 性xxxxbbbb| 色八戒一区二区三区| 三级全黄做爰视频| av网站免费线看精品| 亚洲老女人av| 精品动漫3d一区二区三区免费| 欧美日韩另类丝袜其他| vam成人资源在线观看| 91国内精品久久| 亚洲成人三级| 亚洲精品久久久久久久久久久| 中文字幕乱码视频| 亚洲成人高清在线| 少妇高潮一区二区三区喷水| 99精品欧美一区二区三区小说 | 欧美一级免费| 久久久久久欧美| 浪潮av一区| 国产视频久久久久| 亚洲国产www| 欧美日韩三级在线| 久久久久久久久久久影院 | 中文字幕一区二区三区精品| 国产精品国产自产拍高清av| 亚洲成人av免费在线观看| 国内精品久久久久影院色| 自慰无码一区二区三区| 欧美阿v一级看视频| 日韩久久不卡| 欧美精品中文| 99在线影院| 欧美一区二区三区婷婷| 欧美尤物巨大精品爽| 手机av免费在线| 最好看的2019年中文视频| 亚洲欧美自偷自拍| 精品国产a毛片| 99在线精品视频免费观看软件 | www亚洲成人| 亚洲一区图片| 国产成a人亚洲精v品在线观看| 欧美第一精品| 国产精品女主播在线观看| 中文 日韩 欧美| 日韩福利电影在线| 自慰无码一区二区三区| 在线精品一区| 男女爱爱视频网站| 99久久99热这里只有精品| 国产一区二区成人久久免费影院 | 欧美在线视屏| 一区二区视频国产| 成人在线丰满少妇av| 欧美激情视频一区二区三区| 国产精品videossex| 91中文字精品一区二区| 粉嫩一区二区三区在线观看| 国产精品精品久久久| 欧美男女交配| 欧美一区视频在线| 都市激情亚洲一区| 欧亚精品中文字幕| 一区二区电影免费观看| 日本不卡免费高清视频| 国产不卡网站| 欧美中文字幕视频| 都市激情亚洲一区| 国产精品69久久| 全球最大av网站久久| 国产精品爱久久久久久久| 中文字幕资源网在线观看免费| 欧美最猛黑人xxxx黑人猛叫黄| 电影网一区二区| 国产成人精品最新| 国模私拍国内精品国内av| 成人国内精品久久久久一区| 激情综合婷婷| 成人性色av| 欧美18免费视频| 欧洲视频一区二区三区| 日韩av免费网址| 亚洲激情成人在线| 精品无码m3u8在线观看| 婷婷丁香久久五月婷婷| 免费的毛片视频| 欧美日韩在线免费视频| 国产高清免费观看| 狠狠色狠狠色合久久伊人| 国产精品久久久久久9999| 国产精品一二三四| 精品无码国产一区二区三区51安| 97精品超碰一区二区三区| 蜜桃传媒一区二区亚洲| 中文字幕一区二区三区不卡在线| 日韩女优一区二区| 日本国产高清不卡| 无码人妻丰满熟妇精品| 欧美在线高清视频| 国产免费黄视频| 一本色道久久精品| 热久久精品国产| 久久精品国产网站| wwwxxxx在线观看| 国产一区在线视频| 中文字幕 亚洲一区| 日本高清不卡一区二区三区视频| 久久久久亚洲精品成人网小说| 在线男人天堂| 国产欧美中文字幕| 成人爽a毛片| 亚洲欧洲免费无码| 亚洲国产第一| jizz18女人| 97久久超碰精品国产| 天堂av免费在线| 五月综合激情婷婷六月色窝| 日本一区二区三区久久| 亚洲大胆人体在线| 午夜在线播放| 91国语精品自产拍在线观看性色| 青青伊人久久| 欧美日本韩国在线| 在线成人黄色| www.色.com| 国产精品美女久久久久久久| 中文字幕在线字幕中文| 欧美一区二区视频网站| 五月天激情播播| 国产成人免费网站| 国产视频123区| 狠狠色狠色综合曰曰| 国产高中女学生第一次| 亚洲激情中文在线| 日本一区二区三区www| 国内自拍一区| 一二三av在线| 国产精品久久久久久久久晋中| 日韩福利片在线观看| 日韩欧美在线网站| 午夜视频成人| 国产精品久久久久久久久久| 亚洲丁香日韩| 自慰无码一区二区三区| 成人av网站免费观看| 青娱乐免费在线视频| 在线成人午夜影院| 免费日本一区二区三区视频| 国产精品99久久久久久人| 亚洲精品推荐| 久久国产亚洲精品无码| 波多野结衣在线一区| 久久久久成人精品无码| 欧美一区二区不卡视频| 麻豆av在线导航| 成人黄色av网站| 视频在线不卡免费观看| 在线免费看毛片| 精品久久久久久久久久久院品网 | 福利影院在线看| 114国产精品久久免费观看| 国产偷人爽久久久久久老妇app| 日韩欧美激情在线| 菠萝蜜视频国产在线播放| 91久久精品在线| 亚洲国产精品成人| 日本美女久久久| 亚洲欧美日韩一区二区三区在线观看| 91精品国产乱码久久| 三级黄色片免费看| 国产精品1区2区3区| xxxx日本少妇| 日韩欧美在线综合网| 日本无删减在线| 豆国产97在线| 亚洲精品系列| 国产精品探花一区二区在线观看| 五月天激情小说综合| 深夜福利在线观看直播| 日韩av免费在线| 欧美三级美国一级| 在线观看亚洲色图| 亚洲日本青草视频在线怡红院| 国产xxxx孕妇| 韩日欧美一区二区| 色综合综合色| 一起操在线视频| 亚洲精品国产精华液| 少妇高潮一区二区三区99小说| 91高清免费在线观看| 精品久久美女| 亚洲涩涩在线观看| 亚洲一区二区三区免费视频| 天堂视频中文在线| 国产精品稀缺呦系列在线| 综合久久一区| 精品人妻一区二区三区日产乱码卜| 色婷婷精品大在线视频| 欧美另类极品| 国产精品一区二| 毛片一区二区| 欧美一级片在线视频| 亚洲国产精品va在线| 亚洲成人一区在线观看| 熟女视频一区二区三区| 成人动漫av在线| 成人免费一级片| 欧美激情亚洲激情| 欧美性感美女一区二区| 久久久久99人妻一区二区三区| 色偷偷久久人人79超碰人人澡|