日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis为什么变慢了?一文详解Redis性能问题 | 万字长文

發布時間:2025/3/11 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis为什么变慢了?一文详解Redis性能问题 | 万字长文 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis 作為優秀的內存數據庫,其擁有非常高的性能,單個實例的 OPS 能夠達到 10W 左右。但也正因此如此,當我們在使用 Redis 時,如果發現操作延遲變大的情況,就會與我們的預期不符。

你也許或多或少地,也遇到過以下這些場景:

  • 在 Redis 上執行同樣的命令,為什么有時響應很快,有時卻很慢?

  • 為什么 Redis 執行 SET、DEL 命令耗時也很久?

  • 為什么我的 Redis 突然慢了一波,之后又恢復正常了?

  • 為什么我的 Redis 穩定運行了很久,突然從某個時間點開始變慢了?

  • ...

如果你并不清楚 Redis 內部的實現原理,那么在排查這種延遲問題時就會一頭霧水。

如果你也遇到了以上情況,那么,這篇文章將會給你一個「全面」的問題排查思路,并且針對這些導致變慢的場景,我還會給你一個高效的解決方案。

在正文開始之前,我需要提醒你的是,這篇文章很長,涵蓋的 Redis 知識點也非常廣,全篇文章接近 2W 字,如果此時你的閱讀環境不適合專注閱讀,我建議你先收藏此文章,然后在合適的時間專注閱讀這篇文章。

如果你能耐心且認真地讀完這篇文章,我可以保證,你對 Redis 的性能調優將會有非常大的收獲。

如果你準備好了,那就跟著我的思路開始吧!

Redis真的變慢了嗎?

首先,在開始之前,你需要弄清楚 Redis 是否真的變慢了?

如果你發現你的業務服務 API 響應延遲變長,首先你需要先排查服務內部,究竟是哪個環節拖慢了整個服務。

比較高效的做法是,在服務內部集成鏈路追蹤,也就是在服務訪問外部依賴的出入口,記錄下每次請求外部依賴的響應延時。

如果你發現確實是操作 Redis 的這條鏈路耗時變長了,那么此刻你需要把焦點關注在業務服務到 Redis 這條鏈路上。

從你的業務服務到 Redis 這條鏈路變慢的原因可能也有 2 個:

  • 業務服務器到 Redis 服務器之間的網絡存在問題,例如網絡線路質量不佳,網絡數據包在傳輸時存在延遲、丟包等情況

  • Redis 本身存在問題,需要進一步排查是什么原因導致 Redis 變慢

  • 通常來說,第一種情況發生的概率比較小,如果是服務器之間網絡存在問題,那部署在這臺業務服務器上的所有服務都會發生網絡延遲的情況,此時你需要聯系網絡運維同事,讓其協助解決網絡問題。

    我們這篇文章,重點關注的是第二種情況。

    也就是從 Redis 角度來排查,是否存在導致變慢的場景,以及都有哪些因素會導致 Redis 的延遲增加,然后針對性地進行優化。

    排除網絡原因,如何確認你的 Redis 是否真的變慢了?

    首先,你需要對 Redis 進行基準性能測試,了解你的 Redis 在生產環境服務器上的基準性能。

    什么是基準性能?

    簡單來講,基準性能就是指 Redis 在一臺負載正常的機器上,其最大的響應延遲和平均響應延遲分別是怎樣的?

    為什么要測試基準性能?我參考別人提供的響應延遲,判斷自己的 Redis 是否變慢不行嗎?

    答案是否定的。

    因為 Redis 在不同的軟硬件環境下,它的性能是各不相同的。

    例如,我的機器配置比較低,當延遲為 2ms 時,我就認為 Redis 變慢了,但是如果你的硬件配置比較高,那么在你的運行環境下,可能延遲是 0.5ms 時就可以認為 Redis 變慢了。

    所以,你只有了解了你的 Redis 在生產環境服務器上的基準性能,才能進一步評估,當其延遲達到什么程度時,才認為 Redis 確實變慢了。

    具體如何做?

    為了避免業務服務器到 Redis 服務器之間的網絡延遲,你需要直接在 Redis 服務器上測試實例的響應延遲情況。執行以下命令,就可以測試出這個實例 60 秒內的最大響應延遲:

    $?redis-cli?-h?127.0.0.1?-p?6379?--intrinsic-latency?60 Max?latency?so?far:?1?microseconds. Max?latency?so?far:?15?microseconds. Max?latency?so?far:?17?microseconds. Max?latency?so?far:?18?microseconds. Max?latency?so?far:?31?microseconds. Max?latency?so?far:?32?microseconds. Max?latency?so?far:?59?microseconds. Max?latency?so?far:?72?microseconds.1428669267?total?runs?(avg?latency:?0.0420?microseconds?/?42.00?nanoseconds?per?run). Worst?run?took?1429x?longer?than?the?average?latency.

    從輸出結果可以看到,這 60 秒內的最大響應延遲為 72 微秒(0.072毫秒)。

    你還可以使用以下命令,查看一段時間內 Redis 的最小、最大、平均訪問延遲:

    $?redis-cli?-h?127.0.0.1?-p?6379?--latency-history?-i?1 min:?0,?max:?1,?avg:?0.13?(100?samples)?--?1.01?seconds?range min:?0,?max:?1,?avg:?0.12?(99?samples)?--?1.01?seconds?range min:?0,?max:?1,?avg:?0.13?(99?samples)?--?1.01?seconds?range min:?0,?max:?1,?avg:?0.10?(99?samples)?--?1.01?seconds?range min:?0,?max:?1,?avg:?0.13?(98?samples)?--?1.00?seconds?range min:?0,?max:?1,?avg:?0.08?(99?samples)?--?1.01?seconds?range ...

    以上輸出結果是,每間隔 1 秒,采樣 Redis 的平均操作耗時,其結果分布在 0.08 ~ 0.13 毫秒之間。

    了解了基準性能測試方法,那么你就可以按照以下幾步,來判斷你的 Redis 是否真的變慢了:

  • 在相同配置的服務器上,測試一個正常 Redis 實例的基準性能

  • 找到你認為可能變慢的 Redis 實例,測試這個實例的基準性能

  • 如果你觀察到,這個實例的運行延遲是正常 Redis 基準性能的 2 倍以上,即可認為這個 Redis 實例確實變慢了

  • 確認是 Redis 變慢了,那如何排查是哪里發生了問題呢?

    下面跟著我的思路,我們從易到難,一步步來分析可能導致 Redis 變慢的因素。

    使用復雜度過高的命令

    首先,第一步,你需要去查看一下 Redis 的慢日志(slowlog)。

    Redis 提供了慢日志命令的統計功能,它記錄了有哪些命令在執行時耗時比較久。

    查看 Redis 慢日志之前,你需要設置慢日志的閾值。例如,設置慢日志的閾值為 5 毫秒,并且保留最近 500 條慢日志記錄:

    #?命令執行耗時超過?5?毫秒,記錄慢日志 CONFIG?SET?slowlog-log-slower-than?5000 #?只保留最近?500?條慢日志 CONFIG?SET?slowlog-max-len?500

    設置完成之后,所有執行的命令如果操作耗時超過了 5 毫秒,都會被 Redis 記錄下來。

    此時,你可以執行以下命令,就可以查詢到最近記錄的慢日志:

    127.0.0.1:6379>?SLOWLOG?get?5 1)?1)?(integer)?32693???????#?慢日志ID2)?(integer)?1593763337??#?執行時間戳3)?(integer)?5299????????#?執行耗時(微秒)4)?1)?"LRANGE"???????????#?具體執行的命令和參數2)?"user_list:2000"3)?"0"4)?"-1" 2)?1)?(integer)?326922)?(integer)?15937633373)?(integer)?50444)?1)?"GET"2)?"user_info:1000" ...

    通過查看慢日志,我們就可以知道在什么時間點,執行了哪些命令比較耗時。

    如果你的應用程序執行的 Redis 命令有以下特點,那么有可能會導致操作延遲變大:

  • 經常使用 O(N) 以上復雜度的命令,例如 SORT、SUNION、ZUNIONSTORE 聚合類命令

  • 使用 O(N) 復雜度的命令,但 N 的值非常大

  • 第一種情況導致變慢的原因在于,Redis 在操作內存數據時,時間復雜度過高,要花費更多的 CPU 資源。

    第二種情況導致變慢的原因在于,Redis 一次需要返回給客戶端的數據過多,更多時間花費在數據協議的組裝和網絡傳輸過程中。

    另外,我們還可以從資源使用率層面來分析,如果你的應用程序操作 Redis 的 OPS 不是很大,但 Redis 實例的 CPU 使用率卻很高,那么很有可能是使用了復雜度過高的命令導致的。

    除此之外,我們都知道,Redis 是單線程處理客戶端請求的,如果你經常使用以上命令,那么當 Redis 處理客戶端請求時,一旦前面某個命令發生耗時,就會導致后面的請求發生排隊,對于客戶端來說,響應延遲也會變長。

    針對這種情況如何解決呢?

    答案很簡單,你可以使用以下方法優化你的業務:

  • 盡量不使用 O(N) 以上復雜度過高的命令,對于數據的聚合操作,放在客戶端做

  • 執行 O(N) 命令,保證 N 盡量的小(推薦 N <= 300),每次獲取盡量少的數據,讓 Redis 可以及時處理返回

  • 操作bigkey

    如果你查詢慢日志發現,并不是復雜度過高的命令導致的,而都是 SET / DEL 這種簡單命令出現在慢日志中,那么你就要懷疑你的實例否寫入了 bigkey。

    Redis 在寫入數據時,需要為新的數據分配內存,相對應的,當從 Redis 中刪除數據時,它會釋放對應的內存空間。

    如果一個 key 寫入的 value 非常大,那么 Redis 在分配內存時就會比較耗時。同樣的,當刪除這個 key 時,釋放內存也會比較耗時,這種類型的 key 我們一般稱之為 bigkey。

    此時,你需要檢查你的業務代碼,是否存在寫入 bigkey 的情況。你需要評估寫入一個 key 的數據大小,盡量避免一個 key 存入過大的數據。

    如果已經寫入了 bigkey,那有沒有什么辦法可以掃描出實例中 bigkey 的分布情況呢?

    答案是可以的。

    Redis 提供了掃描 bigkey 的命令,執行以下命令就可以掃描出,一個實例中 bigkey 的分布情況,輸出結果是以類型維度展示的:

    $?redis-cli?-h?127.0.0.1?-p?6379?--bigkeys?-i?0.01... --------?summary?-------Sampled?829675?keys?in?the?keyspace! Total?key?length?in?bytes?is?10059825?(avg?len?12.13)Biggest?string?found?'key:291880'?has?10?bytes Biggest???list?found?'mylist:004'?has?40?items Biggest????set?found?'myset:2386'?has?38?members Biggest???hash?found?'myhash:3574'?has?37?fields Biggest???zset?found?'myzset:2704'?has?42?members36313?strings?with?363130?bytes?(04.38%?of?keys,?avg?size?10.00) 787393?lists?with?896540?items?(94.90%?of?keys,?avg?size?1.14) 1994?sets?with?40052?members?(00.24%?of?keys,?avg?size?20.09) 1990?hashs?with?39632?fields?(00.24%?of?keys,?avg?size?19.92) 1985?zsets?with?39750?members?(00.24%?of?keys,?avg?size?20.03)

    從輸出結果我們可以很清晰地看到,每種數據類型所占用的最大內存 / 擁有最多元素的 key 是哪一個,以及每種數據類型在整個實例中的占比和平均大小 / 元素數量。

    其實,使用這個命令的原理,就是 Redis 在內部執行了 SCAN 命令,遍歷整個實例中所有的 key,然后針對 key 的類型,分別執行 STRLEN、LLEN、HLEN、SCARD、ZCARD 命令,來獲取 String 類型的長度、容器類型(List、Hash、Set、ZSet)的元素個數。

    這里我需要提醒你的是,當執行這個命令時,要注意 2 個問題:

  • 對線上實例進行 bigkey 掃描時,Redis 的 OPS 會突增,為了降低掃描過程中對 Redis 的影響,最好控制一下掃描的頻率,指定 -i 參數即可,它表示掃描過程中每次掃描后休息的時間間隔,單位是秒

  • 掃描結果中,對于容器類型(List、Hash、Set、ZSet)的 key,只能掃描出元素最多的 key。但一個 key 的元素多,不一定表示占用內存也多,你還需要根據業務情況,進一步評估內存占用情況

  • 那針對 bigkey 導致延遲的問題,有什么好的解決方案呢?

    這里有兩點可以優化:

  • 業務應用盡量避免寫入 bigkey

  • 如果你使用的 Redis 是 4.0 以上版本,用 UNLINK 命令替代 DEL,此命令可以把釋放 key 內存的操作,放到后臺線程中去執行,從而降低對 Redis 的影響

  • 如果你使用的 Redis 是 6.0 以上版本,可以開啟 lazy-free 機制(lazyfree-lazy-user-del = yes),在執行 DEL 命令時,釋放內存也會放到后臺線程中執行

  • 但即便可以使用方案 2,我也不建議你在實例中存入 bigkey。

    這是因為 bigkey 在很多場景下,依舊會產生性能問題。例如,bigkey 在分片集群模式下,對于數據的遷移也會有性能影響,以及我后面即將講到的數據過期、數據淘汰、透明大頁,都會受到 bigkey 的影響。

    集中過期

    如果你發現,平時在操作 Redis 時,并沒有延遲很大的情況發生,但在某個時間點突然出現一波延時,其現象表現為:變慢的時間點很有規律,例如某個整點,或者每間隔多久就會發生一波延遲。

    如果是出現這種情況,那么你需要排查一下,業務代碼中是否存在設置大量 key 集中過期的情況。

    如果有大量的 key 在某個固定時間點集中過期,在這個時間點訪問 Redis 時,就有可能導致延時變大。

    為什么集中過期會導致 Redis 延遲變大?

    這就需要我們了解 Redis 的過期策略是怎樣的。

    Redis 的過期數據采用被動過期 + 主動過期兩種策略:

  • 被動過期:只有當訪問某個 key 時,才判斷這個 key 是否已過期,如果已過期,則從實例中刪除

  • 主動過期:Redis 內部維護了一個定時任務,默認每隔 100 毫秒(1秒10次)就會從全局的過期哈希表中隨機取出 20 個 key,然后刪除其中過期的 key,如果過期 key 的比例超過了 25%,則繼續重復此過程,直到過期 key 的比例下降到 25% 以下,或者這次任務的執行耗時超過了 25 毫秒,才會退出循環

  • 注意,這個主動過期 key 的定時任務,是在 Redis 主線程中執行的。

    也就是說如果在執行主動過期的過程中,出現了需要大量刪除過期 key 的情況,那么此時應用程序在訪問 Redis 時,必須要等待這個過期任務執行結束,Redis 才可以服務這個客戶端請求。

    此時就會出現,應用訪問 Redis 延時變大。

    如果此時需要過期刪除的是一個 bigkey,那么這個耗時會更久。而且,這個操作延遲的命令并不會記錄在慢日志中。

    因為慢日志中只記錄一個命令真正操作內存數據的耗時,而 Redis 主動刪除過期 key 的邏輯,是在命令真正執行之前執行的。

    所以,此時你會看到,慢日志中沒有操作耗時的命令,但我們的應用程序卻感知到了延遲變大,其實時間都花費在了刪除過期 key 上,這種情況我們需要尤為注意。

    那遇到這種情況,如何分析和排查?

    此時,你需要檢查你的業務代碼,是否存在集中過期 key 的邏輯。

    一般集中過期使用的是 expireat / pexpireat 命令,你需要在代碼中搜索這個關鍵字。

    排查代碼后,如果確實存在集中過期 key 的邏輯存在,但這種邏輯又是業務所必須的,那此時如何優化,同時又不對 Redis 有性能影響呢?

    一般有兩種方案來規避這個問題:

  • 集中過期 key 增加一個隨機過期時間,把集中過期的時間打散,降低 Redis 清理過期 key 的壓力

  • 如果你使用的 Redis 是 4.0 以上版本,可以開啟 lazy-free 機制,當刪除過期 key 時,把釋放內存的操作放到后臺線程中執行,避免阻塞主線程

  • 第一種方案,在設置 key 的過期時間時,增加一個隨機時間,偽代碼可以這么寫:

    #?在過期時間點之后的?5?分鐘內隨機過期掉 redis.expireat(key,?expire_time?+?random(300))

    這樣一來,Redis 在處理過期時,不會因為集中刪除過多的 key 導致壓力過大,從而避免阻塞主線程。

    第二種方案,Redis 4.0 以上版本,開啟 lazy-free 機制:

    #?釋放過期?key?的內存,放到后臺線程執行 lazyfree-lazy-expire?yes

    另外,除了業務層面的優化和修改配置之外,你還可以通過運維手段及時發現這種情況。

    運維層面,你需要把 Redis 的各項運行狀態數據監控起來,在 Redis 上執行 INFO 命令就可以拿到這個實例所有的運行狀態數據。

    在這里我們需要重點關注 expired_keys 這一項,它代表整個實例到目前為止,累計刪除過期 key 的數量。

    你需要把這個指標監控起來,當這個指標在很短時間內出現了突增,需要及時報警出來,然后與業務應用報慢的時間點進行對比分析,確認時間是否一致,如果一致,則可以確認確實是因為集中過期 key 導致的延遲變大。

    實例內存達到上限

    如果你的 Redis 實例設置了內存上限 maxmemory,那么也有可能導致 Redis 變慢。

    當我們把 Redis 當做純緩存使用時,通常會給這個實例設置一個內存上限 maxmemory,然后設置一個數據淘汰策略。

    而當實例的內存達到了 maxmemory 后,你可能會發現,在此之后每次寫入新數據,操作延遲變大了。

    這是為什么?

    原因在于,當 Redis 內存達到 maxmemory 后,每次寫入新的數據之前,Redis 必須先從實例中踢出一部分數據,讓整個實例的內存維持在 maxmemory 之下,然后才能把新數據寫進來。

    這個踢出舊數據的邏輯也是需要消耗時間的,而具體耗時的長短,要取決于你配置的淘汰策略:

    • allkeys-lru:不管 key 是否設置了過期,淘汰最近最少訪問的 key

    • volatile-lru:只淘汰最近最少訪問、并設置了過期時間的 key

    • allkeys-random:不管 key 是否設置了過期,隨機淘汰 key

    • volatile-random:只隨機淘汰設置了過期時間的 key

    • allkeys-ttl:不管 key 是否設置了過期,淘汰即將過期的 key

    • noeviction:不淘汰任何 key,實例內存達到 maxmeory 后,再寫入新數據直接返回錯誤

    • allkeys-lfu:不管 key 是否設置了過期,淘汰訪問頻率最低的 key(4.0+版本支持)

    • volatile-lfu:只淘汰訪問頻率最低、并設置了過期時間 key(4.0+版本支持)

    具體使用哪種策略,我們需要根據具體的業務場景來配置。

    一般最常使用的是 allkeys-lru / volatile-lru 淘汰策略,它們的處理邏輯是,每次從實例中隨機取出一批 key(這個數量可配置),然后淘汰一個最少訪問的 key,之后把剩下的 key 暫存到一個池子中,繼續隨機取一批 key,并與之前池子中的 key 比較,再淘汰一個最少訪問的 key。以此往復,直到實例內存降到 maxmemory 之下。

    需要注意的是,Redis 的淘汰數據的邏輯與刪除過期 key 的一樣,也是在命令真正執行之前執行的,也就是說它也會增加我們操作 Redis 的延遲,而且,寫 OPS 越高,延遲也會越明顯。

    另外,如果此時你的 Redis 實例中還存儲了 bigkey,那么在淘汰刪除 bigkey 釋放內存時,也會耗時比較久

    看到了么?bigkey 的危害到處都是,這也是前面我提醒你盡量不存儲 bigkey 的原因。

    針對這種情況,如何解決呢?

    我給你 4 個方面的優化建議:

  • 避免存儲 bigkey,降低釋放內存的耗時

  • 淘汰策略改為隨機淘汰,隨機淘汰比 LRU 要快很多(視業務情況調整)

  • 拆分實例,把淘汰 key 的壓力分攤到多個實例上

  • 如果使用的是 Redis 4.0 以上版本,開啟 layz-free 機制,把淘汰 key 釋放內存的操作放到后臺線程中執行(配置 lazyfree-lazy-eviction = yes)

  • fork耗時嚴重

    為了保證 Redis 數據的安全性,我們可能會開啟后臺定時 RDB 和 AOF rewrite 功能。

    但如果你發現,操作 Redis 延遲變大,都發生在 Redis 后臺 RDB 和 AOF rewrite 期間,那你就需要排查,在這期間有可能導致變慢的情況。

    當 Redis 開啟了后臺 RDB 和 AOF rewrite 后,在執行時,它們都需要主進程創建出一個子進程進行數據的持久化。

    主進程創建子進程,會調用操作系統提供的 fork 函數。

    而 fork 在執行過程中,主進程需要拷貝自己的內存頁表給子進程,如果這個實例很大,那么這個拷貝的過程也會比較耗時。

    而且這個 fork 過程會消耗大量的 CPU 資源,在完成 fork 之前,整個 Redis 實例會被阻塞住,無法處理任何客戶端請求。

    如果此時你的 CPU 資源本來就很緊張,那么 fork 的耗時會更長,甚至達到秒級,這會嚴重影響 Redis 的性能。

    那如何確認確實是因為 fork 耗時導致的 Redis 延遲變大呢?

    你可以在 Redis 上執行 INFO 命令,查看 latest_fork_usec 項,單位微秒。

    #?上一次?fork?耗時,單位微秒 latest_fork_usec:59477

    這個時間就是主進程在 fork 子進程期間,整個實例阻塞無法處理客戶端請求的時間。

    如果你發現這個耗時很久,就要警惕起來了,這意味在這期間,你的整個 Redis 實例都處于不可用的狀態。

    除了數據持久化會生成 RDB 之外,當主從節點第一次建立數據同步時,主節點也創建子進程生成 RDB,然后發給從節點進行一次全量同步,所以,這個過程也會對 Redis 產生性能影響。

    要想避免這種情況,你可以采取以下方案進行優化:

  • 控制 Redis 實例的內存:盡量在 10G 以下,執行 fork 的耗時與實例大小有關,實例越大,耗時越久

  • 合理配置數據持久化策略:在 slave 節點執行 RDB 備份,推薦在低峰期執行,而對于丟失數據不敏感的業務(例如把 Redis 當做純緩存使用),可以關閉 AOF 和 AOF rewrite

  • Redis 實例不要部署在虛擬機上:fork 的耗時也與系統也有關,虛擬機比物理機耗時更久

  • 降低主從庫全量同步的概率:適當調大 repl-backlog-size 參數,避免主從全量同步

  • 開啟內存大頁

    除了上面講到的子進程 RDB 和 AOF rewrite 期間,fork 耗時導致的延時變大之外,這里還有一個方面也會導致性能問題,這就是操作系統是否開啟了內存大頁機制

    什么是內存大頁?

    我們都知道,應用程序向操作系統申請內存時,是按內存頁進行申請的,而常規的內存頁大小是 4KB。

    Linux 內核從 2.6.38 開始,支持了內存大頁機制,該機制允許應用程序以 2MB 大小為單位,向操作系統申請內存。

    應用程序每次向操作系統申請的內存單位變大了,但這也意味著申請內存的耗時變長。

    這對 Redis 會有什么影響呢?

    當 Redis 在執行后臺 RDB 和 AOF rewrite 時,采用 fork 子進程的方式來處理。但主進程 fork 子進程后,此時的主進程依舊是可以接收寫請求的,而進來的寫請求,會采用 Copy On Write(寫時復制)的方式操作內存數據。

    也就是說,主進程一旦有數據需要修改,Redis 并不會直接修改現有內存中的數據,而是先將這塊內存數據拷貝出來,再修改這塊新內存的數據,這就是所謂的「寫時復制」。

    寫時復制你也可以理解成,誰需要發生寫操作,誰就需要先拷貝,再修改。

    這樣做的好處是,父進程有任何寫操作,并不會影響子進程的數據持久化(子進程只持久化 fork 這一瞬間整個實例中的所有數據即可,不關心新的數據變更,因為子進程只需要一份內存快照,然后持久化到磁盤上)。

    但是請注意,主進程在拷貝內存數據時,這個階段就涉及到新內存的申請,如果此時操作系統開啟了內存大頁,那么在此期間,客戶端即便只修改 10B 的數據,Redis 在申請內存時也會以 2MB 為單位向操作系統申請,申請內存的耗時變長,進而導致每個寫請求的延遲增加,影響到 Redis 性能。

    同樣地,如果這個寫請求操作的是一個 bigkey,那主進程在拷貝這個 bigkey 內存塊時,一次申請的內存會更大,時間也會更久??梢?#xff0c;bigkey 在這里又一次影響到了性能。

    那如何解決這個問題?

    很簡單,你只需要關閉內存大頁機制就可以了。

    首先,你需要查看 Redis 機器是否開啟了內存大頁:

    $?cat?/sys/kernel/mm/transparent_hugepage/enabled [always]?madvise?never

    如果輸出選項是 always,就表示目前開啟了內存大頁機制,我們需要關掉它:

    $?echo?never?>?/sys/kernel/mm/transparent_hugepage/enabled

    其實,操作系統提供的內存大頁機制,其優勢是,可以在一定程序上降低應用程序申請內存的次數。

    但是對于 Redis 這種對性能和延遲極其敏感的數據庫來說,我們希望 Redis 在每次申請內存時,耗時盡量短,所以我不建議你在 Redis 機器上開啟這個機制。

    開啟AOF

    前面我們分析了 RDB 和 AOF rewrite 對 Redis 性能的影響,主要關注點在 fork 上。

    其實,關于數據持久化方面,還有影響 Redis 性能的因素,這次我們重點來看 AOF 數據持久化。

    如果你的 AOF 配置不合理,還是有可能會導致性能問題。

    當 Redis 開啟 AOF 后,其工作原理如下:

  • Redis 執行寫命令后,把這個命令寫入到 AOF 文件內存中(write 系統調用)

  • Redis 根據配置的 AOF 刷盤策略,把 AOF 內存數據刷到磁盤上(fsync 系統調用)

  • 為了保證 AOF 文件數據的安全性,Redis 提供了 3 種刷盤機制:

  • appendfsync always:主線程每次執行寫操作后立即刷盤,此方案會占用比較大的磁盤 IO 資源,但數據安全性最高

  • appendfsync no:主線程每次寫操作只寫內存就返回,內存數據什么時候刷到磁盤,交由操作系統決定,此方案對性能影響最小,但數據安全性也最低,Redis 宕機時丟失的數據取決于操作系統刷盤時機

  • appendfsync everysec:主線程每次寫操作只寫內存就返回,然后由后臺線程每隔 1 秒執行一次刷盤操作(觸發fsync系統調用),此方案對性能影響相對較小,但當 Redis 宕機時會丟失 1 秒的數據

  • 下面我們依次來分析,這幾個機制對性能的影響。

    如果你的 AOF 配置為 appendfsync always,那么 Redis 每處理一次寫操作,都會把這個命令寫入到磁盤中才返回,整個過程都是在主線程執行的,這個過程必然會加重 Redis 寫負擔。

    原因也很簡單,操作磁盤要比操作內存慢幾百倍,采用這個配置會嚴重拖慢 Redis 的性能,因此我不建議你把 AOF 刷盤方式配置為 always。

    我們接著來看 appendfsync no 配置項。

    在這種配置下,Redis 每次寫操作只寫內存,什么時候把內存中的數據刷到磁盤,交給操作系統決定,此方案對 Redis 的性能影響最小,但當 Redis 宕機時,會丟失一部分數據,為了數據的安全性,一般我們也不采取這種配置。

    如果你的 Redis 只用作純緩存,對于數據丟失不敏感,采用配置 appendfsync no 也是可以的。

    看到這里,我猜你肯定和大多數人的想法一樣,選比較折中的方案 appendfsync everysec 就沒問題了吧?

    這個方案優勢在于,Redis 主線程寫完內存后就返回,具體的刷盤操作是放到后臺線程中執行的,后臺線程每隔 1 秒把內存中的數據刷到磁盤中。

    這種方案既兼顧了性能,又盡可能地保證了數據安全,是不是覺得很完美?

    但是,這里我要給你潑一盆冷水了,采用這種方案你也要警惕一下,因為這種方案還是存在導致 Redis 延遲變大的情況發生,甚至會阻塞整個 Redis。

    這是為什么?我把 AOF 最耗時的刷盤操作,放到后臺線程中也會影響到 Redis 主線程?

    你試想這樣一種情況:當 Redis 后臺線程在執行 AOF 文件刷盤時,如果此時磁盤的 IO 負載很高,那這個后臺線程在執行刷盤操作(fsync系統調用)時就會被阻塞住。

    此時的主線程依舊會接收寫請求,緊接著,主線程又需要把數據寫到文件內存中(write 系統調用),但此時的后臺子線程由于磁盤負載過高,導致 fsync 發生阻塞,遲遲不能返回,那主線程在執行 write 系統調用時,也會被阻塞住,直到后臺線程 fsync 執行完成后,主線程執行 write 才能成功返回。

    看到了么?在這個過程中,主線程依舊有阻塞的風險。

    所以,盡管你的 AOF 配置為 appendfsync everysec,也不能掉以輕心,要警惕磁盤壓力過大導致的 Redis 有性能問題。

    那什么情況下會導致磁盤 IO 負載過大?以及如何解決這個問題呢?

    我總結了以下幾種情況,你可以參考進行問題排查:

  • 子進程正在執行 AOF rewrite,這個過程會占用大量的磁盤 IO 資源

  • 有其他應用程序在執行大量的寫文件操作,也會占用磁盤 IO 資源

  • 對于情況1,說白了就是,Redis 的 AOF 后臺子線程刷盤操作,撞上了子進程 AOF rewrite!

    這怎么辦?難道要關閉 AOF rewrite 才行?

    幸運的是,Redis 提供了一個配置項,當子進程在 AOF rewrite 期間,可以讓后臺子線程不執行刷盤(不觸發 fsync 系統調用)操作。

    這相當于在 AOF rewrite 期間,臨時把 appendfsync 設置為了 none,配置如下:

    #?AOF?rewrite?期間,AOF?后臺子線程不進行刷盤操作 #?相當于在這期間,臨時把?appendfsync?設置為了?none no-appendfsync-on-rewrite?yes

    當然,開啟這個配置項,在 AOF rewrite 期間,如果實例發生宕機,那么此時會丟失更多的數據,性能和數據安全性,你需要權衡后進行選擇。

    如果占用磁盤資源的是其他應用程序,那就比較簡單了,你需要定位到是哪個應用程序在大量寫磁盤,然后把這個應用程序遷移到其他機器上執行就好了,避免對 Redis 產生影響。

    當然,如果你對 Redis 的性能和數據安全都有很高的要求,那么我建議從硬件層面來優化,更換為 SSD 磁盤,提高磁盤的 IO 能力,保證 AOF 期間有充足的磁盤資源可以使用。

    綁定CPU

    很多時候,我們在部署服務時,為了提高服務性能,降低應用程序在多個 CPU 核心之間的上下文切換帶來的性能損耗,通常采用的方案是進程綁定 CPU 的方式提高性能。

    但在部署 Redis 時,如果你需要綁定 CPU 來提高其性能,我建議你仔細斟酌后再做操作。

    為什么?

    因為 Redis 在綁定 CPU 時,是有很多考究的,如果你不了解 Redis 的運行原理,隨意綁定 CPU 不僅不會提高性能,甚至有可能會帶來相反的效果。

    我們都知道,一般現代的服務器會有多個 CPU,而每個 CPU 又包含多個物理核心,每個物理核心又分為多個邏輯核心,每個物理核下的邏輯核共用 L1/L2 Cache。

    而 Redis Server 除了主線程服務客戶端請求之外,還會創建子進程、子線程。

    其中子進程用于數據持久化,而子線程用于執行一些比較耗時操作,例如異步釋放 fd、異步 AOF 刷盤、異步 lazy-free 等等。

    如果你把 Redis 進程只綁定了一個 CPU 邏輯核心上,那么當 Redis 在進行數據持久化時,fork 出的子進程會繼承父進程的 CPU 使用偏好。

    而此時的子進程會消耗大量的 CPU 資源進行數據持久化(把實例數據全部掃描出來需要耗費CPU),這就會導致子進程會與主進程發生 CPU 爭搶,進而影響到主進程服務客戶端請求,訪問延遲變大。

    這就是 Redis 綁定 CPU 帶來的性能問題。

    那如何解決這個問題呢?

    如果你確實想要綁定 CPU,可以優化的方案是,不要讓 Redis 進程只綁定在一個 CPU 邏輯核上,而是綁定在多個邏輯核心上,而且,綁定的多個邏輯核心最好是同一個物理核心,這樣它們還可以共用 L1/L2 Cache。

    當然,即便我們把 Redis 綁定在多個邏輯核心上,也只能在一定程度上緩解主線程、子進程、后臺線程在 CPU 資源上的競爭。

    因為這些子進程、子線程還是會在這多個邏輯核心上進行切換,存在性能損耗。

    如何再進一步優化?

    可能你已經想到了,我們是否可以讓主線程、子進程、后臺線程,分別綁定在固定的 CPU 核心上,不讓它們來回切換,這樣一來,他們各自使用的 CPU 資源互不影響。

    其實,這個方案 Redis 官方已經想到了。

    Redis 在 6.0 版本已經推出了這個功能,我們可以通過以下配置,對主線程、后臺線程、后臺 RDB 進程、AOF rewrite 進程,綁定固定的 CPU 邏輯核心:

    #?Redis?Server?和?IO?線程綁定到?CPU核心?0,2,4,6 server_cpulist?0-7:2#?后臺子線程綁定到?CPU核心?1,3 bio_cpulist?1,3#?后臺?AOF?rewrite?進程綁定到?CPU?核心?8,9,10,11 aof_rewrite_cpulist?8-11#?后臺?RDB?進程綁定到?CPU?核心?1,10,11 #?bgsave_cpulist?1,10-1

    如果你使用的正好是 Redis 6.0 版本,就可以通過以上配置,來進一步提高 Redis 性能。

    這里我需要提醒你的是,一般來說,Redis 的性能已經足夠優秀,除非你對 Redis 的性能有更加嚴苛的要求,否則不建議你綁定 CPU。

    從上面的分析你也能看出,綁定 CPU 需要你對計算機體系結構有非常清晰的了解,否則謹慎操作。

    我們繼續分析還有什么場景會導致 Redis 變慢。

    使用Swap

    如果你發現 Redis 突然變得非常慢,每次的操作耗時都達到了幾百毫秒甚至秒級,那此時你就需要檢查 Redis 是否使用到了 Swap,在這種情況下 Redis 基本上已經無法提供高性能的服務了。

    什么是 Swap?為什么使用 Swap 會導致 Redis 的性能下降?

    如果你對操作系統有些了解,就會知道操作系統為了緩解內存不足對應用程序的影響,允許把一部分內存中的數據換到磁盤上,以達到應用程序對內存使用的緩沖,這些內存數據被換到磁盤上的區域,就是 Swap。

    問題就在于,當內存中的數據被換到磁盤上后,Redis 再訪問這些數據時,就需要從磁盤上讀取,訪問磁盤的速度要比訪問內存慢幾百倍!

    尤其是針對 Redis 這種對性能要求極高、性能極其敏感的數據庫來說,這個操作延時是無法接受的。

    此時,你需要檢查 Redis 機器的內存使用情況,確認是否存在使用了 Swap。

    你可以通過以下方式來查看 Redis 進程是否使用到了 Swap:

    #?先找到?Redis?的進程?ID $?ps?-aux?|?grep?redis-server#?查看?Redis?Swap?使用情況 $?cat?/proc/$pid/smaps?|?egrep?'^(Swap|Size)'

    輸出結果如下:

    Size:???????????????1256?kB Swap:??????????????????0?kB Size:??????????????????4?kB Swap:??????????????????0?kB Size:????????????????132?kB Swap:??????????????????0?kB Size:??????????????63488?kB Swap:??????????????????0?kB Size:????????????????132?kB Swap:??????????????????0?kB Size:??????????????65404?kB Swap:??????????????????0?kB Size:????????????1921024?kB Swap:??????????????????0?kB ...

    這個結果會列出 Redis 進程的內存使用情況。

    每一行 Size 表示 Redis 所用的一塊內存大小,Size 下面的 Swap 就表示這塊 Size 大小的內存,有多少數據已經被換到磁盤上了,如果這兩個值相等,說明這塊內存的數據都已經完全被換到磁盤上了。

    如果只是少量數據被換到磁盤上,例如每一塊 Swap 占對應 Size 的比例很小,那影響并不是很大。如果是幾百兆甚至上 GB 的內存被換到了磁盤上,那么你就需要警惕了,這種情況 Redis 的性能肯定會急劇下降。

    此時的解決方案是:

  • 增加機器的內存,讓 Redis 有足夠的內存可以使用

  • 整理內存空間,釋放出足夠的內存供 Redis 使用,然后釋放 Redis 的 Swap,讓 Redis 重新使用內存

  • 釋放 Redis 的 Swap 過程通常要重啟實例,為了避免重啟實例對業務的影響,一般會先進行主從切換,然后釋放舊主節點的 Swap,重啟舊主節點實例,待從庫數據同步完成后,再進行主從切換即可。

    可見,當 Redis 使用到 Swap 后,此時的 Redis 性能基本已達不到高性能的要求(你可以理解為武功被廢),所以你也需要提前預防這種情況。

    預防的辦法就是,你需要對 Redis 機器的內存和 Swap 使用情況進行監控,在內存不足或使用到 Swap 時報警出來,及時處理。

    碎片整理

    Redis 的數據都存儲在內存中,當我們的應用程序頻繁修改 Redis 中的數據時,就有可能會導致 Redis 產生內存碎片。

    內存碎片會降低 Redis 的內存使用率,我們可以通過執行 INFO 命令,得到這個實例的內存碎片率:

    #?Memory used_memory:5709194824 used_memory_human:5.32G used_memory_rss:8264855552 used_memory_rss_human:7.70G ... mem_fragmentation_ratio:1.45

    這個內存碎片率是怎么計算的?

    很簡單,mem_fragmentation_ratio = used_memory_rss / used_memory。

    其中 used_memory 表示 Redis 存儲數據的內存大小,而 used_memory_rss 表示操作系統實際分配給 Redis 進程的大小。

    如果 mem_fragmentation_ratio > 1.5,說明內存碎片率已經超過了 50%,這時我們就需要采取一些措施來降低內存碎片了。

    解決的方案一般如下:

  • 如果你使用的是 Redis 4.0 以下版本,只能通過重啟實例來解決

  • 如果你使用的是 Redis 4.0 版本,它正好提供了自動碎片整理的功能,可以通過配置開啟碎片自動整理

  • 但是,開啟內存碎片整理,它也有可能會導致 Redis 性能下降。

    原因在于,Redis 的碎片整理工作是也在主線程中執行的,當其進行碎片整理時,必然會消耗 CPU 資源,產生更多的耗時,從而影響到客戶端的請求。

    所以,當你需要開啟這個功能時,最好提前測試評估它對 Redis 的影響。

    Redis 碎片整理的參數配置如下:

    #?開啟自動內存碎片整理(總開關) activedefrag?yes#?內存使用?100MB?以下,不進行碎片整理 active-defrag-ignore-bytes?100mb#?內存碎片率超過?10%,開始碎片整理 active-defrag-threshold-lower?10 #?內存碎片率超過?100%,盡最大努力碎片整理 active-defrag-threshold-upper?100#?內存碎片整理占用?CPU?資源最小百分比 active-defrag-cycle-min?1 #?內存碎片整理占用?CPU?資源最大百分比 active-defrag-cycle-max?25#?碎片整理期間,對于?List/Set/Hash/ZSet?類型元素一次?Scan?的數量 active-defrag-max-scan-fields?1000

    你需要結合 Redis 機器的負載情況,以及應用程序可接受的延遲范圍進行評估,合理調整碎片整理的參數,盡可能降低碎片整理期間對 Redis 的影響。

    網絡帶寬過載

    如果以上產生性能問題的場景,你都規避掉了,而且 Redis 也穩定運行了很長時間,但在某個時間點之后開始,操作 Redis 突然開始變慢了,而且一直持續下去,這種情況又是什么原因導致?

    此時你需要排查一下 Redis 機器的網絡帶寬是否過載,是否存在某個實例把整個機器的網路帶寬占滿的情況。

    網絡帶寬過載的情況下,服務器在 TCP 層和網絡層就會出現數據包發送延遲、丟包等情況。

    Redis 的高性能,除了操作內存之外,就在于網絡 IO 了,如果網絡 IO 存在瓶頸,那么也會嚴重影響 Redis 的性能。

    如果確實出現這種情況,你需要及時確認占滿網絡帶寬 Redis 實例,如果屬于正常的業務訪問,那就需要及時擴容或遷移實例了,避免因為這個實例流量過大,影響這個機器的其他實例。

    運維層面,你需要對 Redis 機器的各項指標增加監控,包括網絡流量,在網絡流量達到一定閾值時提前報警,及時確認和擴容。

    其他原因

    好了,以上這些方面就是如何排查 Redis 延遲問題的思路和路徑。

    除了以上這些,還有一些比較小的點,你也需要注意一下:

    1) 頻繁短連接

    你的業務應用,應該使用長連接操作 Redis,避免頻繁的短連接。

    頻繁的短連接會導致 Redis 大量時間耗費在連接的建立和釋放上,TCP 的三次握手和四次揮手同樣也會增加訪問延遲。

    2) 運維監控

    前面我也提到了,要想提前預知 Redis 變慢的情況發生,必不可少的就是做好完善的監控。

    監控其實就是對采集 Redis 的各項運行時指標,通常的做法是監控程序定時采集 Redis 的 INFO 信息,然后根據 INFO 信息中的狀態數據做數據展示和報警。

    這里我需要提醒你的是,在寫一些監控腳本,或使用開源的監控組件時,也不能掉以輕心。

    在寫監控腳本訪問 Redis 時,盡量采用長連接的方式采集狀態信息,避免頻繁短連接。同時,你還要注意控制訪問 Redis 的頻率,避免影響到業務請求。

    在使用一些開源的監控組件時,最好了解一下這些組件的實現原理,以及正確配置這些組件,防止出現監控組件發生 Bug,導致短時大量操作 Redis,影響 Redis 性能的情況發生。

    我們當時就發生過,DBA 在使用一些開源組件時,因為配置和使用問題,導致監控程序頻繁地與 Redis 建立和斷開連接,導致 Redis 響應變慢。

    3)其它程序爭搶資源

    最后需要提醒你的是,你的 Redis 機器最好專項專用,只用來部署 Redis 實例,不要部署其他應用程序,盡量給 Redis 提供一個相對「安靜」的環境,避免其它程序占用 CPU、內存、磁盤資源,導致分配給 Redis 的資源不足而受到影響。

    總結

    好了,以上就是我總結的在使用 Redis 過程中,常見的可能導致延遲、甚至阻塞的問題場景,以及如何快速定位和分析這些問題,并且針對性地提供了解決方案。

    這里我也匯總成了思維導圖,方便你在排查 Redis 性能問題時,快速地去分析和定位。

    這里再簡單總結一下,Redis 的性能問題,既涉及到了業務開發人員的使用方面,也涉及到了 DBA 的運維方面。

    作為業務開發人員,我們需要了解 Redis 的基本原理,例如各個命令執行的時間復雜度、數據過期策略、數據淘汰策略等,從而更合理地使用 Redis 命令,并且結合業務場景進行優化。

    作為 DBA 和運維人員,需要了解 Redis 運行機制,例如數據持久化、內存碎片整理、進程綁核配置。除此之外,還需要了解操作系統相關知識,例如寫時復制、內存大頁、Swap 機制等等。

    同時,DBA 在部署 Redis 時,需要提前對進行容量規劃,預留足夠的機器資源,還要對 Redis 機器和實例做好完善的監控,這樣才能盡可能地保證 Redis 的穩定運行。

    后記

    如果你能耐心地看到這里,想必你肯定已經對 Redis 的性能調優有了很大的收獲。

    你應該也發現了,Redis 的性能問題,涉及到的知識點非常廣,幾乎涵蓋了 CPU、內存、網絡、甚至磁盤的方方面面,同時,你還需要了解計算機的體系結構,以及操作系統的各種機制。

    從資源使用角度來看,包含的知識點如下:

    • CPU 相關:使用復雜度過高命令、數據的持久化,都與耗費過多的 CPU 資源有關

    • 內存相關:bigkey 內存的申請和釋放、數據過期、數據淘汰、碎片整理、內存大頁、內存寫時復制都與內存息息相關

    • 磁盤相關:數據持久化、AOF 刷盤策略,也會受到磁盤的影響

    • 網絡相關:短連接、實例流量過載、網絡流量過載,也會降低 Redis 性能

    • 計算機系統:CPU 結構、內存分配,都屬于最基礎的計算機系統知識

    • 操作系統:寫時復制、內存大頁、Swap、CPU 綁定,都屬于操作系統層面的知識

    沒想到吧?Redis 為了把性能做到極致,涉及到了這么多項優化。

    如果這篇文章內容,你能吸收 90% 以上,說明你對 Redis 原理、計算機基礎、操作系統都已經有了較為深刻的理解。

    如果你能吸收 50% 左右,那你可以好好梳理一下,哪些方面是自己的知識盲區,這樣可以針對性地去學習。

    如果你吸收的只在 30% 以下,那么你可以先從 Redis 的基本原理出發,先了解 Redis 的各種機制,進而思考 Redis 為了提高性能,為什么使用這些機制?這些機制又是利用了計算機和操作系統的哪些特性去做的?進而一步步地去擴充你的知識體系,這是一個非常高效的學習路徑。

    由于篇幅限制,關于 Redis 的很多細節無法全部展開,其實,這篇文章提到的每一個導致 Redis 性能問題的場景,如果展開來講,都可以寫出一篇文章出來。

    例如,關于 Redis 進程綁定 CPU,以及操作系統使用 Swap,其實這些還涉及到了非一致性內存訪問 NUMA 架構的影響,其中也有很多細節沒有展開來講。

    這篇文章主要站在一個宏觀層面進行性能分析,如果你想了解更多細節,歡迎關注我的公眾號,我會在后續的文章中,帶你深度剖析 Redis 的運行原理,以及產生性能問題的更多細節。

    看到這里,如果你覺得這篇文章對你有所幫助的話,麻煩幫忙點贊、在看、轉發一下,你的支持會激勵我輸出更高質量的文章,非常感謝!

    另外,你可以把我的公眾號設為「星標」,這樣當公眾號文章更新時,你會在第一時間收到推送消息,避免錯過我的文章更新。

    往期推薦

    《大廠內部資料》Redis 性能優化的 13 條軍規!全網首發


    硬核Redis總結,看這篇就夠了!


    Redis的8大數據類型,寫的真好


    關注我,每天陪你進步一點點!

    總結

    以上是生活随笔為你收集整理的Redis为什么变慢了?一文详解Redis性能问题 | 万字长文的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    夜夜操天天干 | 国产麻豆精品一区 | 国产成人精品久久久 | 亚洲视频网站在线观看 | 午夜久久美女 | 国产精品久久久久永久免费 | 香蕉97视频观看在线观看 | 国产一区精品在线 | 亚洲美女精品视频 | 三级在线国产 | 久久精品中文字幕一区二区三区 | 国产色 在线 | 天天操夜夜操天天射 | 天天色图 | 黄色电影小说 | 久视频在线 | 亚洲v精品| 99在线免费观看视频 | 97看片吧| 香蕉在线视频观看 | 久久免费精彩视频 | 在线观看视频一区二区 | 性色av一区二区三区在线观看 | 国产精品av在线免费观看 | 国产中文欧美日韩在线 | 韩日电影在线 | 青春草国产视频 | 国产黄色免费观看 | 国产色黄网站 | 日韩最新在线 | 精品亚洲免a | 91干干干| 亚洲高清视频一区二区三区 | 国产精品成人自产拍在线观看 | 国产精品18毛片一区二区 | 日韩av中文字幕在线 | 91看片在线免费观看 | 国产精品一区二区三区在线播放 | 欧美成年黄网站色视频 | 欧美色图p | 久草在线视频网 | 91香蕉视频黄 | 97超碰人人 | 久久字幕精品一区 | av免费电影在线观看 | 狠狠插狠狠干 | 91av在线免费观看 | 国产免费三级在线观看 | 国产精品久久久久久久久搜平片 | 黄色在线免费观看网站 | 欧美亚洲精品在线观看 | 又爽又黄又无遮挡网站动态图 | 天天操天天色天天 | 色婷婷国产 | 天天躁日日躁狠狠躁 | 美女视频黄在线观看 | 天天玩天天干 | 日本性动态图 | 久久99网| 干av在线 | 开心激情久久 | 久久精品久久99 | 日本黄色免费播放 | 激情综合网五月婷婷 | av中文字幕在线观看网站 | 亚洲一区二区天堂 | 中文字幕 91 | 久久久久高清毛片一级 | 国产精品一区二区av麻豆 | 中文字幕永久 | www久草 | 97色se| 最新国产精品拍自在线播放 | 国产精品6| 国产精品成人免费 | 狠狠色伊人亚洲综合网站色 | 天天艹天天操 | 在线免费试看 | 三级免费黄色 | 成人三级视频 | 在线播放国产精品 | 亚洲欧美日韩不卡 | 91chinesexxx| 欧美日韩国产综合网 | 国产一区二区在线视频观看 | 97在线精品国自产拍中文 | 成人毛片久久 | 色婷婷激情四射 | 欧美日韩免费观看一区=区三区 | 婷婷综合在线 | 国产精品成人品 | 97电影在线看视频 | 亚洲精品videossex少妇 | 国产精品美女久久久久久久久 | 少妇激情久久 | 欧美ⅹxxxxxx | 国产美女搞久久 | 午夜婷婷在线播放 | 日韩久久电影 | 在线观看一区 | 69久久99精品久久久久婷婷 | 久久久久国产成人免费精品免费 | 欧美少妇xxxxxx | 久久久午夜精品福利内容 | 九九涩涩av台湾日本热热 | 色在线中文字幕 | 久久综合丁香 | 中文字幕在线播放第一页 | 婷婷午夜天 | 在线观看中文 | 香蕉影院在线 | 免费看的国产视频网站 | 亚洲人成人天堂h久久 | 天天躁天天操 | 夜夜躁狠狠躁日日躁视频黑人 | 精品国产美女在线 | 国产精品一区二区你懂的 | 久久艹艹| 三级黄在线 | 亚洲影视九九影院在线观看 | 国产中文欧美日韩在线 | 久久久精品综合 | 97超碰人人模人人人爽人人爱 | 国产成人一区二区三区影院在线 | 久久久久麻豆v国产 | 欧美日韩亚洲在线 | 日韩电影中文,亚洲精品乱码 | 日韩两性视频 | 亚洲精品视频网站在线观看 | 美女一区网站 | 91精品国产91 | 日韩欧美网站 | 手机看片国产 | 91精品夜夜 | 国产成人三级三级三级97 | 精品视频久久 | 在线观看视频国产一区 | 国产精品第一页在线观看 | 久久人人爽人人片av | 国产天天爽 | 亚洲综合视频在线 | 天天天综合 | 91中文在线视频 | 国产美女免费观看 | 美女视频a美女大全免费下载蜜臀 | 久久在线免费 | 99精品视频在线播放免费 | 久久综合狠狠综合久久狠狠色综合 | 色中色资源站 | 日韩av黄 | 四虎影视av | 免费久久久| 天天干,天天操,天天射 | 黄色免费电影网站 | 91视频高清免费 | 奇米影视四色8888 | 久草综合在线观看 | 国产片免费在线观看视频 | 天天做天天爱夜夜爽 | 中文字幕色在线 | 精品视频123区在线观看 | 黄色一级大片在线免费看产 | v片在线播放 | 天天爽夜夜爽人人爽曰av | 在线看一区 | 免费观看黄| 国产精品一区二区免费在线观看 | 又黄又刺激的视频 | 国产不卡在线 | 九九综合九九 | 欧美日韩精品在线观看视频 | 国产美女被啪进深处喷白浆视频 | 久草视频免费在线播放 | 亚洲黄色成人av | 欧美二区视频 | 亚洲开心激情 | 日韩中文字幕视频在线 | 亚洲综合色av | 午夜精品999 | 日韩欧美一区二区三区黑寡妇 | 中日韩欧美精彩视频 | 81国产精品久久久久久久久久 | 男女免费av| 欧美性精品 | 成人在线观看av | 国产精品乱码在线 | 欧美日韩高清在线观看 | 91欧美国产| 国产色一区 | 人人澡人人添人人爽一区二区 | a黄色一级片 | 91精品视频免费看 | 97在线观看视频免费 | 国产 字幕 制服 中文 在线 | 91丨九色丨首页 | 国产在线国偷精品产拍 | 色婷婷国产精品一区在线观看 | 五月婷婷六月丁香 | 天天色天天草天天射 | 91免费高清观看 | 国产伦精品一区二区三区高清 | www.com久久久| 国产麻豆剧果冻传媒视频播放量 | 国产亚洲精品成人av久久ww | 在线观看91视频 | 日本在线观看中文字幕无线观看 | 久久视讯 | 欧美老人xxxx18 | 亚洲最新视频在线 | 亚洲日b视频 | 在线视频精品 | 色婷婷狠狠干 | 99国产成+人+综合+亚洲 欧美 | 黄色国产成人 | 人人干天天干 | 狠狠干五月天 | 蜜臀久久99精品久久久酒店新书 | 婷婷精品进入 | 91精品少妇偷拍99 | 九九国产精品视频 | 国产午夜精品久久久久久久久久 | 日韩av有码在线 | 伊人五月婷 | 中文字幕亚洲欧美日韩 | 91最新视频在线观看 | 久久精品视频在线 | 欧美精品在线观看一区 | 亚洲91在线 | 美女精品国产 | 蜜臀av夜夜澡人人爽人人桃色 | 免费av观看 | 在线观看中文字幕网站 | 波多野结衣一区二区 | 久久久久久久久久伊人 | 日韩在线观看中文 | 日韩高清成人 | 久久免费a| 日本高清免费中文字幕 | 九九九热 | 四虎在线免费观看 | 久久久久久久久久影视 | 色婷婷久久久综合中文字幕 | 国产日韩欧美在线播放 | 久久国产精品久久国产精品 | 日韩精品免费在线播放 | 偷拍精偷拍精品欧洲亚洲网站 | 91成人免费 | 日韩福利在线观看 | 五月天激情婷婷 | 香蕉在线观看 | 99精品在线视频播放 | 成人在线免费观看视视频 | 中文字幕高清免费日韩视频在线 | 中文字幕成人av | 亚洲婷婷在线 | 蜜臀av夜夜澡人人爽人人桃色 | 国产原创av片 | 免费在线激情视频 | 狠狠色丁香婷婷综合最新地址 | 国产精品久久久网站 | 久久中文网 | 国产一区在线不卡 | 五月色丁香 | 69亚洲视频 | 激情影音先锋 | 成人91视频 | 亚洲va在线va天堂va偷拍 | 亚洲精品国产精品国 | 综合网色 | 日韩电影在线观看一区二区 | 国产69精品久久久久久 | 人人添人人澡人人澡人人人爽 | 成人黄大片视频在线观看 | 一级黄色在线视频 | 国模视频一区二区三区 | 亚洲女人天堂成人av在线 | 91精品成人 | 国产视频日韩视频欧美视频 | 天天射天天舔天天干 | 99久久精| 婷婷丁香六月 | 97碰碰视频 | 久久艹国产视频 | 免费99精品国产自在在线 | 91传媒在线看| 人人澡超碰碰 | 亚洲综合黄色 | 激情综合五月 | 中文字幕视频网站 | 在线观看亚洲免费视频 | 在线97| 97网在线观看 | 中文字幕一区二 | 日韩大片免费观看 | 亚洲激情综合 | 久久天天躁夜夜躁狠狠85麻豆 | 免费在线观看污 | 波多野结衣资源 | 日韩精品高清视频 | 在线亚洲成人 | 超级碰碰碰免费视频 | 婷婷在线免费观看 | 国产成人精品三级 | 亚洲一区二区三区四区在线视频 | 亚洲国内精品在线 | 91久久奴性调教 | 国产精品亚洲片夜色在线 | 中文字幕在线播放第一页 | 国产五十路毛片 | 国产日韩在线看 | 天天插天天射 | 激情综合网在线观看 | www.黄色小说.com | 美女精品在线 | 91禁看片| 欧美日韩一区二区视频在线观看 | 色噜噜日韩精品一区二区三区视频 | 欧美成年人在线观看 | 久久精品视频3 | 国产成人性色生活片 | 欧美成人亚洲 | 久久精品欧美一区二区三区麻豆 | 日日夜夜精品免费 | 91 在线视频播放 | 欧美日韩国产综合一区二区 | 免费在线观看av网站 | 男女啪啪网站 | 久久久久久久久久电影 | 久久中文欧美 | 五月婷婷狠狠 | 日韩在线观看视频网站 | 在线观看亚洲a | 久久中文字幕视频 | 久久亚洲私人国产精品 | 97碰碰视频 | 高清国产一区 | 成年人精品 | 99亚洲精品在线 | 九9热这里真品2 | 久久精品99国产 | 在线一区观看 | 国精产品999国精产品视频 | 午夜精品999 | 日日夜夜天天射 | 国产精品久久久久9999吃药 | www.色国产| 人人射人人射 | 久久久久欠精品国产毛片国产毛生 | 欧美精品xxx | 天天操天天干天天 | 国内精品久久久久久中文字幕 | 91黄色小网站 | 69中文字幕 | 激情婷婷六月 | 免费观看国产视频 | 久艹视频在线观看 | 97在线观看免费高清完整版在线观看 | 国产精品第一页在线 | 国产高清av | 91色影院| 亚洲成人av影片 | 中文字幕视频免费观看 | 国产五月色婷婷六月丁香视频 | 99热精品久久 | 伊人在线视频 | 欧美大片www | 亚洲黄色一级电影 | 丰满少妇在线观看网站 | 亚洲九九九在线观看 | 亚洲成人黄色在线观看 | 久久久久亚洲精品中文字幕 | 亚洲国产精品久久久 | 国产成人333kkk | 91九色视频观看 | 精品福利片 | 中文区中文字幕免费看 | 久久久www成人免费毛片麻豆 | 亚洲精品高清一区二区三区四区 | 国产精品在线看 | 三级黄色片在线观看 | 天天操比 | 国产v在线| 狠色狠色综合久久 | 不卡在线一区 | 91精品区 | 国产精品不卡在线播放 | 日韩v在线91成人自拍 | 亚洲精品美女久久久久 | 免费视频a | 免费在线国产黄色 | 91成人免费在线 | 麻豆91在线看 | 亚洲人成影院在线 | 黄色小说视频在线 | 国产精品区二区三区日本 | 日韩一区二区三区不卡 | 欧洲精品视频一区二区 | 99色资源 | 午夜精品一二三区 | 免费看的黄色 | 国产福利在线不卡 | 午夜精品成人一区二区三区 | 9999激情| 国产精品免费久久久久 | 亚洲色图av | 狠狠躁夜夜躁人人爽超碰91 | 国产成人精品免费在线观看 | 一区二区三区电影在线播 | 日韩精品最新在线观看 | 激情五月在线 | 天天色视频 | 亚洲 欧美 精品 | 毛片在线播放网址 | 久久成人国产精品 | 亚洲免费在线 | 99视频久久| 久久精品99国产精品亚洲最刺激 | 99精品黄色片免费大全 | 欧美精品亚州精品 | 久久久久亚洲精品国产 | 深夜免费小视频 | 天天干天天操天天入 | 成年人免费在线播放 | 亚洲精品av中文字幕在线在线 | 天堂在线免费视频 | 丁香资源影视免费观看 | 一区二区视频免费在线观看 | 免费aa大片| 国产精品永久免费视频 | 韩国在线一区二区 | 亚洲一级二级三级 | 日本三级人妇 | 少妇bbw撒尿 | 久久国产精品99久久久久久老狼 | www.狠狠操.com| 国产精品日韩久久久久 | 国产免费观看av | 综合色站 | 色噜噜日韩精品欧美一区二区 | 天堂网中文在线 | 日本xxxx裸体xxxx17 | 黄色av免费看 | 999精品| 久久综合狠狠综合 | 性色大片在线观看 | 欧美大荫蒂xxx | 在线观看视频一区二区三区 | 久久欧洲视频 | 在线视频app | 国产99免费视频 | 国产精品乱码一区二区视频 | av中文字幕网站 | 亚洲国产日韩精品 | 在线日韩中文字幕 | 日本久久久久久久久久 | 亚洲成人av电影 | 91资源在线视频 | 亚洲精品美女久久 | 九九免费精品视频在线观看 | 久草电影在线观看 | 免费观看视频的网站 | 免费成人黄色av | 成人精品久久久 | 国产亚洲午夜高清国产拍精品 | 亚洲欧美日韩国产 | 中文字幕视频一区二区 | 午夜123| 高潮毛片无遮挡高清免费 | 国产精品黄 | japanesexxxxfreehd乱熟| 日韩资源在线 | 久久久久久久网 | 日本一区二区免费在线观看 | 欧美日韩电影在线播放 | 欧美日韩3p | 欧美国产91 | 中文久草 | 黄色网址在线播放 | 西西人体4444www高清视频 | 亚洲最新av网站 | 天天操天天操天天操天天操天天操 | 69中文字幕 | 婷婷六月中文字幕 | 国产午夜三级一区二区三桃花影视 | www国产精品com | 亚洲综合在线一区二区三区 | 成人黄大片 | 二区视频在线 | 久久精品综合网 | 一区二区三区在线观看免费视频 | av在线播放快速免费阴 | 亚洲第一区在线观看 | 97精品免费视频 | 日本精品在线看 | 四虎永久国产精品 | 黄色视屏在线免费观看 | 国产精品永久在线观看 | 精品国产一区二区三区av性色 | 7777精品伊人久久久大香线蕉 | 五月天综合网站 | 久热免费在线 | 狠狠狠色| 欧美色婷婷 | 天天干天天干天天干天天干天天干天天干 | 久久久久久99精品 | 亚洲欧美日韩不卡 | 精品久久久久久久久久岛国gif | 四虎影视久久久 | 中文字幕av在线免费 | 97在线观视频免费观看 | 久久综合久久综合久久综合 | 日韩欧美国产视频 | 欧美一区日韩精品 | 在线观看mv的中文字幕网站 | a天堂一码二码专区 | 精品久久电影 | 九热精品| 婷婷在线网| 国产丝袜一区二区三区 | 婷婷综合电影 | 欧美精品一区在线发布 | a在线一区 | 六月色婷 | 久久久久久久久久久久99 | 久久精品99精品国产香蕉 | 久插视频 | 精品一区三区 | 97理论片 | 四虎国产视频 | 国内精品久久久久久久 | 成人精品影视 | 婷婷亚洲综合 | 亚洲久草网 | 正在播放亚洲精品 | 国产成人免费在线观看 | 手机色在线 | 国产手机视频在线观看 | 亚洲黄色片| 色婷婷av一区 | 福利电影一区二区 | 黄色大片日本 | 日韩乱理 | a v在线观看 | 天天操夜夜干 | 99国产精品视频免费观看一公开 | 911在线| 免费91在线观看 | 日本三级吹潮在线 | 99精品国产99久久久久久福利 | 久久午夜剧场 | 欧美影院久久 | 亚洲va在线va天堂 | 亚洲欧美偷拍另类 | 在线看片日韩 | 在线免费av观看 | 婷婷色五 | 五月在线视频 | 人人射| 午夜av一区 | 欧美analxxxx| 夜色资源站国产www在线视频 | 国产电影一区二区三区四区 | 六月丁香六月婷婷 | 欧美夫妻生活视频 | 久久99热久久99精品 | 91视频 - v11av| 久草在线在线精品观看 | 在线观看的黄色 | 免费成人黄色av | 97超碰香蕉 | 国产自产高清不卡 | 色多多污污| 亚洲h视频在线 | 日韩精品专区在线影院重磅 | 在线观看麻豆av | 夜色成人av | 99999精品视频 | 色丁香婷婷 | 麻豆高清免费国产一区 | 久草久草在线 | 不卡的av电影在线观看 | 免费精品视频在线观看 | av网站有哪些| 国产精品18久久久久久首页狼 | 91高清免费 | 高清免费在线视频 | 亚洲精品456在线播放 | 日本性视频 | av成人在线电影 | 亚洲精品在线视频播放 | 99久久er热在这里只有精品66 | 中文字幕一二 | 欧美精品二区 | 超碰公开97| 久久久久久久久久久久影院 | 伊人色**天天综合婷婷 | 亚洲成a人片77777kkkk1在线观看 | 久久久999免费视频 日韩网站在线 | 中文字幕第 | 日韩av片在线 | 亚洲黄色一级电影 | 日韩资源在线播放 | 免费观看国产成人 | 999电影免费在线观看2020 | 亚洲美女精品 | a资源在线 | 亚洲国产欧洲综合997久久, | 色99网| 日韩视频a | 色婷婷狠狠五月综合天色拍 | 亚洲欧美日韩在线一区二区 | 久久99久 | av免费观看网址 | 狠狠精品 | 国产尤物在线 | 亚洲 成人 一区 | 人人爱在线视频 | 日韩一级理论片 | 国产看片免费 | 欧美老少交| 国产91精品看黄网站 | 久久久久久视频 | 亚洲码国产日韩欧美高潮在线播放 | 亚洲午夜久久久综合37日本 | 久久高视频 | 狠狠黄| 国产伦精品一区二区三区无广告 | 国产美女搞久久 | 国产精品一区二区久久久 | 国产福利一区二区三区视频 | 韩国av三级 | 日韩二区三区在线观看 | 毛片随便看 | 日韩免费在线观看视频 | 欧洲视频一区 | 91福利视频免费观看 | 成年人免费在线播放 | 亚洲欧美怡红院 | 在线看岛国av | 一本一本久久a久久精品综合妖精 | 免费在线激情视频 | 国产一级电影在线 | 伊人五月天综合 | 人人射人人爱 | 国产一级精品视频 | 成人av片免费观看app下载 | 又爽又黄在线观看 | 国产精品va在线观看入 | 亚洲成人高清在线 | 在线免费av网站 | 久久精品免费播放 | 久久99在线视频 | 伊人首页 | 亚洲三级在线播放 | 欧美日韩亚洲第一 | 国产丝袜美腿在线 | 成 人 黄 色 片 在线播放 | 欧美视频日韩视频 | 久久伦理 | 欧美性视频网站 | 久草在线资源网 | 91精品视频网站 | 久久一区91 | 成人毛片在线视频 | 久久综合日 | 免费男女羞羞的视频网站中文字幕 | 婷婷久久婷婷 | 91香蕉视频在线下载 | 国产真实精品久久二三区 | 国产热re99久久6国产精品 | 亚洲视频久久久久 | 婷婷视频在线 | 免费十分钟 | 91视频91色| 欧美另类亚洲 | www.成人精品 | 国产日产av| 99色在线观看 | 久久久久伊人 | 2019精品手机国产品在线 | 日韩经典一区二区三区 | 狂野欧美激情性xxxx欧美 | 精品在线亚洲视频 | 日日干夜夜爱 | 中文字幕在线观看视频一区 | 国产精品久久久久久模特 | www在线观看国产 | 奇米影视8888 | 人人射人人| 五月婷婷开心中文字幕 | 欧美日韩国产综合网 | 少妇bbw撒尿 | 日韩中文字幕网站 | 97av视频| 黄色tv视频| 黄色视屏av| 久久综合色婷婷 | 欧美久久久久 | 日韩在线电影一区 | 国产一区二区三区免费在线 | 99久久日韩精品免费热麻豆美女 | 欧美久久99 | 在线观看日韩 | 国产福利a | 精品久久精品久久 | 狠狠艹夜夜干 | 天天爱天天射 | 国际精品久久 | 国产精品高清在线 | 亚洲精品午夜国产va久久成人 | 国产小视频精品 | 国产一级三级 | 天天操天天摸天天射 | 日韩视频一区二区三区在线播放免费观看 | 欧美午夜性 | 亚洲精品国产精品国自 | 成人作爱视频 | 最近最新中文字幕视频 | 色多多污污在线观看 | 亚洲精品视频免费看 | 精品国产免费一区二区三区五区 | 97超碰免费 | 四虎成人精品永久免费av | 日韩av成人在线观看 | 激情婷婷欧美 | 免费在线观看av的网站 | www.91av在线 | 91自拍视频在线观看 | 夜色资源站wwwcom | 亚洲高清在线精品 | 国产精品麻豆99久久久久久 | 高清不卡毛片 | 99精品免费久久久久久久久日本 | 久久伊人八月婷婷综合激情 | 成人国产精品一区二区 | 国产区久久| 精品免费久久久久 | 天天操夜夜操 | 国内精品小视频 | 天天色天天色天天色 | 国产在线视频不卡 | 黄色不卡av | 中文字幕av在线电影 | 国产69精品久久app免费版 | 日韩欧美一级二级 | 天天插天天狠天天透 | 香蕉视频在线视频 | 久久久国产精品电影 | 亚洲精品视频在线 | 精品亚洲欧美一区 | 精品99视频 | 美女网站在线看 | 国产在线观看免费观看 | 在线免费黄网站 | 在线免费黄色av | 99在线热播 | 国产三级av在线 | 日韩成人黄色av | 91电影福利| 日本精品久久久久影院 | 久久国产成人午夜av影院宅 | 一区二区三区在线视频观看58 | 精品一区二区三区在线播放 | 美女av在线免费 | 一级性视频 | 国产不卡一二三区 | 欧美午夜视频在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 99热这里只有精品1 av中文字幕日韩 | 久久国产经典视频 | 亚洲最大的av网站 | av日韩精品| 国产中文字幕在线看 | 日韩超碰 | 波多野结衣一区二区 | 国产高清一 | 狠狠操狠狠干天天操 | 99久久婷婷国产精品综合 | 久久久久国产精品一区二区 | 日韩中文字幕国产精品 | 久久一区国产 | 色婷婷天天干 | 亚洲成人精品久久 | 久草在线视频免赞 | 国产一区二区网址 | 97福利| 欧美乱码精品一区 | 亚洲成人麻豆 | 91激情在线视频 | 黄色小说视频网站 | 玖玖视频免费在线 | 日韩欧美精品一区二区三区经典 | 亚洲最大成人网4388xx | 综合网伊人 | 色综合久久五月天 | 日韩午夜电影院 | 久久黄色小说 | 久久久久在线 | 天天干天天做 | 成年人精品 | 午夜av影院 | 国产玖玖精品视频 | 国产探花视频在线播放 | 在线观看 亚洲 | 97精品视频在线播放 | 亚州人成在线播放 | 国产成人av网站 | 在线观看日韩 | 色噜噜日韩精品一区二区三区视频 | 日黄网站 | 日韩精品一区二区三区免费观看 | 国产视频亚洲视频 | 99视频精品视频高清免费 | 国产精品免费在线播放 | 欧美极品少妇xxxx | 91精品免费| 国产女教师精品久久av | 久久免费福利视频 | 久久久久久久久久亚洲精品 | 性色av免费看 | 超级碰视频 | 免费观看成人av | 九九九热精品免费视频观看网站 | 97在线公开视频 | 国产亚洲成人网 | 欧美在线99| 精品国产电影一区 | 在线观看视频日韩 | 亚洲激情视频 | 精品国产免费久久 | 天天天插 | 久久国产二区 | 激情久久影院 | 亚洲精品在| 久久狠狠干 | 欧美精品第一 | www黄色| 午夜狠狠操 | 国产精品久久久久久久妇 | 久热电影 | 三日本三级少妇三级99 | 超碰免费公开 | 国语对白少妇爽91 | 日韩最新在线视频 | 色综合久久久久 | 九草在线观看 | 又粗又长又大又爽又黄少妇毛片 | 国产色在线 | 美国人与动物xxxx | 久久在线精品 | 日韩视频1区 | 免费电影一区二区三区 | 亚洲人成人99网站 | 视频国产精品 | 午夜精品导航 | 五月婷激情 | 亚洲美女在线国产 | 免费91在线| 久久久久国产a免费观看rela | 亚洲黄色成人 | 黄a网站| 久草精品视频 | 亚洲成人蜜桃 | 久久五月婷婷综合 | 日本 在线 视频 中文 有码 | 色综合www | 免费观看完整版无人区 | 色婷婷综合五月 | 一级黄色片在线播放 | 欧美一区日韩一区 | 久久久网址 | 欧美午夜性生活 | 亚洲精品456在线播放乱码 | 免费a v在线 | 久久免费国产视频 | 欧美国产日韩在线视频 | 日韩欧美高清在线 | 手机在线中文字幕 | 午夜精品久久久久久久99热影院 | 国产精品一区二区三区电影 | 成人午夜电影久久影院 | 国产精品亚洲a | 精品一区二区在线免费观看 | 亚洲粉嫩av | 黄色免费观看视频 | 免费在线一区二区三区 | 97av免费视频| 91在线视频观看免费 | 91精品视频观看 | 黄色电影小说 | 精品婷婷 | 日韩欧在线 | 婷婷国产v亚洲v欧美久久 | 精品视频成人 | 六月丁香婷婷网 | 国产性天天综合网 | 精品国产伦一区二区三区观看方式 | 免费av视屏| 天堂av一区二区 | 国产乱对白刺激视频不卡 | 欧美视频在线二区 | 综合网色| 91看片麻豆 | 色网站国产精品 | 西西444www大胆高清视频 | 丝袜一区在线 | 96国产精品 | 91网页版免费观看 | 精品一区二区三区久久 | 久久精品福利 | 国产精品久久久久av福利动漫 | 在线电影91| 四虎免费在线观看 | 九九影视理伦片 | 国产一区在线精品 | 亚洲精品午夜久久久久久久久久久 | 在线亚州 | 97视频免费 | 国产精品va最新国产精品视频 | 97麻豆视频| 国产午夜小视频 | 日本h视频在线观看 | 黄色视屏av | 福利视频入口 | 人人爱在线视频 | 中文字幕一二三区 | 日韩免费成人av | 日韩av影视在线 | 免费视频一区二区 | 国产亚洲免费的视频看 | 天天射天天色天天干 | 国产精品123 | 国产裸体永久免费视频网站 | www久草| 日韩电影在线观看一区二区三区 | 亚洲 综合 国产 精品 | 国产精品亚 | 午夜婷婷在线播放 | 在线亚洲成人 | 亚洲精品国偷自产在线99热 | 三级黄色片在线观看 | 亚洲第一香蕉视频 | 在线韩国电影免费观影完整版 | 亚洲成av片人久久久 | 91av片 | 久久影视网 | 九九精品视频在线观看 | 91精品老司机久久一区啪 | 日韩aⅴ视频 | 一本一道久久a久久综合蜜桃 | 最近更新好看的中文字幕 | 亚洲免费观看视频 | 亚洲精品乱码久久久久久高潮 | 精品一区 在线 | 午夜av片| 欧美日韩天堂 | 深爱五月激情网 | 亚洲区另类春色综合小说校园片 | 国产手机在线精品 | a在线播放 | 91在线免费视频 | a级片韩国 | 激情综合中文娱乐网 | 视频国产在线 | 黄色av一级| 肉色欧美久久久久久久免费看 | 久久久91精品国产一区二区精品 | 99久久婷婷国产综合精品 | 天天干婷婷| 亚洲一区二区三区毛片 | 国产精品mv| 青青河边草手机免费 | 最近中文字幕大全中文字幕免费 | 一区二区三区高清在线观看 | 一区精品久久 | 午夜12点 | 丁香在线观看完整电影视频 | 亚洲视频精品在线 | 超碰97在线资源站 | 日韩电影在线观看一区二区 | 中文字幕第一页在线vr | 国产在线观看免费观看 | 色噜噜在线观看视频 | 激情久久综合网 | 深爱综合网 | 久久综合给合久久狠狠色 | 久久久久久麻豆 | 中文国产在线观看 | 亚洲午夜久久久久久久久久久 | 亚洲精品视频在线观看网站 | 欧美91精品久久久久国产性生爱 | 亚洲欧洲精品视频 | 欧美日韩高清免费 | 午夜成人免费影院 | 国产欧美精品一区二区三区 | 中文字幕欲求不满 | 精品你懂的 | 久久久精品免费看 |