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

讀完這篇文章,就基本搞定了Redis數據庫

運維 數據庫運維 Redis
簡單來說 Redis 就是一個數據庫,不過與傳統數據庫不同的是 Redis 的數據是存在內存中的,所以存寫速度非常快,因此 Redis 被廣泛應用于緩存方向。

[[244941]]

另外,Redis 也經常用來做分布式鎖。Redis 提供了多種數據類型來支持不同的業務場景。

除此之外,Redis 支持事務 、持久化、LUA 腳本、LRU 驅動事件、多種集群方案。

本文將從以下幾個方面全面解讀 Redis:

  • 為什么要用 Redis / 為什么要用緩存
  • 為什么要用 Redis 而不用 map/guava 做緩存
  • Redis 和 Memcached 的區別
  • Redis 常見數據結構以及使用場景分析
  • Redis 設置過期時間
  • Redis 內存淘汰機制
  • Redis 持久化機制(怎么保證 Redis 掛掉之后再重啟數據可以進行恢復)
  • Redis 事務
  • 緩存雪崩和緩存穿透問題解決方案
  • 如何解決 Redis 的并發競爭 Key 問題
  • 如何保證緩存與數據庫雙寫時的數據一致性

為什么要用 Redis / 為什么要用緩存?

主要從“高性能”和“高并發”這兩點來看待這個問題。

高性能

 

假如用戶第一次訪問數據庫中的某些數據。這個過程會比較慢,因為是從硬盤上讀取的。

將該用戶訪問的數據存在緩存中,這樣下一次再訪問這些數據的時候就可以直接從緩存中獲取了。

操作緩存就是直接操作內存,所以速度相當快。如果數據庫中的對應數據改變了之后,同步改變緩存中相應的數據即可!

高并發

 

 

 

 

直接操作緩存能夠承受的請求是遠遠大于直接訪問數據庫的,所以我們可以考慮把數據庫中的部分數據轉移到緩存中去,這樣用戶的一部分請求會直接到緩存這里而不用經過數據庫。

為什么要用 Redis 而不用 map/guava 做緩存

緩存分為本地緩存和分布式緩存。以 Java 為例,使用自帶的 map 或者 guava 實現的是本地緩存,最主要的特點是輕量以及快速,生命周期隨著 JVM 的銷毀而結束。

并且在多實例的情況下,每個實例都需要各自保存一份緩存,緩存不具有一致性。

使用 Redis 或 Memcached 之類的稱為分布式緩存,在多實例的情況下,各實例共用一份緩存數據,緩存具有一致性。

缺點是需要保持 Redis 或 Memcached 服務的高可用,整個程序架構上較為復雜。

Redis 和 Memcached 的區別

現在公司一般都是用 Redis 來實現緩存,而且 Redis 自身也越來越強大了!

對于 Redis 和 Memcached 我總結了下面四點:

  • Redis 支持更豐富的數據類型(支持更復雜的應用場景):Redis 不僅僅支持簡單的 K/V 類型的數據,同時還提供 list、set、zset、hash 等數據結構的存儲。Memcache 支持簡單的數據類型 String。
  • Redis 支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用,而 Memecache 把數據全部存在內存之中。
  • 集群模式:Memcached 沒有原生的集群模式,需要依靠客戶端來實現往集群中分片寫入數據;但是 Redis 目前是原生支持 Cluster 模式的。
  • Memcached 是多線程,非阻塞 IO 復用的網絡模型;Redis 使用單線程的多路 IO 復用模型。

來自網絡上的一張對比圖,這里分享給大家:

 

Redis 常見數據結構以及使用場景分析

String

常用命令:set、get、decr、incr、mget 等。

String 數據結構是簡單的 Key-Value 類型,Value 其實不僅可以是 String,也可以是數字。常規 Key-Value 緩存應用;常規計數:微博數,粉絲數等。

Hash

常用命令: hget、hset、hgetall 等。

Hash 是一個 String 類型的 Field 和 Value 的映射表,Hash 特別適合用于存儲對象。

后續操作的時候,你可以直接僅僅修改這個對象中的某個字段的值。比如我們可以 Hash 數據結構來存儲用戶信息,商品信息等等。

比如下面我就用 Hash 類型存放了我本人的一些信息:

  1. key=JavaUser293847 
  2. value={ 
  3.   “id”: 1, 
  4.   “name”: “SnailClimb”, 
  5.   “age”: 22, 
  6.   “location”: “Wuhan, Hubei” 

List

常用命令:lpush、rpush、lpop、rpop、lrange 等。

List 就是鏈表,Redis List 的應用場景非常多,也是 Redis 最重要的數據結構之一。

比如微博的關注列表,粉絲列表,消息列表等功能都可以用 Redis 的 List 結構來實現。

Redis List 的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷。

另外可以通過 lrange 命令,就是從某個元素開始讀取多少個元素,可以基于 List 實現分頁查詢。

這是很棒的一個功能,基于 Redis 實現簡單的高性能分頁,可以做類似微博那種下拉不斷分頁的東西(一頁一頁的往下走),性能高。

Set

常用命令:sadd、spop、smembers、sunion 等。

Set 對外提供的功能與 List 類似是一個列表的功能,特殊之處在于 Set 是可以自動排重的。

當你需要存儲一個列表數據,又不希望出現重復數據時,Set 是一個很好的選擇。

并且 Set 提供了判斷某個成員是否在一個 Set 集合內的重要接口,這個也是 List 所不能提供的。你可以基于 Set 輕易實現交集、并集、差集的操作。

比如:在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis 可以非常方便的實現如共同關注、共同粉絲、共同喜好等功能。

這個過程也就是求交集的過程,具體命令如下:

  1. sinterstore key1 key2 key3 將交集存在key1內 

Sorted Set

常用命令:zadd、zrange、zrem、zcard 等。

和 Set 相比,Sorted Set 增加了一個權重參數 Score,使得集合中的元素能夠按 Score 進行有序排列。

舉例:在直播系統中,實時排行信息包含直播間在線用戶列表,各種禮物排行榜,彈幕消息(可以理解為按消息維度的消息排行榜)等信息,適合使用 Redis 中的 Sorted Set 結構進行存儲。

Redis 設置過期時間

Redis 中有個設置過期時間的功能,即對存儲在 Redis 數據庫中的值可以設置一個過期時間。作為一個緩存數據庫,這是非常實用的。

如我們一般項目中的 Token 或者一些登錄信息,尤其是短信驗證碼都是有時間限制的,按照傳統的數據庫處理方式,一般都是自己判斷過期,這樣無疑會嚴重影響項目性能。

我們 Set Key 的時候,都可以給一個 Expire Time,就是過期時間,通過過期時間我們可以指定這個 Key 可以存活的時間。

如果你設置了一批 Key 只能存活 1 個小時,那么接下來 1 小時后,Redis 是怎么對這批 Key 進行刪除的?

答案是:定期刪除+惰性刪除。通過名字大概就能猜出這兩個刪除方式的意思了:

  • 定期刪除:Redis 默認是每隔 100ms 就隨機抽取一些設置了過期時間的 Key,檢查其是否過期,如果過期就刪除。

注意這里是隨機抽取的。為什么要隨機呢?你想一想假如 Redis 存了幾十萬個 Key ,每隔 100ms 就遍歷所有的設置過期時間的 Key 的話,就會給 CPU 帶來很大的負載!

  • 惰性刪除 :定期刪除可能會導致很多過期 Key 到了時間并沒有被刪除掉。所以就有了惰性刪除。

假如你的過期 Key,靠定期刪除沒有被刪除掉,還停留在內存里,除非你的系統去查一下那個 Key,才會被 Redis 給刪除掉。這就是所謂的惰性刪除,也是夠懶的哈!

但是僅僅通過設置過期時間還是有問題的。我們想一下:如果定期刪除漏掉了很多過期 Key,然后你也沒及時去查,也就沒走惰性刪除,此時會怎么樣?

如果大量過期 Key 堆積在內存里,導致 Redis 內存塊耗盡了。怎么解決這個問題呢?

Redis 內存淘汰機制

MySQL 里有 2000w 數據,Redis 中只存 20w 的數據,如何保證 Redis 中的數據都是熱點數據?

Redis 配置文件 redis.conf 中有相關注釋,我這里就不貼了,大家可以自行查閱或者通過這個網址查看:http://download.redis.io/redis-stable/redis.conf

Redis 提供 6 種數據淘汰策略:

  • volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰。
  • volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰。
  • volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰。
  • allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key(這個是最常用的)。
  • allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰。
  • no-enviction:禁止驅逐數據,也就是說當內存不足以容納新寫入數據時,新寫入操作會報錯。這個應該沒人使用吧!

Redis 持久化機制

怎么保證 Redis 掛掉之后再重啟數據可以進行恢復?很多時候我們需要持久化數據也就是將內存中的數據寫入到硬盤里面。

大部分原因是為了之后重用數據(比如重啟機器、機器故障之后恢復數據),或者是為了防止系統故障而將數據備份到一個遠程位置。

Redis 不同于 Memcached 的很重要一點就是,Redis 支持持久化,而且支持兩種不同的持久化操作。

Redis 的一種持久化方式叫快照(snapshotting,RDB),另一種方式是只追加文件(append-only file,AOF)。

這兩種方法各有千秋,下面我會詳細講這兩種持久化方法是什么,怎么用,如何選擇適合自己的持久化方法。

快照(snapshotting)持久化(RDB)

Redis 可以通過創建快照來獲得存儲在內存里面的數據在某個時間點上的副本。

Redis 創建快照之后,可以對快照進行備份,可以將快照復制到其他服務器從而創建具有相同數據的服務器副本(Redis 主從結構,主要用來提高 Redis 性能),還可以將快照留在原地以便重啟服務器的時候使用。

快照持久化是 Redis 默認采用的持久化方式,在 redis.conf 配置文件中默認有此下配置:

  1. save 900 1              #在900秒(15分鐘)之后,如果至少有1個key發生變化,Redis就會自動觸發BGSAVE命令創建快照。 
  2.  
  3. save 300 10            #在300秒(5分鐘)之后,如果至少有10個key發生變化,Redis就會自動觸發BGSAVE命令創建快照。 
  4.  
  5. save 60 10000        #在60秒(1分鐘)之后,如果至少有10000個key發生變化,Redis就會自動觸發BGSAVE命令創建快照。 

AOF(append-only file)持久化

與快照持久化相比,AOF 持久化的實時性更好,因此已成為主流的持久化方案。

默認情況下 Redis 沒有開啟 AOF(append only file)方式的持久化,可以通過 appendonly 參數開啟:

  1. appendonly yes 

開啟 AOF 持久化后每執行一條會更改 Redis 中的數據的命令,Redis 就會將該命令寫入硬盤中的 AOF 文件。

AOF 文件的保存位置和 RDB 文件的位置相同,都是通過 dir 參數設置的,默認的文件名是 appendonly.aof。

在 Redis 的配置文件中存在三種不同的 AOF 持久化方式,它們分別是:

  1. appendfsync always     #每次有數據修改發生時都會寫入AOF文件,這樣會嚴重降低Redis的速度 
  2. appendfsync everysec  #每秒鐘同步一次,顯示地將多個寫命令同步到硬盤 
  3. appendfsync no      #讓操作系統決定何時進行同步 

為了兼顧數據和寫入性能,用戶可以考慮 appendfsync everysec 選項 ,讓 Redis 每秒同步一次 AOF 文件,Redis 性能幾乎沒受到任何影響。

而且這樣即使出現系統崩潰,用戶最多只會丟失一秒之內產生的數據。當硬盤忙于執行寫入操作的時候,Redis 還會優雅的放慢自己的速度以便適應硬盤的最大寫入速度。

Redis 4.0 對于持久化機制的優化

Redis 4.0 開始支持 RDB 和 AOF 的混合持久化(默認關閉,可以通過配置項 aof-use-rdb-preamble 開啟)。

如果把混合持久化打開,AOF 重寫的時候就直接把 RDB 的內容寫到 AOF 文件開頭。

這樣做的好處是可以結合 RDB 和 AOF 的優點, 快速加載同時避免丟失過多的數據。

當然缺點也是有的,AOF 里面的 RDB 部分是壓縮格式不再是 AOF 格式,可讀性較差。

補充內容:AOF 重寫

AOF 重寫可以產生一個新的 AOF 文件,這個新的 AOF 文件和原有的 AOF 文件所保存的數據庫狀態一樣,但體積更小。

AOF 重寫是一個有歧義的名字,該功能是通過讀取數據庫中的鍵值對來實現的,程序無須對現有 AOF 文件進行任伺讀入、分析或者寫入操作。

在執行 BGREWRITEAOF 命令時,Redis 服務器會維護一個 AOF 重寫緩沖區,該緩沖區會在子進程創建新 AOF 文件期間,記錄服務器執行的所有寫命令。

當子進程完成創建新 AOF 文件的工作之后,服務器會將重寫緩沖區中的所有內容追加到新 AOF 文件的末尾,使得新舊兩個 AOF 文件所保存的數據庫狀態一致。

最后,服務器用新的 AOF 文件替換舊的 AOF 文件,以此來完成 AOF 文件重寫操作。

Redis 事務

Redis 通過 MULTI、EXEC、WATCH 等命令來實現事務(transaction)功能。

事務提供了一種將多個命令請求打包,然后一次性、按順序地執行多個命令的機制。

并且在事務執行期間,服務器不會中斷事務而改去執行其他客戶端的命令請求,它會將事務中的所有命令都執行完畢,然后才去處理其他客戶端的命令請求。

在傳統的關系式數據庫中,常常用 ACID 性質來檢驗事務功能的可靠性和安全性。

在 Redis 中,事務總是具有原子性(Atomicity)、一致性(Consistency)和隔離性(Isolation),并且當 Redis 運行在某種特定的持久化模式下時,事務也具有持久性(Durability)。

緩存雪崩和緩存穿透問題解決方案

緩存雪崩

簡介:緩存同一時間大面積的失效,所以,后面的請求都會落到數據庫上,造成數據庫短時間內承受大量請求而崩掉。

 

解決辦法:

  • 事前:盡量保證整個 Redis 集群的高可用性,發現機器宕機盡快補上。選擇合適的內存淘汰策略。
  • 事中:本地 Ehcache 緩存 + Hystrix 限流&降級,避免 MySQL 崩掉。
  • 事后:利用 Redis 持久化機制保存的數據盡快恢復緩存。

緩存穿透

簡介:一般是黑客故意去請求緩存中不存在的數據,導致所有的請求都落到數據庫上,造成數據庫短時間內承受大量請求而崩掉。

解決辦法:有很多種方法可以有效地解決緩存穿透問題,最常見的則是采用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的 bitmap 中。

一個一定不存在的數據會被這個 bitmap 攔截掉,從而避免了對底層存儲系統的查詢壓力。

另外也有一個更為簡單粗暴的方法(我們采用的就是這種),如果一個查詢返回的數據為空(不管是數據不存在,還是系統故障),我們仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

如何解決 Redis 的并發競爭 Key 問題

所謂 Redis 的并發競爭 Key 的問題也就是多個系統同時對一個 Key 進行操作,但是最后執行的順序和我們期望的順序不同,這樣也就導致了結果的不同!

推薦一種方案:分布式鎖(ZooKeeper 和 Redis 都可以實現分布式鎖)。(如果不存在 Redis 的并發競爭 Key 問題,不要使用分布式鎖,這樣會影響性能)

基于 ZooKeeper 臨時有序節點可以實現的分布式鎖。大致思想為:每個客戶端對某個方法加鎖時,在 ZooKeeper 上的與該方法對應的指定節點的目錄下,生成一個唯一的瞬時有序節點。

判斷是否獲取鎖的方式很簡單,只需要判斷有序節點中序號最小的一個。 當釋放鎖的時候,只需將這個瞬時節點刪除即可。

同時,其可以避免服務宕機導致的鎖無法釋放,而產生的死鎖問題。完成業務流程后,刪除對應的子節點釋放鎖。

在實踐中,當然是以可靠性為主。所以首推 ZooKeeper。

如何保證緩存與數據庫雙寫時的數據一致性

你只要用緩存,就可能會涉及到緩存與數據庫雙存儲雙寫,你只要是雙寫,就一定會有數據一致性的問題,那么你如何解決一致性問題?

一般來說,就是如果你的系統不是嚴格要求緩存+數據庫必須一致性的話,緩存可以稍微的跟數據庫偶爾有不一致的情況。

最好不要做這個方案,讀請求和寫請求串行化,串到一個內存隊列里去,這樣就可以保證一定不會出現不一致的情況。

串行化之后,就會導致系統的吞吐量會大幅度的降低,用比正常情況下多幾倍的機器去支撐線上的一個請求。

參考文章:

  • https://segmentfault.com/q/1010000009106416
  • Redis設計與實現(第二版)
  • https://www.jianshu.com/p/8bddd381de06
  • https://blog.csdn.net/zeb_perfect/article/details/54135506
  • Java工程師面試突擊第1季(可能是史上最好的Java面試突擊課程)-中華石杉老師。鏈接: https://pan.baidu.com/s/18pp6g1xKVGCfUATf_nMrOA,密碼:5i58

福利來啦

請結合自身情況談談運用 Redis 中的難點。掃描下方二維碼,關注51CTO技術棧公眾號。歡迎在技術棧微信公眾號留言探討。小編將選出留言最精彩的 10 名網友,送出《PHP 高性能開發:基礎、框架與項目實戰》圖書一本~活動截止時間 10 月 4 日十二時整,特別鳴謝機械工業出版社為本次活動提供的圖書贊助。等不及送書的小伙伴,可以點擊閱讀原文直接購買。

 

書籍簡介

 

本書分為 3 篇:第 1 篇基礎入門篇,包括 PHP 快速入門、虛擬機與個性化開發環境搭建、Git 版本控制、高效團隊合作、PHP Storm 技巧、Composer 包管理工具等內容。第 2 篇框架進階篇,分別介紹了前端框架 Bootstrap 和后端框架 ThinkPHP5,幫助開發者掌握快速開發項目的方法。第 3 篇項目實戰篇,帶領開發者完成了一個基本的內容管理框架,并在此基礎上實現了計劃任務的可視化管理和基于 Redis 隊列的商城搶購系統。

責任編輯:武曉燕 來源: Java 面試通關手冊
相關推薦

2019-10-31 09:48:53

MySQL數據庫事務

2022-05-27 08:18:00

HashMapHash哈希表

2020-11-12 10:37:29

微服務

2017-03-30 22:41:55

虛擬化操作系統軟件

2024-03-26 00:00:06

RedisZSet排行榜

2018-02-08 18:16:39

數據庫MySQL鎖定機制

2025-03-28 08:53:51

2025-02-14 08:53:24

2017-03-07 15:35:26

Android適配 界面

2021-11-10 07:47:48

Traefik邊緣網關

2018-08-17 09:14:43

餓了么容器演進

2017-03-10 21:04:04

Android適配

2017-12-12 12:53:09

2024-11-19 18:03:04

2021-02-24 07:38:50

Redis

2019-08-01 11:04:10

Linux磁盤I

2015-11-02 09:49:04

Android屏幕適配官方指導

2019-07-10 15:15:23

JVM虛擬機Java

2021-05-31 08:59:57

Java數據庫訪問JDBC

2018-10-24 16:25:24

數據庫MySQLxtraback
點贊
收藏

51CTO技術棧公眾號

三区四区在线观看| www.男人天堂网| 888奇米影视| 欧美在线黄色| 日韩av中文字幕在线| 日韩中文字幕组| www久久日com| 久久这里只有精品首页| 国产精品福利片| 青娱乐在线视频免费观看| 亚洲欧洲免费| 91精品国产麻豆国产自产在线 | 日韩欧美高清| 欧美mv日韩mv国产| 中文字幕网av| 美女网站在线看| 亚洲天堂久久久久久久| 狠狠色综合网站久久久久久久| 看黄色一级大片| 欧美午夜在线视频| 伊人男人综合视频网| 无码人妻丰满熟妇区毛片蜜桃精品 | 手机免费av片| 国产福利片在线观看| 国产精品人妖ts系列视频| 不卡一区二区三区四区五区| 精品久久久久久久久久久久久久久久久久| 成人精品亚洲| 亚洲国产精品久久91精品| 福利视频999| 成人自拍av| 亚洲大尺度视频在线观看| 樱花www成人免费视频| 色综合久久网女同蕾丝边| 国产成人精品影院| 日韩男女性生活视频| 精品在线视频观看| 中文字幕日韩一区二区不卡| 在线色欧美三级视频| 岛国精品一区二区三区| 91国产一区| 欧美三级乱人伦电影| 青青青青草视频| 男女免费观看在线爽爽爽视频| 亚洲欧洲日韩在线| 日本一区不卡| 日韩av资源站| 91久色porny| 精品一区二区久久久久久久网站| 国产刺激高潮av| 国产成人精品亚洲777人妖 | 国产99久久久国产精品成人免费| 精品伦理精品一区| 中文字幕亚洲日本| 日韩在线精品强乱中文字幕| 91精品福利在线一区二区三区| 国产亚洲视频一区| 日日夜夜亚洲| 91精品欧美一区二区三区综合在| 99热一区二区| 婷婷激情成人| 日韩欧美亚洲国产另类| 黄页网站在线看| 97成人在线| 亚洲国产精品va在线| 奇米777第四色| 久久综合五月婷婷| 国产婷婷成人久久av免费高清| 中文字幕 日本| 亚洲精品亚洲人成在线观看| 亚洲欧美国产va在线影院| 无码人妻aⅴ一区二区三区| 欧美色图婷婷| 亚洲午夜色婷婷在线| 丁香花五月婷婷| 偷拍欧美精品| 久久久久久综合网天天| 日韩成人在线免费视频| 欧美亚洲网站| 国产美女精品视频| www.国产免费| 91丨porny丨最新| 日韩精品另类天天更新| 黄色在线免费网站| 亚洲国产精品天堂| 国产情侣av自拍| 日日狠狠久久| 日韩禁在线播放| 亚洲欧美va天堂人熟伦| 91精品蜜臀一区二区三区在线| 欧美日韩国产成人| 国产91国语对白在线| 蜜臀av亚洲一区中文字幕| 亚洲综合视频1区| 日韩一级片免费在线观看| 国产三级精品三级| 成人小视频在线观看免费| 亚洲性色av| 宅男噜噜噜66一区二区66| 久久久久麻豆v国产精华液好用吗| 精品久久久亚洲| 色综合久久中文字幕综合网小说| 亚洲天堂视频网站| 久久99精品国产91久久来源| 国产一区二区精品免费| 午夜在线播放| 亚洲成人免费看| 中文字幕第38页| 老汉色老汉首页av亚洲| 色妞在线综合亚洲欧美| 伊人久久综合视频| 国产精品系列在线播放| 日本不卡一区二区三区视频| av超碰免费在线| 在线观看视频一区二区| 亚洲色偷偷色噜噜狠狠99网| 希岛爱理av一区二区三区| 欧美自拍视频在线| 亚洲第一免费视频| 国产精品丝袜久久久久久app| 日韩欧美不卡在线| 91精品国产一区二区在线观看| 亚洲视频axxx| xxxxxx国产| 国产一区二区三区日韩| 亚洲成人自拍视频| xxxxx性欧美特大| 亚洲高清福利视频| 中文字幕av久久爽av| 日本aⅴ免费视频一区二区三区| 国产偷国产偷亚洲高清97cao| 成人国产免费电影| 欧美日韩视频在线第一区| 中文字幕第20页| 国产精品久久国产愉拍| 国产精品.com| av毛片在线播放| 7777精品伊人久久久大香线蕉完整版 | 成人av集中营| 精品视频在线观看日韩| 国产精品99无码一区二区| 国产一区二区在线观看视频| 日本在线观看一区| 欧美粗大gay| 日韩av中文字幕在线| 日韩精品久久久久久久酒店| 成人美女视频在线观看18| 国产精品无码免费专区午夜| 秋霞影院一区| 欧美精品在线免费播放| av男人天堂av| 亚洲一区二区影院| 极品白嫩的小少妇| 激情自拍一区| 精品国产一二| 亚洲同志男男gay1069网站| 亚洲精品99久久久久| 国产精品变态另类虐交| caoporn国产精品| 久久国产精品网| 精品国产导航| 欧美在线视频免费| 国产小视频在线| 欧美亚洲一区二区在线| 精品一区二区三孕妇视频| 久久99蜜桃精品| 青青视频免费在线观看| 亚洲一区二区三区在线免费| 欧美丰满少妇xxxx| 日韩在线视频观看免费| 色综合久久88色综合天天免费| 亚洲国产天堂av| 美国十次了思思久久精品导航| 国产精品夜夜夜爽张柏芝| 一区二区三区亚洲变态调教大结局| 久久久久久久久久久成人| 欧美视频免费一区二区三区| 欧美午夜视频网站| 午夜69成人做爰视频| 99久久精品国产一区二区三区| 116极品美女午夜一级| 日韩免费高清| 成人蜜桃视频| 成人在线视频播放| 久久综合久久八八| 三级在线视频| 欧美精品18+| 日本韩国欧美中文字幕| 国产精品乱码妇女bbbb| 极品白嫩少妇无套内谢| 日日夜夜精品视频免费| 色乱码一区二区三区熟女| 男人的天堂久久| 国产精自产拍久久久久久蜜| wwww亚洲| 最近2019好看的中文字幕免费| 亚洲国产日韩在线观看| 91成人国产精品| 亚洲精品在线观看av| 国产欧美视频一区二区三区| 久久精品无码专区| 青娱乐精品视频在线| 久草免费福利在线| 日韩一区亚洲二区| 精品欧美一区二区三区久久久 | 国产最新精品视频| 黄色片在线免费看| 欧美日韩免费视频| 亚洲视频免费播放| 国产精品免费观看视频| 亚洲妇女无套内射精| 蜜臀av性久久久久蜜臀aⅴ流畅| 中文字幕在线乱| 偷拍亚洲色图| 亚洲一区二区自拍| 成人国产网站| 2019中文字幕在线免费观看| 一本一道波多野毛片中文在线| 欧美精品一区二区高清在线观看| 中文字幕1区2区3区| 亚洲成人免费影院| 特一级黄色录像| 久久网这里都是精品| 日本少妇xxxx| 国产一区二区三区久久悠悠色av| 成人在线观看a| 欧美一区二区三区另类| 午夜精品一区二区三区在线观看 | 91在线观看欧美日韩| 巨胸喷奶水www久久久免费动漫| 欧美激情亚洲激情| 快射av在线播放一区| 精品少妇一区二区| 夜夜狠狠擅视频| 亚洲成a人v欧美综合天堂下载| 国精品人伦一区二区三区蜜桃| 91麻豆精品在线观看| 日b视频在线观看| 国产高清久久久| 欧美wwwwwww| 久久精品在线| 可以在线看的av网站| 欧美精品午夜| 麻豆md0077饥渴少妇| 先锋资源久久| 在线观看精品视频| 欧美日韩在线播放视频| 亚洲不卡一卡2卡三卡4卡5卡精品| 日韩亚洲精品在线观看| 91香蕉国产在线观看| 亚州精品国产| 亚洲自拍另类欧美丝袜| 国产麻豆精品| 国产在线观看一区二区三区| 日日狠狠久久| 91午夜理伦私人影院| 99久久999| 91精品国产综合久久久久久久久 | 国产精品96久久久久久| 不卡一二三区| 国产精品日日做人人爱| 香蕉成人av| 日本久久91av| 九九久久国产| 成人久久18免费网站图片| 欧美国产视频| 国产精国产精品| 久久久精品一区二区毛片免费看| 国产免费成人av| 精品国产一区二区三区2021| 国产精品毛片一区视频| 国产精品1luya在线播放| 国产一区二区高清视频| 国产精品羞羞答答在线观看| 日韩精品一区二区三区色偷偷 | 国产在线观看免费av| 懂色av影视一区二区三区| 日韩精品视频免费在线观看| 99草在线视频| 亚洲电影成人av99爱色| 欧美77777| 亚洲欧美成人一区二区在线电影| 日韩成人影视| 欧美黄色三级网站| 国内激情视频在线观看| 国产一区二区色| 深夜激情久久| 精品国产乱码一区二区三区四区| 国产精品羞羞答答在线观看| 一区二区在线高清视频| 女同性一区二区三区人了人一| 影音欧美亚洲| 国产精品女主播一区二区三区| 日本一极黄色片| 激情综合色播激情啊| 少妇户外露出[11p]| 国产午夜亚洲精品午夜鲁丝片| 国产三级aaa| 午夜一区二区三区在线观看| 波多野结衣黄色| 日韩一区二区三区在线观看 | 狠狠色丁香九九婷婷综合五月| 精品人妻无码中文字幕18禁| 91丨porny丨首页| 91成人精品一区二区| 亚洲一区二区不卡免费| 欧美一区二区三区网站| 欧美日韩激情一区| 天堂网在线观看视频| 一区二区三区无码高清视频| 邻居大乳一区二区三区| 欧美另类69精品久久久久9999| 欧美激情护士| 亚洲va国产va天堂va久久| 久久成人av| 无码人妻精品一区二区蜜桃网站| 久久综合九色| 国产在线不卡av| 国产精品色哟哟| 中日韩黄色大片| 日韩欧美在线影院| 午夜小视频在线| 欧美在线国产精品| 99ri日韩精品视频| 亚洲欧洲日夜超级视频| 亚洲福利久久| 91porn在线| 国产精品久久久久7777按摩| 毛片基地在线观看| 亚洲国产精品va在线看黑人| 在线国产情侣| 日韩免费精品视频| 秋霞影院一区二区三区| 樱空桃在线播放| 日韩精品一二区| 人妻在线日韩免费视频| 一区二区三区日韩欧美| 夜夜躁很很躁日日躁麻豆| 中文字幕精品av| 亚洲天堂手机| 精品乱色一区二区中文字幕| 亚洲激情另类| 一级黄色免费毛片| 欧美精彩视频一区二区三区| 一级黄色av片| 亚洲欧美日韩在线一区| 欧美寡妇性猛交xxx免费| av在线不卡观看| 外国成人激情视频| 日本肉体xxxx裸体xxx免费| 久久久欧美精品sm网站| 五月婷婷中文字幕| 亚洲免费一在线| 中文在线免费二区三区| 国产日韩欧美一区二区| 亚洲三级色网| 国产精品一级黄片| 福利一区福利二区微拍刺激| 日韩一二三四| 日本亚洲精品在线观看| 大桥未久女教师av一区二区| 成人网站免费观看入口| 成人蜜臀av电影| 国产一级理论片| 亚洲第一页中文字幕| 18video性欧美19sex高清| 精品一区2区三区| 久久午夜影视| 国产美女免费网站| 欧美久久免费观看| 黄色一级大片在线免费看产| 国产精品视频不卡| 亚洲美女视频| 国产在线观看免费播放| 激情懂色av一区av二区av| 日本一本草久在线中文| 国产不卡av在线免费观看| 97精品一区| 日本人dh亚洲人ⅹxx| 亚洲国产日韩a在线播放性色| 精品国产亚洲av麻豆| 欧美多人乱p欧美4p久久| 国产ts一区| 亚洲天堂网一区| 亚洲色图制服诱惑| 一级片在线观看视频| 欧美精品videos性欧美| 欧美大奶一区二区| 中国黄色片免费看| 亚洲精品日日夜夜| 日韩有码第一页| 国产欧美一区二区三区在线| 欧美在线二区| 人妻精品久久久久中文| 91.成人天堂一区| 99thz桃花论族在线播放| 亚洲一区二区三区精品在线观看 | 曰本三级日本三级日本三级| 亚洲mv在线观看| 伊人免费在线|