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

Redis cluster集群Hash Tag原理分析

數據庫 其他數據庫
hash tag是一把雙刃劍,在使用時需要考慮具體業務邏輯與場景,應當盡量避免上述問題。假設無法避免時,可以對key的粒度按照業務線或者場景進行細化,進而對key進行拆分,以便更均勻的分散到不同的slot上。

工欲善其事必先利其器,在正式開始研究redis cluster hash tag之前,我們先以最小的成本搭建一套cluster集群。

docker-compose搭建redis cluster

這里使用dockerhub的bitnami/redis-cluster進行搭建,過程相比網上其他教程而言非常簡單,2個shell命令搞定。

curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/redis-cluster/docker-compose.yml > docker-compose.yml
docker-compose up -d

bitnami redis-cluster 對應的 docker-compose.yml (筆者做了細微的修改)

version:'3'
services:
  redis-node-0:
    image:docker.io/bitnami/redis-cluster:7.0
    container_name:node-0
    volumes:
      -redis-cluster_data-0:/bitnami/redis/data
    environment:
      -'REDIS_PASSWORD=123'
      -'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5'

  redis-node-1:
    image:docker.io/bitnami/redis-cluster:7.0
    container_name:node-1
    volumes:
      -redis-cluster_data-1:/bitnami/redis/data
    environment:
      -'REDIS_PASSWORD=123'
      -'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5'

  redis-node-2:
    image:docker.io/bitnami/redis-cluster:7.0
    container_name:node-2
    volumes:
      -redis-cluster_data-2:/bitnami/redis/data
    environment:
      -'REDIS_PASSWORD=123'
      -'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5'

  redis-node-3:
    image:docker.io/bitnami/redis-cluster:7.0
    container_name:node-3
    volumes:
      -redis-cluster_data-3:/bitnami/redis/data
    environment:
      -'REDIS_PASSWORD=123'
      -'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5'

  redis-node-4:
    image:docker.io/bitnami/redis-cluster:7.0
    container_name:node-4
    volumes:
      -redis-cluster_data-4:/bitnami/redis/data
    environment:
      -'REDIS_PASSWORD=123'
      -'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5'

  redis-node-5:
    image:docker.io/bitnami/redis-cluster:7.0
    container_name:node-5
    volumes:
      -redis-cluster_data-5:/bitnami/redis/data
    depends_on:
      -redis-node-0
      -redis-node-1
      -redis-node-2
      -redis-node-3
      -redis-node-4
    environment:
      -'REDIS_PASSWORD=123'
      -'REDISCLI_AUTH=123'
      -'REDIS_CLUSTER_REPLICAS=1'
      -'REDIS_NODES=redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5'
      -'REDIS_CLUSTER_CREATOR=yes'

volumes:
  redis-cluster_data-0:
    driver:local
  redis-cluster_data-1:
    driver:local
  redis-cluster_data-2:
    driver:local
  redis-cluster_data-3:
    driver:local
  redis-cluster_data-4:
    driver:local
  redis-cluster_data-5:
    driver:local

看到如下所示,即可認為redis cluster集群成功啟動。

?  ivansli$ docker-compose up -d
[+] Running 6/6
? Container node-2  Started                                                                                                                                        9.2s
? Container node-3  Started                                                                                                                                       10.6s
? Container node-1  Started                                                                                                                                        9.0s
? Container node-4  Started                                                                                                                                       11.4s
? Container node-0  Started                                                                                                                                        9.8s
? Container node-5  Started                                                                                                                                       21.5s
?  ivansli$ docker exec -it node-0 bash
ivansli@17affe689ed6:/$ redis-cli
127.0.0.1:6379> auth 123
OK
127.0.0.1:6379> cluster nodes
9ecc22a32815eb4f769069541279569c36b4b1d9 172.26.0.7:6379@16379 slave cc6e6b899e6f2b90f829aeff9ec36316433258a6 0 1685681651000 2 connected
f36960e21b778e1483237504fbffa2086ede7f4d 172.26.0.4:6379@16379 master - 0 1685681652000 3 connected 10923-16383
cc6e6b899e6f2b90f829aeff9ec36316433258a6 172.26.0.5:6379@16379 master - 0 1685681651976 2 connected 5461-10922
4523ca5ef7bfa6b7a22e39a418e2417204d5f34f 172.26.0.2:6379@16379 slave f36960e21b778e1483237504fbffa2086ede7f4d 0 1685681651000 3 connected
9cc6263d5ea15dcfb8795ce5e19f7844c5958781 172.26.0.3:6379@16379 slave 5bb46d5bb5df18a1977260da6183ec1cef9b8b00 0 1685681652984 1 connected
5bb46d5bb5df18a1977260da6183ec1cef9b8b00 172.26.0.6:6379@16379 myself,master - 0 1685681650000 1 connected 0-5460

可以看到redis cluster集群啟動成功,其架構為:3主(master)3從(slave)。

cluster master節點

slot范圍

master1

0-5460

master2

5461-10922

master3

10923-16383

集群共有16384(0~16383,2^14個)個slot(哈希槽),每個master節點擁有連續的一段slot。

redis cluster集群key的存儲方式

眾所周知,對于單臺服務器來說,在計算機硬件不變更的情況下其資源空間存在上限,例如:內存、硬盤、網卡帶寬、CPU核心等。對于基于內存的redis服務來說,想要存儲更多的、超過單機內存容量的數據,那么只能采用集群模式,最常用的就是redis cluster集群。

其數據存儲原理簡化為公式:CRC16(key) % 16384 = slot,即:取key進行CRC16計算之后對16384取模運算得到key所在的slot,由于redis cluster在啟動時會對每一臺master節點分配slot空間,那么當前slot的值在哪臺master節點的slot空間范圍內,key就存儲在哪臺節點。

圖片

通俗的講:使用一種算法把整個數據空間化整為零分散存儲在多個節點 (分布式系統設計中常用策略)。

什么是hash tag

Redis官方對Hash tags的定義如下:

There is an exception for the computation of the hash slot that is used in order to implement hash tags. Hash tags are a way to ensure that multiple keys are allocated in the same hash slot. This is used in order to implement multi-key operations in Redis Cluster. To implement hash tags, the hash slot for a key is computed in a slightly different way in certain conditions. If the key contains a "{...}" pattern only the substring between { and } is hashed in order to obtain the hash slot. However since it is possible that there are multiple occurrences of { or } the algorithm is well specified by the following rules:

  • IF the key contains a { character.
  • AND IF there is a } character to the right of {.
  • AND IF there are one or more characters between the first occurrence of { and the first occurrence of }. Then instead of hashing the key, only what is between the first occurrence of { and the following first occurrence of } is hashed.

hash tags 是用于計算哈希槽時的一個例外,是一種確保多個鍵分配到同一個哈希槽中的方法。這是為了在Redis集群中實現多鍵操作而使用的。為了實現hash tags,在某些情況下,會以稍微不同的方式計算key的哈希槽。如果key包含"{...}"模式,則僅對{和}之間的子字符串進行散列以獲取哈希槽。但由于可能存在多個{或}出現,因此該算法遵循以下規則:

  • 如果key包含字符 {
  • 并且如果 } 字符位于 { 的右側
  • 并且在第一個 { 和第一個 } 之間存在一個或多個字符

對于符合上述規則的key,則不會對整個key進行散列處理,而只會對第一次出現 { 和隨后第一次出現 } 之間的內容進行散列。否則,對整個key進行散列處理。

為什么使用hash tag

  • 不使用hash tag批量獲取不同名稱的key
127.0.0.1:6379> mget name name1 name2 name3
(error) CROSSSLOT Keys in request don't hash to the same slot

顯示錯誤信息:CROSSSLOT 請求中的key沒有哈希到同一個插槽。

  • 使用hash tag批量獲取不同名稱的key
172.26.0.5:6379> mget name {name} {name}1 {name}2 {name}3
1) (nil)
2) (nil)
3) (nil)
4) (nil)
5) (nil)

顯示正常(請求中的key被哈希到同一個插槽)。

圖片

對上述操作的key計算得出對應slot,整理如下所示:

key

計算key的slot

slot值

slot所在節點

是否使用hash tag

name

cluster keyslot name

5798

master2

?

name1

cluster keyslot name1

12933

master3

?

name2

cluster keyslot name2

742

master1

?

name3

cluster keyslot name3

4807

master1

?

{name}

cluster keyslot {name}

5798

master2

?

{name}1

cluster keyslot {name}1

5798

master2

?

{name}2

cluster keyslot {name}2

5798

master2

?

{name}3

cluster keyslot {name}3

5798

master2

?

redis中使用 cluster keyslot key的名稱 可以得到key對應的slot值

結合上面例子以及官方對hash tag的描述,想必大家已經基本可以對為什么使用hash tag這個問題得出自己的結論。

假如在開發過程中,遇到Redis中既要存儲大量數據,又要讓某些相同特征的key(key包含相同字符串)存儲在同一個節點的情況。那么,這個時候Redis cluster+hash tag絕對是你的首選。

redis源碼中hash tag的計算過程

獲取key的hash tag值,主要包含2部分邏輯:

  1. 查找 {} 包含的字符串
  2. 對找到的字符串進行使用crc16()計算

具體代碼實現如在所示:

// 代碼文件:src/cluster.c

/* We have 16384 hash slots. The hash slot of a given key is obtained
 * as the least significant 14 bits of the crc16 of the key.
 *
 * However if the key contains the {...} pattern, only the part between
 * { and } is hashed. This may be useful in the future to force certain
 * keys to be in the same node (assuming no resharding is in progress). */
unsigned int keyHashSlot(char *key, int keylen) {
    int s, e; /* start-end indexes of { and } */

    // 找到第一個 { 出現的位置
    for (s = 0; s < keylen; s++)
        if (key[s] == '{') break;

    /* No '{' ? Hash the whole key. This is the base case. */
    /* 0x3FFF = 16383 = 11111111111111 (14個1),使用 & 運算比取模運算 % 效率更高,并能實現相同效果*/
    // 沒有找到 { ,則使用整個key計算hash值
    if (s == keylen) return crc16(key,keylen) & 0x3FFF;

    // 找到第一個 } 出現的位置
    /* '{' found? Check if we have the corresponding '}'. */
    for (e = s+1; e < keylen; e++)
        if (key[e] == '}') break;

    /* No '}' or nothing between {} ? Hash the whole key. */
    // 沒找到 } 或者 {} 包含的字符串為空,則使用整個key計算hash值
    if (e == keylen || e == s+1) return crc16(key,keylen) & 0x3FFF;

    /* If we are here there is both a { and a } on its right. Hash
     * what is in the middle between { and }. */
    // 使用 {} 包含的字符串計算hash值
    return crc16(key+s+1,e-s-1) & 0x3FFF;
}


// 代碼文件:src/crc16.c
// crc16() 的實現邏輯

/* CRC16 implementation according to CCITT standards.
 *
 * Note by @antirez: this is actually the XMODEM CRC 16 algorithm, using the
 * following parameters:
 *
 * Name                       : "XMODEM", also known as "ZMODEM", "CRC-16/ACORN"
 * Width                      : 16 bit
 * Poly                       : 1021 (That is actually x^16 + x^12 + x^5 + 1)
 * Initialization             : 0000
 * Reflect Input byte         : False
 * Reflect Output CRC         : False
 * Xor constant to output CRC : 0000
 * Output for "123456789"     : 31C3
 */

staticconstuint16_t crc16tab[256]= {
    0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
    0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
    0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
    0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
    0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
    0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
    0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
    0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
    0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
    0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
    0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
    0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
    0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
    0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
    0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
    0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
    0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
    0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
    0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
    0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
    0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
    0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
    0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
    0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
    0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
    0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
    0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
    0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
    0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
    0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
    0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
    0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};

uint16_t crc16(const char *buf, int len) {
    int counter;
    uint16_t crc = 0;
    for (counter = 0; counter < len; counter++)
            crc = (crc<<8) ^ crc16tab[((crc>>8) ^ *buf++)&0x00FF];
    return crc;
}

hash tag 可能導致的問題

在Redis cluster集群中,使用hash tag可以確保多個鍵分配到同一個哈希槽中。但是,以下幾種情況可能會導致一些負面影響:

  1. 存儲時,大量key使用hash tag后落到同一slot,slot所在節點導致存儲大量數據,甚至超過內存上限(數據傾斜)
  2. 查詢/刪除時,大量key使用hash tag后落到同一slot,slot所在節點處理大量請求,導致服務器忙碌、響應失敗,甚至宕機(hot key)

hash tag是一把雙刃劍,在使用時需要考慮具體業務邏輯與場景,應當盡量避免上述問題。假設無法避免時,可以對key的粒度按照業務線或者場景進行細化,進而對key進行拆分,以便更均勻的分散到不同的slot上。

責任編輯:武曉燕 來源: 編程技術之道
相關推薦

2024-03-07 16:03:56

RedisDocker

2023-04-07 08:28:14

2021-04-06 06:04:36

Redis 6.X C集群搭建操作系統

2013-03-20 10:19:17

RedisRedis-senti監控

2019-12-13 10:50:49

集群Redis存儲

2020-04-07 08:00:02

Redis緩存數據

2022-01-27 20:15:31

集群存儲元數據

2022-01-26 00:06:08

Redis分布式客戶端

2023-05-29 08:31:48

Redis散列表

2022-05-31 08:04:03

Redis高可用集群

2019-09-16 16:05:13

Redis集群模式

2020-04-21 22:59:50

Redis搭建選舉

2023-09-26 01:07:34

2023-09-27 06:26:07

2023-05-31 08:39:04

redis事件驅動

2024-09-11 09:50:22

2021-04-22 08:40:42

RedisCluster 集群故障轉移

2024-04-11 11:04:05

Redis

2025-10-09 09:28:50

2022-03-19 12:16:49

Redis高并發系統集群部署
點贊
收藏

51CTO技術棧公眾號

亚洲亚洲免费| 黄色小网站在线观看| 亚洲黄色高清| 亚洲视频一区二区三区| 天天综合网日韩| 在线视频国产区| 91视频你懂的| 成人欧美一区二区三区黑人| 国产午夜精品无码| 俺要去色综合狠狠| 欧美第一区第二区| 国产第一页视频| 在线看一级片| 久久精品一区八戒影视| 成人动漫在线观看视频| 波多野结衣电车痴汉| 综合五月婷婷| 亚洲偷熟乱区亚洲香蕉av| 波多野结衣网页| 欧美在线va视频| 亚洲国产婷婷综合在线精品| 亚州欧美一区三区三区在线| 特黄视频在线观看| 国产在线麻豆精品观看| 国产精品白丝jk喷水视频一区| 中文字幕av播放| 久久超碰99| 欧美v日韩v国产v| 日韩中文字幕a| 成人影院网站| 亚洲国产欧美另类丝袜| 在线精品日韩| 国产三级视频在线看| 成人精品视频.| 92看片淫黄大片欧美看国产片| 99re这里只有精品在线| 日韩午夜激情| 欧美激情网友自拍| 暗呦丨小u女国产精品| 国产一区二区三区网| 亚洲精品在线电影| 女人扒开双腿让男人捅| 91国产一区| 欧美日韩一级黄| 欧美性猛交xxx乱久交| 日韩av影片| 午夜欧美一区二区三区在线播放| 国产精品一二三在线观看| 9色在线视频网站| 国产欧美日韩精品在线| 蜜桃91精品入口| 婷婷av一区二区三区| 成人白浆超碰人人人人| 国产超碰91| 粉嫩小泬无遮挡久久久久久| 国产福利不卡视频| dy888夜精品国产专区| 午夜精品一二三区| 国产a级毛片一区| 91网免费观看| 丰满人妻一区二区三区免费| 国产激情91久久精品导航| 91久久久国产精品| 国产丰满果冻videossex| 国产一区二区精品久久| 91午夜理伦私人影院| 国产欧美日韩综合精品一区二区三区| 精东粉嫩av免费一区二区三区| 91精品啪aⅴ在线观看国产| 96日本xxxxxⅹxxx17| 韩国三级在线一区| 99久久精品无码一区二区毛片| 亚洲a视频在线| 播五月开心婷婷综合| 久久青青草原| h视频网站在线观看| 中文字幕一区免费在线观看| 日本成人性视频| 日本乱理伦在线| 亚洲国产成人91porn| 国产91在线免费| 免费在线成人激情电影| 777亚洲妇女| 亚洲精品乱码久久久久久9色| 免费成人蒂法| 一区二区av在线| 顶臀精品视频www| 99亚洲一区二区| 国产精品免费观看在线| 国产麻豆一精品一男同| 成人国产电影网| 欧美日韩一区二区三区免费| 免费黄色网页在线观看| 亚洲午夜av在线| 国产综合免费视频| vam成人资源在线观看| 亚洲精品一区二区三区精华液| 白丝女仆被免费网站| 伊人久久大香线蕉综合四虎小说| 国内成人精品一区| 怡红院男人的天堂| 国产成人av一区二区| 日本视频一区二区不卡| www在线免费观看视频| 欧美性xxxxx| 美女被艹视频网站| 久久av超碰| 欧美激情精品久久久| 超碰在线97观看| 成人免费毛片片v| 台湾成人av| 欧美三级网站| 欧美一区二区不卡视频| xxx在线播放| 国语自产精品视频在线看8查询8| 国产精品盗摄久久久| 欧美性受xxxx狂喷水| 国产精品麻豆久久久| 黄色国产一级视频| 四虎国产精品免费久久| 亚洲人成人99网站| 久久久久久久伊人| 久久激情五月激情| 久久综合中文色婷婷| 中文字幕在线三区| 欧美日韩中文字幕一区二区| 亚洲一区二区三区无码久久| 欧美精品黄色| 成人激情电影一区二区| 国产在线观看免费| 狠狠躁夜夜躁久久躁别揉| 操人视频免费看| 久久国产综合| 国产91色在线免费| 性xxxfllreexxx少妇| 亚洲免费成人av| xxxx在线免费观看| 全球成人免费直播| 国产精品黄视频| 欧美扣逼视频| 欧美性高潮在线| 国产精品无码一区二区三| 欧美激情一级片一区二区| 国产日本欧美一区二区三区在线| 韩国中文字幕2020精品| 日韩欧美中文字幕在线观看| 91丝袜在线观看| 亚洲日产国产精品| 国产福利久久| 99热99re6国产在线播放| 91精品欧美久久久久久动漫 | 日本久久免费| 日韩大片在线观看视频| 欧美日韩中文视频| 不卡视频在线看| 日日摸日日碰夜夜爽无码| 999久久久精品一区二区| 欧美成人精品在线观看| 国产日本精品视频| 亚洲精品国产视频| 美女流白浆视频| 亚洲性图久久| 精品一区二区三区日本| 国产一二三在线| 亚洲欧美中文字幕| 中文字幕一区二区三区人妻四季| 国产精品久久久久三级| 不用播放器的免费av| 亚洲成人精品| 高清一区二区三区视频| 国产夫妻在线播放| 亚洲色图综合网| 一区二区国产欧美| 亚洲精品免费在线播放| 特级特黄刘亦菲aaa级| 国产手机视频一区二区 | 欧美 日韩 国产 成人 在线| 亚洲成人免费视频| 精品人妻无码一区二区三区| 美女免费视频一区二区| 国产内射老熟女aaaa| 久久亚州av| 国产精品久久久久久久久久免费| 国产精品久久麻豆| 亚洲高清久久网| 成人免费一级片| 亚洲免费观看高清| 中文字幕在线视频播放| 日韩av一区二区三区| 黄色a级在线观看| 欧美日韩直播| 国产精品一区二区久久| 日韩少妇视频| 国产亚洲视频中文字幕视频| 99久久国产免费| 欧美日韩国产区| 成人18视频免费69| 成人性生交大片| 亚洲激情在线观看视频| 狠狠综合久久| 天天爽天天狠久久久| 亚洲一区二区三区中文字幕在线观看| 91高潮在线观看| 黄网站在线播放| 精品视频在线播放免| 国产深喉视频一区二区| 欧美性生交xxxxxdddd| 日本中文在线视频| 久久久久青草大香线综合精品| 中文字幕无码毛片免费看| 三级亚洲高清视频| 久久久99精品视频| 日韩电影在线视频| 欧美极品jizzhd欧美| 91成人精品在线| 国产欧美日韩中文字幕在线| 亚洲女同志freevdieo| 欧美精品免费在线| 在线国产情侣| 亚洲区中文字幕| 人妻一区二区三区四区| 91麻豆精品国产91久久久资源速度| 久久夜色精品国产噜噜亚洲av| 亚洲精品第1页| 国产91在线播放九色| 久久精品综合网| 搡老熟女老女人一区二区| 国产jizzjizz一区二区| 激情五月婷婷基地| 日韩和欧美的一区| 成年人观看网站| 亚洲高清资源| 成人在线观看毛片| 亚洲精品久久久| 一本色道久久综合亚洲二区三区| 国产欧美日韩视频在线| 久久久久久久久久久久久久一区| www.国产精品一区| www.久久久| 亚洲精品不卡在线观看| 91夜夜未满十八勿入爽爽影院 | 蜜桃精品一区二区| 成人福利电影精品一区二区在线观看| 日本r级电影在线观看| 精品在线免费观看| 亚洲最大天堂网| 狠狠色狠狠色合久久伊人| 不卡的在线视频| 免费的成人av| 亚洲高清免费在线观看| 免费成人在线影院| 色一情一区二区三区| 狠狠色狠狠色合久久伊人| 欧美视频国产视频| 国产一区二区剧情av在线| 下面一进一出好爽视频| 国产成人日日夜夜| youjizz.com日本| 成人一区在线观看| 国产伦精品一区二区免费| 成人av免费在线播放| 亚洲少妇18p| www久久久久| 2019男人天堂| 国产精品久久二区二区| 永久看片925tv| 亚洲一区二区三区在线看| 日韩免费一二三区| 欧美午夜女人视频在线| 波多野结衣影片| 欧美精品国产精品| www.久久久久久久久久| 亚洲国内精品在线| 久久天堂电影| 久久影视免费观看| 17videosex性欧美| 国产91在线播放九色快色| 激情久久一区二区| 97久久人人超碰caoprom欧美| 成人另类视频| 欧美一级爽aaaaa大片| 9999国产精品| 国产成人一区二区三区别| 国产精品久久国产愉拍| 网站一区二区三区| 高清在线不卡av| 小早川怜子久久精品中文字幕| 亚洲婷婷综合久久一本伊一区 | 在线视频一区二区三| 国产又粗又猛又爽又黄91| 日韩一级完整毛片| 日韩美女一级视频| 久久伊人91精品综合网站| 国产污视频在线播放| 成人a在线视频| 欧美人与动xxxxz0oz| 在线播放 亚洲| 国产欧美二区| 91精品视频国产| 久久综合资源网| 日本福利片在线观看| 欧美日韩一区二区免费视频| 国产精品久久久久久免费| 亚洲国产一区自拍| 91麻豆一二三四在线| 国产精品盗摄久久久| 蜜臀av一区| 国产激情片在线观看| 美美哒免费高清在线观看视频一区二区| xxxx视频在线观看| 中文无字幕一区二区三区| 九九九国产视频| 欧美一区二区黄色| 国产黄在线播放| 91成人性视频| www.成人网| 色哟哟免费网站| 美腿丝袜亚洲综合| 国产熟妇搡bbbb搡bbbb| 亚洲一区二区视频在线| 99久久亚洲精品日本无码| 亚洲最大在线视频| 日本免费一区二区六区| 粉嫩av一区二区三区免费观看| 99热国内精品永久免费观看| 哪个网站能看毛片| eeuss影院一区二区三区| 黄色一级片中国| 欧美高清激情brazzers| 国产精品麻豆一区二区三区| 青草成人免费视频| 欧美调教在线| 欧美,日韩,国产在线| 国产精品一卡二| 久久久精品少妇| 欧美亚洲一区二区三区四区| 你懂的在线播放| 26uuu日韩精品一区二区| 丁香婷婷成人| 日韩av中文字幕第一页| 国产成人精品免费看| 精品无码久久久久成人漫画| 欧美肥胖老妇做爰| 欧美性天天影视| 91久久精品久久国产性色也91| 国产一区二区三区四区| 免费激情视频在线观看| 久久久久国产精品厨房| 精品久久久久久久久久久国产字幕| 亚洲精品久久久久久久久久久久| 3344国产永久在线观看视频| 国产视频99| 国产精品女主播一区二区三区| 欧美性生交xxxxx| 偷窥国产亚洲免费视频| 香蕉av在线播放| 青青草精品毛片| 精品国产网站| 天堂在线中文在线| 最好看的中文字幕久久| 性一交一乱一精一晶| 久久久在线观看| 伊人久久大香线蕉| 国产极品美女高潮无套久久久| 国产日韩欧美综合在线| 成人黄色免费网| 久久久久www| www.神马久久| 国产日韩一区二区在线| 中文字幕精品在线不卡| 国产毛片在线视频| 欧美激情按摩在线| 四虎5151久久欧美毛片| 日本男人操女人| 最新日韩在线视频| 亚洲第一页视频| 日本不卡高字幕在线2019| 色中色综合网| 亚洲高清无码久久| 色素色在线综合| gogo在线高清视频| 国产自产精品| 日本成人在线一区| 免费高清在线观看电视| 亚洲国产成人久久| 成人黄色免费短视频| 91九色国产ts另类人妖| 97久久超碰国产精品| 中文字幕精品在线观看| 久久久精品亚洲| 日韩美脚连裤袜丝袜在线| 香蕉视频禁止18| 亚洲一区二区三区在线看| 久热av在线| 99理论电影网| 毛片不卡一区二区| 国产视频91在线| 日韩在线播放av| 婷婷激情久久| 日韩精品xxx|