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

深入 Redis 系列:詳解 Redis 的內存管理和緩存數據的淘汰機制

數據庫 Redis
數據淘汰機制包括兩步:第一,根據一定的策略,篩選出對應用訪問來說“不重要”的數據;第二,將這些數據從緩存中刪除,為新來的數據騰出空間。

我們知道為了保證較高的性價比,緩存的空間容量必然要小于后端數據庫的數據總量。隨著要緩存的數據量越來越大,有限的緩存空間不可避免地會被寫滿。

解決這個問題就涉及到緩存系統的一個重要機制,即緩存數據的淘汰機制。數據淘汰機制包括兩步:

  • 第一,根據一定的策略,篩選出對應用訪問來說“不重要”的數據;
  • 第二,將這些數據從緩存中刪除,為新來的數據騰出空間。

然而在正式介紹Redis的緩存淘汰機制之前,我們不妨關注一個問題:以系統在DB的數據量為基準,你會為你的系統緩存設置百分之多少的容量?

根據數據訪問的局部性原理,在大多數的業務場景下,80% 的請求實際只訪問了 20% 的數據(八二原理)。

如下圖所示:

藍線代表了“八二原理”表示的數據局部性,而紅線則表示在當前應用負載下的數據局部性。藍線描述的是正常情況下有 20% 的數據貢獻了 80% 的訪問量。這 80% 的數據在訪問量上就形成了一條長長的尾巴,我們也稱為“長尾效應”。

真實業務中,用戶的個性化需求越來越多,在一個業務應用中,不同用戶訪問的內容可能差別很大,所以20% 的數據可能貢獻不了 80% 的訪問,而剩余的 80% 數據反而貢獻了更多的訪問量,我們稱之為重尾效應。因此緩存容量占總數據量的比例,從 5% 到 40% 的都有,需要結合應用數據實際訪問特征綜合考慮的。一般來說,會建議把緩存容量設置為總數據量的 15% 到 30%,兼顧訪問性能和內存空間開銷。

說完了如何設置緩存容量以及依據之后,我們開始Redis內存管理的正題。

一、Redis內存組成、內存分配和釋放

Redis的內存組成主要包括以下幾個部分:

(1) 自身內存:這是Redis服務器運行所需的基本內存,包括Redis進程不存儲任何key-value時本身所占用的內存。

(2) 鍵值對內存(key和value):

  • key:存儲Redis中每個鍵的內存占用。
  • 對象內存(與value相關):存儲Redis中每個值(對象)的內存占用。Redis中的值可以是字符串、列表、集合、哈希表、有序集合等數據類型,每種數據類型都有其特定的內部表示和內存占用。

(3) 緩沖內存:

  • 客戶端緩沖:用于存儲客戶端請求和響應數據的緩沖區。
  • 復制積壓緩沖:用于支持主從復制功能,存儲復制過程中的數據緩沖區。
  • AOF緩沖:如果啟用了AOF(Append-Only File)持久化,則會有一個緩沖區用于存儲寫操作,以便在后臺將其寫入磁盤。

(4) 子進程內存:Redis可能會創建子進程來執行某些操作,如RDB快照持久化、AOF重寫等。這些子進程也會占用相當大的內存。

(5) 內存碎片:由于Redis的內存分配器在分配和釋放內存時可能會產生碎片,這些碎片會占用額外的內存空間。雖然Redis的內存分配器(如jemalloc)會盡量減少碎片的產生,但在長時間運行或頻繁進行內存分配和釋放的情況下,仍然可能會產生一定的內存碎片。

再說說看Redis的內存分配和釋放過程。

Redis的內存分配和釋放過程是其內存管理的核心環節,它確保了Redis能夠高效地利用內存資源。以下是對Redis內存分配和釋放過程的詳細闡述:

1.內存分配過程

(1) 初始化階段:

  • 在Redis服務器啟動時,會初始化一個空的內存空間,這個空間稱為“arena”。Arena是一片連續的內存區域,用于存儲各種數據結構和對象。
  • Redis使用的Arena大小可以通過配置文件進行調整,默認為32MB。

(2) 動態分配階段:

  • 當有一個新的對象需要分配內存時,Redis會調用其內存分配器(默認是jemalloc)進行內存分配。
  • Redis根據對象的大小選擇合適的Arena進行內存分配。對象的大小決定了它在Arena中的存儲位置。較小的對象通常存儲在小的Arena中,較大的對象存儲在大的Arena中。
  • 在選定的Arena中,Redis會根據對象的大小分配一塊合適大小的內存塊。內存塊的大小可能與實際需要的大小略有不同,這是為了減少內存碎片和提高分配效率。
  • 分配的內存塊會被初始化為指定類型的對象。

(3) 內存分配策略:

  • Redis的內存分配器將內存空間劃分為多個部分,如Small class、Large class、Huge class,每個部分又劃分為很多小的內存塊單位。這樣,Redis可以采用不同大小的內存塊來存儲不同大小的內存對象。
  • 例如,一個5KB的對象可能會存儲在一個8KB的內存塊中,剩下的3KB內存就變成了內存碎片,但這些碎片仍然可以被jemalloc管理,并在后續的內存分配中重用。

2.內存釋放過程

(1) 主動釋放:

  • 使用DEL命令可以手動刪除指定的鍵及其值,從而釋放其占用的內存。
  • FLUSHDB命令用于刪除當前數據庫中的所有鍵及其值,釋放整個數據庫的內存。
  • FLUSHALL命令則用于刪除所有數據庫中的所有鍵及其值,釋放所有數據庫的內存。

(2) 被動釋放(內存淘汰機制):

  • 當Redis使用的內存達到maxmemory配置的限制時,Redis會根據配置的內存淘汰策略來釋放內存。
  • 常見的淘汰策略包括volatile-lru、volatile-ttl、allkeys-lru等,這些策略可以根據具體的業務場景和需求來選擇,以平衡內存使用和性能。

(3) 內存碎片整理:

  • 內存碎片化會導致內存浪費和碎片化問題。Redis提供了defragment命令來進行內存碎片整理,將內存中的碎片空間合并起來,減少內存占用。

(4) 對象池管理:

  • Redis內部維護了一個對象池,對象的分配和回收都會通過對象池的方式進行。
  • 當一個對象被釋放后,它會被放回對象池,以便下次再次使用。
  • 當Redis不再需要某個對象時,它會將對象從對象池中移除,并將相應的內存塊標記為空閑狀態。空閑的內存塊可以被其他對象復用。

(5) 內存回收:

  • 當大量的內存塊為空閑狀態時,Redis會調用jemalloc的內存回收函數來重新組織已分配的內存,以減少內存碎片。

二、Redis的鍵值過期處理策略

Redis的鍵值過期策略是內存管理中的重要一環。這里首先需要說一下,可能會有人將Redis的過期策略和淘汰策略給搞混,但其實兩者并不是一回事。

Redis的過期策略是指對設置了過期時間的鍵進行管理,當這些鍵的過期時間到達時,Redis會采取相應的操作來刪除這些鍵。其主要作用是確保Redis中存儲的數據是有效的、最新的,并且防止無用數據長期占用內存資源。其觸發條件是鍵的過期時間到達,這可以通過Redis的EXPIRE、PEXPIRE等命令來設置鍵的過期時間。

Redis的淘汰策略是指在內存使用達到上限時,為了保持Redis的穩定運行和內存的有效利用,Redis會采取一系列措施來淘汰部分鍵。淘汰策略的主要作用是防止Redis內存溢出,確保Redis能夠持續穩定地提供服務。淘汰策略的觸發條件是Redis的內存使用達到或超過其配置的最大內存限制(maxmemory)。

從作用對象來說,過期策略作用于設置了過期時間的鍵,而淘汰策略則可能作用于整個Redis實例中的所有鍵(取決于具體的淘汰策略)。

Redis的淘汰策略會在下面介紹,這里回到過期策略。

Redis對過期鍵的刪除策略主要包括:惰性刪除和定期刪除。

1.惰性刪除

原理:在客戶端嘗試訪問一個鍵時,Redis會檢查該鍵是否過期。如果已過期,則刪除該鍵并返回“鍵不存在”的響應;否則,返回該鍵的值。

(1) 優點:

  • 只有在真正需要訪問鍵時才會進行刪除操作,減少了不必要的性能開銷。
  • 對CPU友好,因為不會在刪除其他無關的過期鍵上花費CPU時間。

(2) 缺點:

  • 如果數據庫中有大量的過期鍵而它們又沒有被訪問到,那么這些鍵將永遠不會被刪除,可能導致內存泄漏。
  • 對內存不友好,因為過期鍵可能長時間占用內存空間。

2.定期刪除

(1) 原理:通過一種定時任務(如Redis的serverCron)來定期刪除過期鍵。每隔一段時間,Redis會對一部分數據庫中的鍵進行檢查,并刪除其中過期的鍵。

(2) 優點:

  • 通過定期刪除過期鍵,有效減少了內存浪費。
  • 相比定時刪除,對CPU的影響較小,因為刪除操作是批量進行的,而且頻率可控。

(3) 缺點:

  • 可能會帶來一定的性能開銷,因為需要定期遍歷數據庫來檢查過期鍵。
  • 確定刪除操作執行的時長和頻率是一個難點,需要根據實際情況進行權衡和調整。

三、Redis的鍵值淘汰策略

首先為什么Redis需要淘汰策略呢?如果讓大家回答這個問題,可能大家想到的可能只有:因為內存滿了,所以需要根據一定的策略淘汰掉一些舊的或者少用的鍵值來存儲新的或者常用的鍵值。但其實還可以從性能、數據一致性、內存成本和應對突發流量等角度來回答這個問題。

Redis需要淘汰策略的原因主要與其內存管理的特性和應用場景有關。以下是幾個關鍵的原因:

  • 內存限制:Redis是一個內存數據庫,它依賴于內存來存儲數據。然而,服務器的內存資源是有限的。當Redis使用的內存達到某個上限(通常由maxmemory配置參數指定)時,為了避免內存溢出和服務器崩潰,Redis需要一種機制來騰出空間,這就是淘汰策略的作用。
  • 性能優化:通過淘汰策略,Redis可以移除那些不常用或不再需要的數據,從而保持內存中的數據是活躍和有用的。這有助于提高Redis的查詢性能和響應速度,因為Redis可以更快地定位到用戶需要的數據。
  • 成本考慮:雖然增加服務器的內存可以容納更多的數據,但這也會增加硬件成本。通過合理的淘汰策略,Redis可以在不犧牲太多性能的情況下,在有限的內存資源上運行,從而降低了成本。
  • 數據一致性:在某些情況下,Redis中的數據可能是臨時或緩存性質的。對于這些數據,使用淘汰策略可以確保Redis始終存儲最新的或最重要的數據,而不是保留過時的或不再需要的數據。
  • 應對突發流量:在突發流量或高并發場景下,Redis可能會接收到大量的數據請求。通過淘汰策略,Redis可以在內存資源緊張時自動釋放一些數據,從而確保系統能夠繼續穩定運行,而不會因內存耗盡而崩潰。

那么Redis的整體淘汰鍵值的流程是怎么樣的呢?

Redis淘汰策略的流程主要涉及內存檢測、淘汰策略選擇、數據取樣、淘汰池維護、數據刪除等步驟。以下是詳細的流程說明:

1.內存檢測

(1) 周期性內存檢查:

  • Redis會周期性地檢查當前使用的內存是否超過了配置的maxmemory限制。
  • 這一檢查是通過調用freeMemoryIfNeeded函數來實現的。

(2) 判斷是否需要淘汰數據:

  • 如果當前內存使用量沒有超過maxmemory,則不需要進行淘汰操作。
  • 如果超過了maxmemory,則需要根據配置的淘汰策略來選擇要淘汰的數據。

2.淘汰策略選擇

(1) 配置淘汰策略:

  • Redis提供了多種淘汰策略,如volatile-lru、allkeys-lru、volatile-lfu(如果Redis版本支持)、allkeys-lfu、volatile-ttl、volatile-random、allkeys-random以及no-eviction等。
  • 這些策略可以在Redis的配置文件中通過maxmemory-policy參數進行配置。

(2) 選擇淘汰策略:

  • 根據配置的淘汰策略,Redis會決定是從設置了過期時間的數據集中選擇(如volatile-lru),還是從所有數據中選擇(如allkeys-lru)。
  • 同時,根據策略的不同,Redis會選擇不同的算法來確定要淘汰的數據,如LRU算法、LFU算法等。

3.數據取樣

(1) 隨機取樣:

  • Redis會從數據集(或設置了過期時間的數據集)中隨機選擇一定數量的key作為取樣數據。
  • 取樣的數量可以通過maxmemory-samples參數進行配置,默認值為5。

(2) 計算訪問頻率或時間:

  • 對于LFU策略,Redis會計算每個取樣數據的訪問頻率。
  • 對于LRU策略,Redis會記錄每個取樣數據的最近訪問時間。

3.淘汰池維護

(1) 淘汰池初始化:

  • Redis會維護一個淘汰池(eviction pool),用于存儲待淘汰的key。
  • 淘汰池的大小是固定的,默認為16。

(2) 數據比較與排序:

  • 將取樣數據與淘汰池中的數據進行比較,根據淘汰策略(如LRU、LFU等)來確定哪些數據更適合被淘汰。
  • 將更適合被淘汰的數據放入淘汰池(例如如果按照LRU策略來淘汰的話,那么如果取樣數據的最后訪問時間比淘汰池中的最晚訪問的數據的訪問事件要早,那么這個取樣數據就會被放入淘汰池),并按照適合的程度對淘汰吃中的數據進行排序。

4.數據刪除

(1) 選擇最佳淘汰數據:

  • 從淘汰池中選擇最適合被淘汰的數據(通常是排序最靠后的數據)。

(2) 刪除數據:

  • 從Redis數據庫中刪除選中的key及其對應的value。
  • 將刪除操作的消息發布到本地(AOF持久化)和從機(主從連接)。

(3) 更新內存使用量:

  • 刪除數據后,更新Redis的內存使用量。
  • 如果刪除后內存使用量仍然超過maxmemory,則繼續執行淘汰流程,直到內存使用量滿足要求為止。

上面的Redis淘汰流程中說到,Redis會根據具體的淘汰策略來決定哪些鍵值應該被淘汰,下面介紹一下Redis的淘汰策略。

其實Redis的鍵值淘汰策略遵循主流的內存淘汰算法:LFU和LRU算法。所以在說具體的淘汰策略之前,我會先簡單介紹下這兩種算法的特點和實現。

5.LRU算法

(1) 原理:

LRU算法根據數據的訪問時間來決定哪些數據會被淘汰。其核心思想是:最久未被訪問的數據被認為是最不常用的數據,應該被優先淘汰。

(2) 實現方式:

Redis使用雙向鏈表和哈希表來實現LRU算法。鏈表用于維護數據的使用順序,鏈表的頭部表示最新使用的數據,而鏈表的尾部表示最舊的數據。哈希表則用于加快數據的查找速度,哈希表的鍵是數據的鍵,值是指向雙向鏈表節點的指針。

當有數據被訪問時,Redis會將該數據從鏈表中當前位置移動到鏈表頭部。這樣一來,經常被訪問的數據就會一直保持在鏈表頭部,而少訪問的數據就會逐漸向鏈表尾部移動。當需要淘汰數據時,只需要選擇鏈表尾部的數據即可。

(3) 特點:

LRU算法實現簡單,能夠較好地保留熱數據(即經常被訪問的數據),提高命中率。

但是,LRU算法可能會受到突發性訪問模式的影響,即某些數據可能只是偶爾被訪問一次,但根據LRU算法,這些數據可能會被保留在內存中較長時間。

(4) 適用場景:

LRU算法適用于訪問頻率分布相對均勻的場景,能夠較好地平衡內存使用和性能需求。

6.LFU算法

(1) 原理:

LFU算法根據數據被訪問的頻率來決定哪些數據會被淘汰。其核心思想是:使用頻率越低的數據被認為是最不常用的數據,應該被優先淘汰。

(2) 實現方式:

Redis使用哈希表和最小堆(或其他數據結構,如雙向鏈表和計數器等)來實現LFU算法。哈希表用于存儲數據和其對應的訪問頻率,而最小堆則用于快速找到訪問頻率最低的數據。

當有數據被訪問時,Redis會更新該數據在哈希表中的訪問頻率。當需要淘汰數據時,Redis會從最小堆中選擇訪問頻率最低的數據進行刪除。下圖展示了LFU算法執行的過程。

(3) 特點:

LFU算法能夠更準確地識別出那些真正不常用的數據,并將其淘汰掉。

但是,LFU算法可能會受到訪問頻率的波動影響,即某些數據可能在某個時間段內被頻繁訪問,但之后就不再被訪問了。這些數據可能會因為之前的訪問頻率較高而被保留在內存中較長時間。

(4) 適用場景:

LFU算法適用于某些數據的訪問頻率明顯高于其他數據的場景,能夠更準確地保留熱門數據并淘汰冷門數據。

三、對比與選擇

對比:

  • LRU算法主要關注數據的訪問時間,而LFU算法主要關注數據的訪問頻率。
  • LRU算法實現簡單且高效,但可能受到突發性訪問模式的影響;而LFU算法能夠更準確地識別出不常用的數據,但可能受到訪問頻率波動的影響。

了解了LRU和LFU算法是怎么一回事之后,我們再看看Redis具體的淘汰策略。Redis的主要淘汰機制及其適用場景如下:

(1) noeviction(不淘汰)

描述:當內存不足時,對寫請求不再提供服務,直接返回錯誤(但DEL請求和部分特殊請求除外)。

適用場景:適合需要嚴格控制內存使用量的場景,但可能導致寫入失敗。當數據完整性或寫入操作的重要性高于緩存性能時,可以選擇此策略。

(2) allkeys-lru(從所有key中使用LRU算法淘汰)

描述:使用LRU(Least Recently Used,最近最少使用)算法從所有key中選擇最久未使用的數據進行淘汰。

適用場景:適用于緩存場景,確保常用數據優先保留,不區分是否設置過期時間。當數據訪問模式具有明顯的時間局部性(即最近被訪問的數據更有可能在未來被訪問)時,此策略效果較好。

(3) volatile-lru(從設置了過期時間的key中使用LRU算法淘汰)

描述:僅對設置了過期時間的key使用LRU算法進行淘汰。

適用場景:適合需要定期清理過期數據的場景,同時希望保留最近使用的數據。當數據具有明確的過期時間,并且希望確保在內存緊張時優先淘汰這些過期數據中較久未使用的部分時,此策略較為合適。

(4) allkeys-random(從所有key中隨機淘汰)

描述:從所有key中隨機選擇數據進行淘汰。

適用場景:適用于緩存策略不明確的場景,或者當數據訪問模式沒有明顯的規律時。此策略較為隨機,不保證常用數據優先保留。

(5) volatile-random(從設置了過期時間的key中隨機淘汰)

描述:僅對設置了過期時間的key進行隨機淘汰。

適用場景:適合不確定熱點數據的場景,但隨機淘汰方式可能不適合對性能有要求的應用。當數據具有過期時間,且對淘汰哪部分數據沒有特定要求時,可以選擇此策略。

(6) volatile-ttl(淘汰過期時間剩余最短的)

描述:在設置了過期時間的key中,淘汰過期時間剩余最短的。

適用場景:適合短時間內需要清除快過期的數據,但不適合熱點數據訪問的場景。當希望優先淘汰那些即將過期的數據時,此策略較為合適。

(7) allkeys-lfu(從所有key中使用LFU算法淘汰,如果Redis版本支持)

描述:使用LFU(Least Frequently Used,最少頻率使用)算法從所有key中選擇訪問頻率最低的數據進行淘汰。

適用場景:適用于訪問模式穩定但不同key的訪問頻率差異明顯的場景。當希望保留那些經常被訪問的數據,并淘汰那些很少被訪問的數據時,此策略效果較好。

(8) volatile-lfu(從設置了過期時間的key中使用LFU算法淘汰,如果Redis版本支持)

描述:僅對設置了過期時間的key使用LFU算法進行淘汰。

適用場景:適合需要在一定時間內淘汰使用頻率較低的數據的場景,同時這些數據具有明確的過期時間。當希望確保在內存緊張時優先淘汰那些過期數據中訪問頻率較低的部分時,此策略較為合適。

責任編輯:趙寧寧 來源: 程序員阿沛
相關推薦

2019-11-12 14:15:07

Redis內存持久化

2024-10-08 10:13:17

2020-08-18 19:15:44

Redis內存管理

2020-07-17 21:15:08

Redis內存數據庫

2021-01-19 10:39:03

Redis緩存數據

2019-08-06 19:36:25

RedisMemcached緩存

2020-01-15 14:51:04

Redis5.0數據策略

2021-08-18 07:56:04

AndroidRecyclerVie復用

2023-10-16 23:57:35

Redis內存

2017-05-09 08:27:42

分布式緩存技術Spring Redi

2018-04-27 09:03:57

Redis數據存儲

2024-09-26 06:30:36

2010-12-10 15:40:58

JVM內存管理

2025-02-12 00:29:58

2019-05-07 10:01:49

Redis軟件開發

2024-09-30 10:27:22

2024-07-16 08:38:06

2010-09-26 13:23:13

JVM內存管理機制

2023-02-01 08:13:30

Redis內存碎片

2023-10-26 07:13:14

Redis內存淘汰
點贊
收藏

51CTO技術棧公眾號

性欧美xxxx大乳国产app| 麻豆一区一区三区四区| 亚洲一区中文日韩| 欧美午夜精品久久久久久蜜| 一区二区日韩在线观看| 欧美色综合网| 亚洲视频在线观看| 免费黄视频在线观看| 成人美女大片| 亚洲一区二区综合| 亚洲欧洲日夜超级视频| 三级网站免费观看| 精品亚洲aⅴ乱码一区二区三区| 欧美激情免费观看| 99自拍偷拍视频| 亚洲va久久久噜噜噜久久| 91精品一区二区三区在线观看| 成人黄色av片| 亚洲制服国产| 国产精品久久久久久久久免费樱桃| 国产伦精品一区二区三区四区免费| 一女二男一黄一片| 老司机精品视频网站| 欧美精品18videosex性欧美| 日韩一卡二卡在线观看| 国产精品欧美在线观看| 精品成人私密视频| 中文字幕久久久久久久| 成人午夜888| 欧美私模裸体表演在线观看| 欧美一级在线看| 成年网站在线视频网站| 一区二区三区国产豹纹内裤在线| 亚洲一区二区三区午夜| 国产三级在线免费观看| 91香蕉视频污在线| 黄色99视频| 免费观看黄色av| 国产精品77777| 亚洲aaa激情| 国产精品污视频| 精品一区二区三区在线视频| 国产精品久久久久久久av电影 | 日韩av片专区| 国产黄色精品| 欧美三区在线视频| 一区二区三区 日韩| av一区在线| 欧美在线观看一二区| 欧美日韩亚洲一二三| 日韩久久一区二区三区| 欧美亚洲尤物久久| 欧美午夜aaaaaa免费视频| 99久久精品一区二区成人| 在线观看免费一区| 中文字幕免费高清在线| 不卡一区视频| 精品三级在线看| 国产 xxxx| 小嫩嫩12欧美| 永久免费精品影视网站| 成人性视频免费看| 亚洲欧美亚洲| 97久久久免费福利网址| 国产农村妇女aaaaa视频| 久久午夜视频| 国产日韩专区在线| 亚洲国产一二三区| 久久这里只有精品视频网| 日韩和欧美的一区二区| 麻豆影视在线观看_| 一区二区三区日韩| 久久免费视频3| 国产精品久久久久久久久久齐齐| 91精品久久久久久久99蜜桃| 久草免费资源站| 亚洲最好看的视频| www.xxxx欧美| 精品少妇一二三区| 日韩不卡在线观看日韩不卡视频| 成人免费淫片aa视频免费| 亚洲AV无码精品色毛片浪潮| av高清不卡在线| 亚洲精品无人区| 日本在线观看高清完整版| 午夜激情久久久| 国产三级三级看三级| 中文字幕av一区二区三区四区| 亚洲国产成人久久综合一区| 中文字幕伦理片| 伊人久久婷婷| 国产精品久久久久久久app| 亚洲xxxx天美| 中文字幕第一区二区| 国产精品自拍合集| 久久亚洲人体| 日韩成人在线视频网站| 三级影片在线看| 久久天堂成人| 精品国产中文字幕| 日本不卡在线| 色哟哟精品一区| 日本在线不卡一区二区| 日韩久久电影| 欧美性资源免费| 丁香花免费高清完整在线播放| 国产蜜臀av在线一区二区三区| 国产av人人夜夜澡人人爽麻豆| 精品自拍视频| 亚洲区在线播放| 久久精品久久国产| 国产一区二区精品在线观看| 日本公妇乱淫免费视频一区三区| 免费男女羞羞的视频网站在线观看| 在线观看国产日韩| 精品无码一区二区三区 | 久久在线观看视频| 久久久久久久久久一级| 99久久免费精品高清特色大片| 欧美日韩一级在线| 免费视频观看成人| 亚洲人成电影网站| 中文字幕超碰在线| av高清不卡在线| 美女扒开大腿让男人桶| 国产一区二区三区精品在线观看| 在线观看日韩av| 天干夜夜爽爽日日日日| 91蜜桃免费观看视频| 福利在线一区二区| swag国产精品一区二区| 欧美精品在线免费| 99久久久无码国产精品免费| 国产精品乱码人人做人人爱| 欧美伦理片在线看| 国产亚洲一区| 国产精品成人va在线观看| 日本福利片在线| 欧美性猛交xxxx免费看| 男女黄床上色视频| 亚洲免费婷婷| 欧美重口乱码一区二区| 成人在线网站| 中文字幕日韩免费视频| 中文字幕一区二区人妻| 国产精品久久夜| 国产5g成人5g天天爽| 91精品国产自产拍在线观看蜜| 91精品久久久久久| 在线āv视频| 亚洲福利视频网| 国产精品免费精品一区| 久久久精品国产免大香伊| 免费国产成人av| 欧美国产小视频| 91在线播放视频| а√天堂中文资源在线bt| 日韩精品极品在线观看| www.久久久久久久| 中文字幕一区二区三区不卡在线 | 久久精品视频在线免费观看| www.日本xxxx| 亚洲精品中文字幕乱码| 国产精品一区二区三区在线 | 91久久久一线二线三线品牌| 青草在线视频| 日韩精品在线观看一区二区| 波多野结衣一区二区三区在线| 国产精品色一区二区三区| 肉色超薄丝袜脚交| 亚洲免费观看| 亚洲 日韩 国产第一区| 久久爱www.| 欧美最猛性xxxxx免费| 99riav在线| 欧美大胆人体bbbb| 凹凸精品一区二区三区| 亚洲男人的天堂av| 一起草在线视频| 麻豆精品一区二区三区| 美女av免费观看| 蜜桃a∨噜噜一区二区三区| 国产在线观看精品一区二区三区| 午夜羞羞小视频在线观看| 亚洲老头同性xxxxx| 国产精品久久久久久69| 亚洲不卡一区二区三区| 男人天堂资源网| 不卡一二三区首页| 成 人 黄 色 小说网站 s色| 亚洲啪啪91| 日本丰满少妇黄大片在线观看| 卡一精品卡二卡三网站乱码 | 蜜臀久久99精品久久久酒店新书| 色婷婷色综合| 国产美女精品久久久| 欧美视频在线视频精品| 1769国内精品视频在线播放| 毛片在线视频| 在线观看国产欧美| 男人av在线| 精品国产乱码久久久久久夜甘婷婷| 91麻豆精品在线| 岛国精品视频在线播放| 麻豆亚洲av成人无码久久精品| 中文一区一区三区高中清不卡| 久久久久国产免费| 精品在线你懂的| 欧美一级特黄a| 先锋影音久久| 男人的天堂狠狠干| 欧美体内she精视频在线观看| 亚洲电影一二三区| 女人丝袜激情亚洲| 国产欧美丝袜| 视频一区日韩| 亚洲一区二区久久久久久久| 懂色aⅴ精品一区二区三区| 欧美亚洲视频在线看网址| 欧美卡一卡二| 久久精品亚洲热| 在线播放麻豆| 最近中文字幕日韩精品| 超碰免费在线观看| 亚洲午夜av久久乱码| 色视频在线观看免费| 亚洲国产成人久久综合| 色噜噜一区二区三区| 欧美成人aa大片| 99热这里只有精品在线| 7777精品伊人久久久大香线蕉的 | 欧美经典一区二区三区| 国产手机在线观看| 国产三级一区二区| 无码人妻精品一区二区中文| 91日韩一区二区三区| 日本一区二区在线免费观看| 成人小视频在线| 大桥未久恸哭の女教师| 成人一区二区三区在线观看| 在线观看一区二区三区四区| 国产成人免费高清| 亚洲少妇中文字幕| 不卡电影一区二区三区| 朝桐光av一区二区三区| 99视频国产精品| 女~淫辱の触手3d动漫| 久久精品视频一区二区| 精品熟妇无码av免费久久| 国产精品美女久久久久久久久| 精品人体无码一区二区三区| 中文字幕在线观看不卡| 久久久久久久久久久久久女过产乱| 亚洲天堂精品视频| 国产一级免费av| 欧美午夜精品久久久久久人妖| 丁香社区五月天| 88在线观看91蜜桃国自产| 99精品在线看| 日韩hd视频在线观看| 成人在线观看一区| 久热在线中文字幕色999舞| 日本资源在线| 国产91色在线免费| 亚洲欧美在线综合| 成人黄色在线免费观看| 亚洲精品亚洲人成在线| 亚洲春色在线| 国内精品久久久久久久影视麻豆| 久久视频这里有精品| 美女精品在线| 午夜一区二区视频| 成人涩涩免费视频| 亚洲图片另类小说| 亚洲欧洲精品成人久久奇米网| 国产一级片网址| 日本大香伊一区二区三区| 国产免费无遮挡| 亚洲国产精品99| 香蕉视频在线看| 亚洲91精品在线| 91视频亚洲| 久久天天狠狠| 91av精品| 午夜精品久久久内射近拍高清| 激情综合色综合久久| 800av在线播放| 中文字幕一区不卡| 97久久久久久久| 91精品国产品国语在线不卡| 亚洲av电影一区| 不卡av日日日| 国产精品亚洲d| 精品视频第一区| 亚洲欧美综合久久久| 农村妇女精品一二区| 国产精品亚洲人在线观看| 西西444www无码大胆| 一区二区三区在线免费观看| 91视频在线视频| 精品电影一区二区三区| 一区二区三区视频在线观看视频| 26uuu另类亚洲欧美日本老年| 国产日本亚洲| 一区二区不卡在线观看| 久久久噜噜噜| 久久久久国产精品无码免费看| 1区2区3区精品视频| 中文字幕xxxx| 日韩av影院在线观看| 18videosex性欧美麻豆| 国产精品爽爽爽| 国内精品伊人久久久| 999在线观看视频| 国产精品99久久不卡二区| 三级黄色片在线观看| 色婷婷av一区| 青梅竹马是消防员在线| 久久久久久亚洲| 综合激情久久| 欧美一区二区视频在线播放| 精品午夜久久福利影院| 91成人精品一区二区| 欧美主播一区二区三区| 日本成人一区| 欧美一级电影久久| 香蕉久久精品日日躁夜夜躁| 91成人在线观看喷潮教学| 成人免费高清视频在线观看| 美国黄色小视频| 欧美一级电影网站| 少女频道在线观看免费播放电视剧| 91精品久久久久久久久久另类 | 在线亚洲国产精品网| 桃色一区二区| 品久久久久久久久久96高清| 久久久精品性| 国产成人福利在线| 在线观看91精品国产入口| 超碰在线国产| 成人激情综合网| 综合激情一区| 免费在线观看日韩av| 亚洲一区二区精品3399| 国产 日韩 欧美 精品| 久久全球大尺度高清视频| 豆花视频一区二区| 日韩欧美视频网站| 久久久久久一级片| 在线观看亚洲国产| 欧美成年人网站| av毛片精品| 色综合av综合无码综合网站| 国产日韩亚洲欧美综合| 亚洲影视一区二区| 免费成人高清视频| 黑人久久a级毛片免费观看| koreanbj精品视频一区| 久久婷婷成人综合色| 最新在线中文字幕| 欧美福利小视频| 欧美aaaaa级| 免费涩涩18网站入口| 18涩涩午夜精品.www| 亚洲第一视频在线播放| 欧美亚洲视频一区二区| 日韩一区电影| 18禁一区二区三区| 色综合久久天天| 久cao在线| 国产亚洲情侣一区二区无| 日韩不卡一二三区| 福利所第一导航| 亚洲女成人图区| 久久av偷拍| 国产福利一区视频| 亚洲夂夂婷婷色拍ww47| 欧美色综合一区二区三区| 国产在线999| 国产亚洲精品久久久久婷婷瑜伽| 很污很黄的网站| 亚洲国产又黄又爽女人高潮的| 黄色成人在线视频| 免费人成在线观看视频播放| 2020国产成人综合网| 国产人妖在线播放| 国产成人精品久久亚洲高清不卡| 亚洲天堂一区二区三区四区| 少妇饥渴放荡91麻豆| 欧美一区二区日韩一区二区| 乡村艳史在线观看| 51xx午夜影福利| 国产欧美日韩视频一区二区| 亚洲国产精品久久久久久久 | 91精品啪在线观看国产爱臀| 无码人妻丰满熟妇区毛片18| 亚洲免费观看高清完整版在线 | 麻豆精品少妇| 黑人巨大猛交丰满少妇| 在线观看不卡一区|