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

Redis Stream 用做消息隊(duì)列完美嗎

數(shù)據(jù)庫 其他數(shù)據(jù)庫
Redis 本身定位是內(nèi)存數(shù)據(jù)庫,它的設(shè)計(jì)之初都是為緩存準(zhǔn)備的,并不具備消息堆積的能力。而專業(yè)消息隊(duì)列一個(gè)非常重要的功能是數(shù)據(jù)中轉(zhuǎn)樞紐,Redis 的定位很難滿足,使用起來要非常小心。
Redis Stream 是 Redis 5.0 版本中引入的一種新的數(shù)據(jù)結(jié)構(gòu),用于實(shí)現(xiàn)消息傳遞的功能。

這篇文章,分享筆者學(xué)習(xí) Redis Stream 的心得,希望對(duì)大家有所啟發(fā)。

圖片圖片

1 基礎(chǔ)知識(shí)

Redis Stream 的結(jié)構(gòu)如下圖所示,它是一個(gè)消息鏈表,將所有加入的消息都串起來,每個(gè)消息都有一個(gè)唯一的 ID 和對(duì)應(yīng)的內(nèi)容。

圖片圖片

每個(gè) Redis Stream 都有唯一的名稱 ,對(duì)應(yīng)唯一的 Redis Key 。

同一個(gè) Stream 可以掛載多個(gè)消費(fèi)者組 ConsumerGroup  , 消費(fèi)組不能自動(dòng)創(chuàng)建,需要使用 XGROUP CREATE 命令創(chuàng)建。

每個(gè)消費(fèi)組會(huì)有個(gè)游標(biāo) last_delivered_id,任意一個(gè)消費(fèi)者讀取了消息都會(huì)使游標(biāo) last_delivered_id 往前移動(dòng) ,標(biāo)識(shí)當(dāng)前消費(fèi)組消費(fèi)到哪條消息了。

消費(fèi)組 ConsumerGroup 同樣可以掛載多個(gè)消費(fèi)者 Consumer ,  每個(gè) Consumer 并行的讀取消息,任意一個(gè)消費(fèi)者讀取了消息都會(huì)使游標(biāo) last_delivered_id 往前移動(dòng)。

消費(fèi)者內(nèi)部有一個(gè)屬性 pending_ids , 記錄了當(dāng)前消費(fèi)者讀取但沒有回復(fù) ACK 的消息 ID 列表 。

細(xì)品 Redis stream 的設(shè)計(jì),我們發(fā)現(xiàn)它和 Kafka 非常相似,比如說消費(fèi)者組,消費(fèi)進(jìn)度偏移量等。

但內(nèi)部實(shí)現(xiàn)差異還是很明顯,Kafka 主要是利用了文件系統(tǒng)的特性,每一個(gè)主題下存在多個(gè)分區(qū) partition,而消費(fèi)者處理對(duì)應(yīng)分區(qū)消息成功之后,消費(fèi)者會(huì) commit 消費(fèi)進(jìn)度到 Broker ,Broker 修改消費(fèi)進(jìn)度偏移量并持久化。

2 核心命令

01 XADD 向 Stream 末尾添加消息

使用 XADD 向隊(duì)列添加消息,如果指定的隊(duì)列不存在,則創(chuàng)建一個(gè)隊(duì)列。基礎(chǔ)語法格式:

XADD key ID field value [field value ...]
  • key :隊(duì)列名稱,如果不存在就創(chuàng)建
  • ID :消息 id,我們使用 * 表示由 redis 生成,可以自定義,但是要自己保證遞增性。
  • field value :記錄。
127.0.0.1:6379> XADD mystream * name1 value1 name2 value2
"1712473185388-0"
127.0.0.1:6379> XLEN mystream
(integer) 1
127.0.0.1:6379> XADD mystream * name2 value2 name3 value3
"1712473231761-0"

消息 ID 使用 * 表示由 redis 生成,同時(shí)也可以自定義,但是自定義時(shí)要保證遞增性。

消息 ID 的格式:毫秒級(jí)時(shí)間戳 + 序號(hào) , 例如:1712473185388-5 , 它表示當(dāng)前消息在毫秒時(shí)間戳 1712473185388 產(chǎn)生 ,并且該毫秒內(nèi)產(chǎn)生到了第5條消息。

在添加隊(duì)列消息時(shí),也可以指定隊(duì)列的長(zhǎng)度。

127.0.0.1:6379> XADD mystream MAXLEN 100 * name value1 age 30
"1713082205042-0"

使用  XADD 命令向 mystream 的 stream 中添加了一條消息,并且指定了最大長(zhǎng)度為 100。消息的 ID 由 Redis 自動(dòng)生成,消息包含兩個(gè)字段 name 和 age,分別對(duì)應(yīng)的值是 value1 和 30。

02 XRANGE 獲取消息列表

使用 XRANGE 獲取消息列表,會(huì)自動(dòng)過濾已經(jīng)刪除的消息。語法格式:

XRANGE key start end [COUNT count]
  • key :隊(duì)列名
  • start :開始值, - 表示最小值
  • end :結(jié)束值, + 表示最大值
  • count :數(shù)量
127.0.0.1:6379> XRANGE mystream - + COUNT 2
1) 1) "1712473185388-0"
   2) 1) "name1"
      2) "value1"
      3) "name2"
      4) "value2"
2) 1) "1712473231761-0"
   2) 1) "name2"
      2) "value2"
      3) "name3"
      4) "value3"

我們得到兩條消息,第一層是消息 ID ,第二層是消息內(nèi)容 ,消息內(nèi)容是 Hash 數(shù)據(jù)結(jié)構(gòu) 。

03 XREAD 以阻塞/非阻塞方式獲取消息列表

使用 XREAD 以阻塞或非阻塞方式獲取消息列表 ,語法格式:

XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]
  • count :數(shù)量
  • milliseconds :可選,阻塞毫秒數(shù),沒有設(shè)置就是非阻塞模式
  • key :隊(duì)列名
  • id :消息 ID
127.0.0.1:6379> XREAD streams mystream 0-0
1) 1) "mystream"
   2) 1) 1) "1712473185388-0"
         2) 1) "name1"
            2) "value1"
            3) "name2"
            4) "value2"
      2) 1) "1712473231761-0"
         2) 1) "name2"
            2) "value2"
            3) "name3"
            4) "value3"

XRED 讀消息時(shí)分為阻塞和非阻塞模式,使用 BLOCK 選項(xiàng)可以表示阻塞模式,需要設(shè)置阻塞時(shí)長(zhǎng)。非阻塞模式下,讀取完畢(即使沒有任何消息)立即返回,而在阻塞模式下,若讀取不到內(nèi)容,則阻塞等待。

127.0.0.1:6379> XREAD block 1000 streams mystream $
(nil)
(1.07s)

使用 Block 模式,配合 $ 作為 ID ,表示讀取最新的消息,若沒有消息,命令阻塞!等待過程中,其他客戶端向隊(duì)列追加消息,則會(huì)立即讀取到。

因此,典型的隊(duì)列就是 XADD 配合 XREAD Block 完成。XADD 負(fù)責(zé)生成消息,XREAD 負(fù)責(zé)消費(fèi)消息。

04 XGROUP CREATE 創(chuàng)建消費(fèi)者組

使用 XGROUP CREATE 創(chuàng)建消費(fèi)者組,分兩種情況:

  • 從頭開始消費(fèi):
XGROUP CREATE mystream consumer-group-name 0-0
  • 從尾部開始消費(fèi):
XGROUP CREATE mystream consumer-group-name $

執(zhí)行效果如下:

127.0.0.1:6379> XGROUP CREATE mystream mygroup 0-0
OK

05 XREADGROUP GROUP 讀取消費(fèi)組中的消息

使用 XREADGROUP GROUP 讀取消費(fèi)組中的消息,語法格式:

XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] ID [ID ...]
  • group :消費(fèi)組名
  • consumer :消費(fèi)者名。
  • count :讀取數(shù)量。
  • milliseconds :阻塞毫秒數(shù)。
  • key :隊(duì)列名。
  • ID :消息 ID。

示例:

127.0.0.1:6379>  XREADGROUP group mygroup consumerA count 1 streams mystream >
1) 1) "mystream"
   2) 1) 1) "1712473185388-0"
         2) 1) "name1"
            2) "value1"
            3) "name2"
            4) "value2"

消費(fèi)者組 mygroup 中的消費(fèi)者 consumerA ,從 名為 mystream 的 Stream 中讀取消息。

  • COUNT 1 表示一次最多讀取一條消息
  • > 表示消息的起始位置是當(dāng)前可用消息的 ID,即從當(dāng)前未讀取的最早消息開始讀取。

06 XACK 消息消費(fèi)確認(rèn)

接收到消息之后,我們要手動(dòng)確認(rèn)一下(ack),語法格式:

xack key group-key ID [ID ...]

示例:

127.0.0.1:6379> XACK mystream mygroup 1713089061658-0
(integer) 1

消費(fèi)確認(rèn)增加了消息的可靠性,一般在業(yè)務(wù)處理完成之后,需要執(zhí)行 ack 確認(rèn)消息已經(jīng)被消費(fèi)完成,整個(gè)流程的執(zhí)行如下圖所示:

圖片圖片

我們可以使用 xpending 命令查看消費(fèi)者未確認(rèn)的消息ID:

127.0.0.1:6379> xpending mystream mygroup
1) (integer) 1
2) "1713091227595-0"
3) "1713091227595-0"
4) 1) 1) "consumerA"
      2) "1"

07 XTRIM 限制 Stream 長(zhǎng)度

我們使用 XTRIM 對(duì)流進(jìn)行修剪,限制長(zhǎng)度, 語法格式:

127.0.0.1:6379> XADD mystream * field1 A field2 B field3 C field4 D
"1712535017402-0"
127.0.0.1:6379> XTRIM mystream MAXLEN 2
(integer) 4
127.0.0.1:6379> XRANGE mystream - +
1) 1) "1712498239430-0"
   2) 1) "name"
      2) "zhangyogn"
2) 1) "1712535017402-0"
   2) 1) "field1"
      2) "A"
      3) "field2"
      4) "B"
      5) "field3"
      6) "C"
      7) "field4"
      8) "D"

通過學(xué)習(xí)這七個(gè)核心命令,筆者發(fā)現(xiàn) Redis Stream 既支持簡(jiǎn)單的生產(chǎn)消費(fèi)模型,也支持發(fā)布訂閱模型。

3 SpringBoot Redis Stream 實(shí)戰(zhàn)

演示代碼地址:

https://github.com/makemyownlife/courage-cache-demo

1、添加 SpringBoot Redis 依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、yaml 文件配置

圖片圖片

3、RedisTemplate 配置

圖片圖片

4、定義stream監(jiān)聽器

圖片圖片

5、定義 StreamContainer 并啟動(dòng)

圖片圖片

6、發(fā)送消息

圖片圖片

執(zhí)行完成之后,消費(fèi)者就可以打印如下日志:

圖片圖片

通過實(shí)戰(zhàn)流程,我們發(fā)現(xiàn) SpringBoot 整合 Redis Stream 并不復(fù)雜,需要注意:定義注冊(cè)信息時(shí),需要確保 stream key 和消費(fèi)者組已經(jīng)創(chuàng)建好了。

4 Redis stream 用做消息隊(duì)列完美嗎

筆者認(rèn)為 Redis stream 用于消息隊(duì)列最大的進(jìn)步在于:實(shí)現(xiàn)了發(fā)布訂閱模型。

發(fā)布訂閱模型具有如下特點(diǎn):

  • 消費(fèi)獨(dú)立相比隊(duì)列模型的匿名消費(fèi)方式,發(fā)布訂閱模型中消費(fèi)方都會(huì)具備的身份,一般叫做訂閱組(訂閱關(guān)系),不同訂閱組之間相互獨(dú)立不會(huì)相互影響。
  • 一對(duì)多通信基于獨(dú)立身份的設(shè)計(jì),同一個(gè)主題內(nèi)的消息可以被多個(gè)訂閱組處理,每個(gè)訂閱組都可以拿到全量消息。因此發(fā)布訂閱模型可以實(shí)現(xiàn)一對(duì)多通信。

我們?cè)?jīng)詬病 Redis List 數(shù)據(jù)結(jié)構(gòu)用做隊(duì)列時(shí),因?yàn)橄M(fèi)時(shí)沒有 Ack 機(jī)制,應(yīng)用異常掛掉導(dǎo)致消息偶發(fā)丟失的情況,Redis Stream 從設(shè)計(jì)角度來講已經(jīng)完美的解決了。

因?yàn)橄M(fèi)者內(nèi)部有一個(gè)屬性 pending_ids , 記錄了當(dāng)前消費(fèi)者讀取但沒有回復(fù) ACK 的消息 ID 列表 。當(dāng)消費(fèi)者重新上線,這些消息可以重新被消費(fèi)。

但 Redis stream 用做消息隊(duì)列完美嗎 ?

這個(gè)還真沒有,原因在于 Redis 先天不足。

1、Redis 本身定位是內(nèi)存數(shù)據(jù)庫,它的設(shè)計(jì)之初都是為緩存準(zhǔn)備的,并不具備消息堆積的能力。而專業(yè)消息隊(duì)列一個(gè)非常重要的功能是數(shù)據(jù)中轉(zhuǎn)樞紐,Redis 的定位很難滿足,使用起來要非常小心。

2、Redis 的高可用方案可能丟失消息(AOF 持久化和主從復(fù)制都是異步 ),而專業(yè)消息隊(duì)列可以針對(duì)不同的場(chǎng)景選擇不同的高可用策略。也就說,專業(yè)消息隊(duì)列的高可用方案依然有可能會(huì)丟失消息,但是它有完善的方案支持不丟失消息。

所以,筆者認(rèn)為 Redis 非常適合輕量級(jí)消息隊(duì)列解決方案,即:數(shù)據(jù)量可控  + 業(yè)務(wù)模型簡(jiǎn)單 + 消息堆積概率低 + 報(bào)警監(jiān)控 。

責(zé)任編輯:武曉燕 來源: 勇哥Java實(shí)戰(zhàn)
相關(guān)推薦

2022-02-28 08:42:49

RedisStream消息隊(duì)列

2022-04-12 11:15:31

Redis消息隊(duì)列數(shù)據(jù)庫

2024-03-22 12:10:39

Redis消息隊(duì)列數(shù)據(jù)庫

2024-10-25 08:41:18

消息隊(duì)列RedisList

2023-12-30 13:47:48

Redis消息隊(duì)列機(jī)制

2017-10-11 15:08:28

消息隊(duì)列常見

2022-01-15 07:20:18

Redis List 消息隊(duì)列

2022-01-21 19:22:45

RedisList命令

2024-09-18 07:00:00

消息隊(duì)列中間件消息隊(duì)列

2020-01-14 15:08:44

Redis5Streams數(shù)據(jù)庫

2023-09-12 14:58:00

Redis

2018-03-29 08:38:10

2021-04-23 13:20:13

Redis數(shù)據(jù)庫代碼

2023-10-24 08:25:20

TCC模式事務(wù)

2025-06-27 10:41:04

Redis數(shù)據(jù)庫集群

2012-09-24 11:48:05

IBMdw

2010-04-13 17:00:43

Unix消息隊(duì)列

2010-04-21 12:12:56

Unix 消息隊(duì)列

2021-02-19 09:19:11

消息隊(duì)列場(chǎng)景

2009-11-09 11:15:06

WCF消息隊(duì)列
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美日韩一区免费| 秋霞影院一区二区| 欧美一区二区视频在线观看2020| 日韩精品欧美专区| 天天干天天操天天操| 亚洲人成精品久久久| 色综合久久中文字幕| 水蜜桃一区二区| 97超碰资源站| 欧美成人日韩| 日韩一级黄色片| 欧美一级视频在线播放| 欧美日韩免费做爰大片| 日韩精品电影一区亚洲| 日韩在线免费视频| 亚洲精品乱码久久久久久动漫| 成人在线免费看片| 99麻豆久久久国产精品免费| 国产成+人+综合+亚洲欧洲| 亚洲色成人网站www永久四虎| 99只有精品| 亚洲精品视频观看| 精品福利影视| 亚洲精品无码久久久久| 日韩av二区| 欧美videos大乳护士334| 91视频最新入口| www免费网站在线观看| 国产不卡免费视频| 国产福利成人在线| 青娱乐国产在线| 日韩伦理一区二区三区| 91 com成人网| av黄色在线网站| 麻豆影院在线| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲视频一起| 欧美日韩国产免费一区二区| 日韩久久一级片| 超免费在线视频| 亚洲精品国产视频| 日本老太婆做爰视频| 成a人v在线播放| 久久午夜老司机| 久久国产精品久久| 日韩在线视频第一页| 国产成人亚洲精品青草天美| 91色视频在线导航| 一级做a爰片久久毛片16| 日本女优在线视频一区二区| 国产精品va在线播放我和闺蜜| 欧美日韩综合在线观看| 亚洲电影av| 久久青草福利网站| 国产在线观看免费视频今夜| 午夜天堂精品久久久久| 美女性感视频久久久| 日韩在线观看视频一区二区| 永久91嫩草亚洲精品人人| 色综合影院在线| 国产视频123区| 日韩国产欧美一区二区| 日韩中文字幕免费看| 男人天堂资源网| 色综合狠狠操| 美日韩在线视频| 久草免费在线观看视频| 好看的日韩av电影| 97免费视频在线| 丁香社区五月天| 日产欧产美韩系列久久99| 国产精品无av码在线观看| 91片黄在线观看喷潮| 国产麻豆精品一区二区| 91九色露脸| 成人免费视频国产免费麻豆| aaa国产一区| 欧美日韩电影一区二区| 国产三区四区在线观看| 成人免费在线视频| 青青青在线观看视频| sqte在线播放| 在线免费不卡电影| 日本人69视频| 国产一级成人av| 国产亚洲精品日韩| 麻豆精品国产免费| 亚洲黄色精品| 国产精品色午夜在线观看| 国产精品爽爽久久久久久| 国产成人精品综合在线观看 | 午夜精品福利影院| 中文字幕亚洲欧美日韩2019| 国产av无码专区亚洲av毛网站| 欧美日韩国产一区精品一区| 欧美一级电影久久| 在线免费观看日韩视频| 成人中文字幕在线| 日韩三级电影免费观看| 男女羞羞视频在线观看| 色成年激情久久综合| 天堂在线精品视频| 蜜桃成人av| 九九视频这里只有精品| 精品国产xxx| 国产精品一区在线观看你懂的| 精品在线视频一区二区| 看电影就来5566av视频在线播放| 亚洲欧美自拍偷拍色图| 日韩avxxx| 精品国产鲁一鲁****| 亚洲人在线观看| www.av视频在线观看| 蜜臀国产一区二区三区在线播放| 国产精品久久久久久久久婷婷| 成人免费在线视频网| 亚洲宅男天堂在线观看无病毒| 亚洲一区二区三区四区五区xx| 粉嫩的18在线观看极品精品| 日韩中文字幕在线精品| 国产www在线| 国产成人自拍高清视频在线免费播放| 日韩欧美视频一区二区| 黄视频免费在线看| 日韩女优制服丝袜电影| а天堂中文在线资源| 性色一区二区| 精品国产aⅴ麻豆| 色yeye免费人成网站在线观看| 欧美视频在线观看一区二区| 蜜桃传媒一区二区亚洲av| 激情久久中文字幕| 97自拍视频| 伊人手机在线| 5858s免费视频成人| 美国一级黄色录像| 老司机精品导航| 国产 高清 精品 在线 a| 黄色片网站在线观看| 欧美日韩一本到| 亚洲ⅴ国产v天堂a无码二区| 久久激情综合| 噜噜噜噜噜久久久久久91| 国产后进白嫩翘臀在线观看视频| 91精品国产综合久久福利软件| 精品熟妇无码av免费久久| 久久久国产亚洲精品| 久久久久久国产精品免费免费| www.综合网.com| 精品福利在线导航| 国产亚洲精品成人| 国产福利精品一区| 嫩草影院中文字幕| av成人资源网| 久久久久久尹人网香蕉| 国产77777| 亚洲国产另类av| 国产精品手机在线观看| 亚洲毛片av| 久久国产主播精品| 亚洲国产成人二区| 一区二区三区视频在线| 亚洲一区 中文字幕| 中文字幕中文字幕在线一区| 亚洲精品视频三区| 自拍日韩欧美| 国产一区二区精品在线| 天堂中文最新版在线中文| 亚洲人成网站999久久久综合| 国产亚洲欧美日韩高清| 中文幕一区二区三区久久蜜桃| 亚洲污视频在线观看| 久久久久久久久丰满| av成人免费观看| 高清av不卡| 中文字幕欧美日韩在线| 国产高清免费观看| 午夜欧美大尺度福利影院在线看| 男生裸体视频网站| 日韩av一区二区在线影视| 一区二区三区四区五区视频| 国产视频网站一区二区三区| 欧美激情亚洲视频| 嫩草研究院在线| 91麻豆精品国产91久久久久| 国产亚洲精品码| 久久夜色精品国产欧美乱极品| 人人干人人视频| 在线国产一区| 免费成人深夜夜行视频| 日韩免费大片| 韩剧1988免费观看全集| 在线观看h片| 亚洲精品一区二区在线观看| 免费黄色一级大片| 亚洲一区二区三区国产| 精品日韩在线视频| 成人免费av网站| 国产精品自拍视频在线| 亚洲经典在线看| 一本一道久久久a久久久精品91| 99精品在免费线中文字幕网站一区 | 7777kkk亚洲综合欧美网站| 中文精品99久久国产香蕉| 成人爽a毛片一区二区| 欧美午夜一区二区| 日本系列第一页| 成人免费一区二区三区视频| 国产又粗又猛又色| 国产一区 二区 三区一级| 欧美激情成人网| 激情婷婷欧美| 日本女人高潮视频| 成人羞羞视频播放网站| 国产在线精品一区二区三区| 国产一区二区高清在线| 国产精品久久久久久久久久尿| 国产乱妇乱子在线播视频播放网站| 亚洲午夜av久久乱码| 欧美亚洲精品在线观看| 56国语精品自产拍在线观看| 日本视频网站在线观看| 亚洲高清免费在线| 久草网视频在线观看| 国产精品人成在线观看免费| 免费在线观看你懂的| thepron国产精品| 亚洲少妇一区二区三区| 精品亚洲成a人在线观看| 韩国日本美国免费毛片| 免费视频一区| 成熟丰满熟妇高潮xxxxx视频| 欧美一区二区三区久久精品| 日日噜噜噜夜夜爽爽| 欧美日中文字幕| 蜜桃网站成人| 免费精品国产| 久久免费一区| 外国成人在线视频| 欧美二区在线| 蜜桃视频欧美| 欧美日韩天天操| 米奇777超碰欧美日韩亚洲| 久久人人九九| 要久久电视剧全集免费| 九九99久久| 亚洲成aⅴ人片久久青草影院| 久久99精品国产一区二区三区| 国产精品网在线观看| 成人免费在线看片| 哺乳一区二区三区中文视频| 国产高清一区视频| 国产精品欧美大片| 国产欧美一区二区三区另类精品| youjizz欧美| 国产精品久久久久久久小唯西川 | 亚洲AV无码成人精品区明星换面 | 超碰97免费在线| 97精品国产91久久久久久| 中国字幕a在线看韩国电影| 欧美最猛黑人xxxx黑人猛叫黄| 成人影院大全| 国产精品视频在线观看| 成人豆花视频| 波多野结衣成人在线| 日韩激情啪啪| 日韩欧美亚洲日产国| 日韩国产欧美一区二区| 伊人再见免费在线观看高清版| 欧美三级午夜理伦三级中文幕| 和岳每晚弄的高潮嗷嗷叫视频| 亚洲日产国产精品| 青青草av网站| 国产精品自产自拍| 日韩av无码一区二区三区不卡| 26uuu久久综合| 五月天婷婷丁香网| 一区二区三区日韩精品| 日韩欧美一级视频| 欧美三级在线视频| 精品久久久无码中文字幕| 日韩精品有码在线观看| 91伦理视频在线观看| 欧美寡妇偷汉性猛交| 亚洲v.com| 国产一区视频在线播放| 成人偷拍自拍| 日韩福利二区| 欧美日韩蜜桃| 日韩在线xxx| 国产精品自拍在线| 无码人妻精品一区二区中文| 亚洲青青青在线视频| 黄色在线视频网址| 欧美一卡2卡3卡4卡| 欧美日韩影视| 欧美黑人性猛交| 农村妇女一区二区| 国产日韩欧美一区二区| 欧美亚洲激情| 国产免费黄色小视频| 精品影院一区二区久久久| 99re久久精品国产| 亚洲欧美日韩在线播放| 日本免费在线观看视频| 日韩视频永久免费| jyzzz在线观看视频| 久久人人看视频| www999久久| 欧美一区二区三区四区夜夜大片| 欧美99在线视频观看| 丰满少妇在线观看| 北条麻妃一区二区三区| 国产黄色小视频网站| 欧美影院一区二区三区| 特黄视频在线观看| 久久国产精品久久久久久| 国产精品99久久久久久董美香| 久久99精品国产99久久| 亚洲婷婷在线| 在线免费黄色网| 国产精品私人自拍| 国语对白永久免费| 亚洲成人亚洲激情| 黄色在线免费| 国产日韩精品在线播放| 九九免费精品视频在线观看| 北条麻妃在线视频观看| 国产91综合一区在线观看| www欧美com| 欧美美女网站色| 在线激情免费视频| 国产美女搞久久| 成人羞羞视频在线看网址| 91视频免费版污| 精品国产乱子伦一区二区| 亚洲欧洲成人精品av97| 97久久精品人人做人人爽| 五月天婷婷丁香网| 91久久精品一区二区| 青青草视频在线免费观看| 国外成人在线直播| 动漫视频在线一区| 国产免费一区二区视频| 国产成人免费视频精品含羞草妖精 | 免费看日批视频| 国产丝袜精品第一页| 96av在线| 黄色91av| 亚洲美女视频在线免费观看| 亚洲精品中文字幕在线播放| 五月天中文字幕一区二区| 国产成人手机在线| 国内久久久精品| 你懂的在线观看一区二区| 大j8黑人w巨大888a片| 国产98色在线|日韩| 国产一级aa大片毛片| 亚洲成人亚洲激情| 樱花草涩涩www在线播放| 欧美日韩亚洲一区二区三区四区| 日韩中文字幕亚洲一区二区va在线| 国产精品无码久久久久一区二区| 一本久久a久久免费精品不卡| 狠狠狠综合7777久夜色撩人| 国产精品毛片a∨一区二区三区|国| 日韩免费看片| 一级片免费在线观看视频| 亚洲一区二区不卡免费| 香蕉av在线播放| 日韩美女在线看| 欧美www视频在线观看| 欧美国产在线一区| 午夜精品一区二区三区电影天堂| 日韩精品系列| 国产精品久久二区| 亚洲澳门在线| 欧美熟妇精品一区二区蜜桃视频| 色婷婷综合久久久中文一区二区| 日本在线视频站| 成人av免费电影| 亚欧美中日韩视频| 黄色av片三级三级三级免费看| 日韩欧美国产一区在线观看| 僵尸再翻生在线观看免费国语| 日产精品久久久一区二区| 国内欧美视频一区二区| 国产污片在线观看| 在线看日韩欧美| 永久免费精品视频| 天天碰免费视频| 亚洲香肠在线观看| 成人不用播放器| 国产a一区二区| 日本vs亚洲vs韩国一区三区二区| 69av.com| 国产一区二区三区在线免费观看 | 欧美日韩生活片| 亚洲第一国产精品| 九七电影院97理论片久久tvb|