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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Redis 会遇到的「坑」,你踩过几个?

發布時間:2024/8/23 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 会遇到的「坑」,你踩过几个? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 |?Magic Kaito

來源 | 水滴與銀彈

這篇文章,我想和你聊一聊在使用 Redis 時,可能會踩到的「坑」。

如果你在使用 Redis 時,也遇到過以下這些「詭異」的場景,那很大概率是踩到「坑」了:

  • 明明一個 key 設置了過期時間,怎么變成不過期了?

  • 使用 O(1) 復雜度的 SETBIT 命令,Redis 竟然被 OOM 了?

  • 執行 RANDOMKEY 隨機拿出一個 key,竟然也會阻塞 Redis?

  • 同樣的命令,為什么主庫查不到數據,從庫卻可以查到?

  • 從庫內存為什么比主庫用得還多?

  • 寫入到 Redis 的數據,為什么莫名其妙丟了?

  • ...

究竟是什么原因,導致的這些問題呢?

這篇文章,我就來和你盤點一下,使用 Redis 時可能會踩到「坑」,以及如何去規避。

我把這些問題劃分成了三大部分:

  • 常見命令有哪些坑?

  • 數據持久化有哪些坑?

  • 主從庫同步有哪些坑?

  • 導致這些問題的原因,很有可能會「顛覆」你的認知,如果你準備好了,那就跟著我的思路開始吧!

    這篇文章干貨很多,希望你可以耐心讀完。

    常見命令有哪些坑?

    首先,我們來看一下,平時在使用 Redis 時,有哪些常見的命令會遇到「意料之外」的結果。

    1) 過期時間意外丟失?

    你在使用 Redis 時,肯定經常使用 SET 命令,它非常簡單。

    SET 除了可以設置 key-value 之外,還可以設置 key 的過期時間,就像下面這樣:

    127.0.0.1:6379>?SET?testkey?val1?EX?60 OK 127.0.0.1:6379>?TTL?testkey (integer)?59

    此時如果你想修改 key 的值,但只是單純地使用 SET 命令,而沒有加上「過期時間」的參數,那這個 key 的過期時間將會被「擦除」。

    127.0.0.1:6379>?SET?testkey?val2 OK 127.0.0.1:6379> TTL testkey ?// key永遠不過期了! (integer)?-1

    看到了么?testkey 變成永遠不過期了!

    如果你剛剛開始使用 Redis,相信你肯定也踩過這個坑。

    導致這個問題的原因在于:SET 命令如果不設置過期時間,那么 Redis 會自動「擦除」這個 key 的過期時間。

    如果你發現 Redis 的內存持續增長,而且很多 key 原來設置了過期時間,后來發現過期時間丟失了,很有可能是因為這個原因導致的。

    這時你的 Redis 中就會存在大量不過期的 key,消耗過多的內存資源。

    所以,你在使用 SET 命令時,如果剛開始就設置了過期時間,那么之后修改這個 key,也務必要加上過期時間的參數,避免過期時間丟失問題。

    2) DEL 竟然也會阻塞 Redis?

    刪除一個 key,你肯定會用 DEL 命令,不知道你沒有思考過它的時間復雜度是多少?

    O(1)?其實不一定。

    如果你有認真閱讀 Redis 的官方文檔,就會發現:刪除一個 key 的耗時,與這個 key 的類型有關。

    Redis 官方文檔在介紹 DEL 命令時,是這樣描述的:

    • key 是 String 類型,DEL 時間復雜度是 O(1)

    • key 是 List/Hash/Set/ZSet 類型,DEL 時間復雜度是 O(M),M 為元素數量

    也就是說,如果你要刪除的是一個非 String 類型的 key,這個 key 的元素越多,那么在執行 DEL 時耗時就越久!

    為什么會這樣?

    原因在于,刪除這種 key 時,Redis 需要依次釋放每個元素的內存,元素越多,這個過程就會越耗時。

    而這么長的操作耗時,勢必會阻塞整個 Redis 實例,影響 Redis 的性能。

    所以,當你在刪除 List/Hash/Set/ZSet 類型的 key 時,一定要格外注意,不能無腦執行 DEL,而是應該用以下方式刪除:

  • 查詢元素數量:執行 LLEN/HLEN/SCARD/ZCARD 命令

  • 判斷元素數量:如果元素數量較少,可直接執行 DEL 刪除,否則分批刪除

  • 分批刪除:執行 LRANGE/HSCAN/SSCAN/ZSCAN + LPOP/RPOP/HDEL/SREM/ZREM 刪除

  • 了解了 DEL 對于 List/Hash/Set/ZSet 類型數據的影響,我們再來分析下,刪除一個 String 類型的 key 會不會有這種問題?

    啊?前面不是提到,Redis 官方文檔的描述,刪除 String 類型的 key,時間復雜度是 O(1) 么?這不會導致 Redis 阻塞吧?

    其實這也不一定!

    你思考一下,如果這個 key 占用的內存非常大呢?

    例如,這個 key 存儲了 500MB 的數據(很明顯,它是一個 bigkey),那在執行 DEL 時,耗時依舊會變長!

    這是因為,Redis 釋放這么大的內存給操作系統,也是需要時間的,所以操作耗時也會變長。

    所以,對于 String 類型來說,你最好也不要存儲過大的數據,否則在刪除它時,也會有性能問題。

    此時,你可能會想:Redis 4.0 不是推出了 lazy-free 機制么?打開這個機制,釋放內存的操作會放到后臺線程中執行,那是不是就不會阻塞主線程了?

    這個問題非常好。

    真的會是這樣嗎?

    這里我先告訴你結論:即使 Redis 打開了 lazy-free,在刪除一個 String 類型的 bigkey 時,它仍舊是在主線程中處理,而不是放到后臺線程中執行。所以,依舊有阻塞 Redis 的風險!

    這是為什么?

    這里先賣一個關子,感興趣的同學可以先自行查閱 lazy-free 相關資料尋找答案。:)

    其實,關于 lazy-free 的知識點也很多,由于篇幅原因,所以我打算后面專門寫一篇文章來講,歡迎持續關注~

    3) RANDOMKEY 竟然也會阻塞 Redis?

    如果你想隨機查看 Redis 中的一個 key,通常會使用 RANDOMKEY 這個命令。

    這個命令會從 Redis 中「隨機」取出一個 key。

    既然是隨機,那這個執行速度肯定非??彀?#xff1f;

    其實不然。

    要解釋清楚這個問題,就要結合 Redis 的過期策略來講。

    如果你對 Redis 的過期策略有所了解,應該知道 Redis 清理過期 key,是采用定時清理 + 懶惰清理 2 種方式結合來做的。

    而 RANDOMKEY 在隨機拿出一個 key 后,首先會先檢查這個 key 是否已過期。

    如果該 key 已經過期,那么 Redis 會刪除它,這個過程就是懶惰清理。

    但清理完了還不能結束,Redis 還要找出一個「不過期」的 key,返回給客戶端。

    此時,Redis 則會繼續隨機拿出一個 key,然后再判斷是它否過期,直到找出一個未過期的 key 返回給客戶端。

    整個流程就是這樣的:

  • master 隨機取出一個 key,判斷是否已過期

  • 如果 key 已過期,刪除它,繼續隨機取 key

  • 以此循環往復,直到找到一個不過期的 key,返回

  • 但這里就有一個問題了:如果此時 Redis 中,有大量 key 已經過期,但還未來得及被清理掉,那這個循環就會持續很久才能結束,而且,這個耗時都花費在了清理過期 key + 尋找不過期 key 上。

    導致的結果就是,RANDOMKEY 執行耗時變長,影響 Redis 性能。

    以上流程,其實是在 master 上執行的。

    如果在 slave 上執行 RANDOMEKY,那么問題會更嚴重!

    為什么?

    主要原因就在于,slave 自己是不會清理過期 key。

    那 slave 什么時候刪除過期 key 呢?

    其實,當一個 key 要過期時,master 會先清理刪除它,之后 master 向 slave 發送一個 DEL 命令,告知 slave 也刪除這個 key,以此達到主從庫的數據一致性。

    還是同樣的場景:Redis 中存在大量已過期,但還未被清理的 key,那在 slave 上執行 RANDOMKEY 時,就會發生以下問題:

  • slave 隨機取出一個 key,判斷是否已過期

  • key 已過期,但 slave 不會刪除它,而是繼續隨機尋找不過期的 key

  • 由于大量 key 都已過期,那 slave 就會尋找不到符合條件的 key,此時就會陷入「死循環」!

  • 也就是說,在 slave 上執行 RANDOMKEY,有可能會造成整個 Redis 實例卡死!

    是不是沒想到?在 slave 上隨機拿一個 key,竟然有可能造成這么嚴重的后果?

    這其實是 Redis 的一個 Bug,這個 Bug 一直持續到 5.0 才被修復。

    修復的解決方案是,在 slave 上執行 RANDOMKEY 時,會先判斷整個實例所有 key 是否都設置了過期時間,如果是,為了避免長時間找不到符合條件的 key,slave 最多只會在哈希表中尋找 100 次,無論是否能找到,都會退出循環。

    這個方案就是增加上了一個最大重試次數,這樣一來,就避免了陷入死循環。

    雖然這個方案可以避免了 slave 陷入死循環、卡死整個實例的問題,但是,在 master 上執行這個命令時,依舊有概率導致耗時變長。

    所以,你在使用 RANDOMKEY 時,如果發現 Redis 發生了「抖動」,很有可能是因為這個原因導致的!

    4) O(1) 復雜度的 SETBIT,竟然會導致 Redis OOM?

    在使用 Redis 的 String 類型時,除了直接寫入一個字符串之外,還可以把它當做 bitmap 來用。

    具體來講就是,我們可以把一個 String 類型的 key,拆分成一個個 bit 來操作,就像下面這樣:

    127.0.0.1:6379>?SETBIT?testkey?10?1 (integer)?1 127.0.0.1:6379>?GETBIT?testkey?10 (integer)?1

    其中,操作的每一個 bit 位叫做 offset。

    但是,這里有一個坑,你需要注意起來。

    如果這個 key 不存在,或者 key 的內存使用很小,此時你要操作的 offset 非常大,那么 Redis 就需要分配「更大的內存空間」,這個操作耗時就會變長,影響性能。

    所以,當你在使用 SETBIT 時,也一定要注意 offset 的大小,操作過大的 offset 也會引發 Redis 卡頓。

    這種類型的 key,也是典型的 bigkey,除了分配內存影響性能之外,在刪除它時,耗時同樣也會變長。

    5) 執行 MONITOR 也會導致 Redis OOM?

    這個坑你肯定聽說過很多次了。

    當你在執行 MONITOR 命令時,Redis 會把每一條命令寫到客戶端的「輸出緩沖區」中,然后客戶端從這個緩沖區讀取服務端返回的結果。

    但是,如果你的 Redis QPS 很高,這將會導致這個輸出緩沖區內存持續增長,占用 Redis 大量的內存資源,如果恰好你的機器的內存資源不足,那 Redis 實例就會面臨被 OOM 的風險。

    所以,你需要謹慎使用 MONITOR,尤其在 QPS 很高的情況下。

    以上這些問題場景,都是我們在使用常見命令時發生的,而且,很可能都是「無意」就會觸發的。

    下面我們來看 Redis「數據持久化」都存在哪些坑?

    數據持久化有哪些坑?

    Redis 的數據持久化,分為 RDB 和 AOF 兩種方式。

    其中,RDB 是數據快照,而 AOF 會記錄每一個寫命令到日志文件中。

    在數據持久化方面發生問題,主要也集中在這兩大塊,我們依次來看。

    1) master 宕機,slave 數據也丟失了?

    如果你的 Redis 采用如下模式部署,就會發生數據丟失的問題:

    • master-slave + 哨兵部署實例

    • master 沒有開啟數據持久化功能

    • Redis 進程使用 supervisor 管理,并配置為「進程宕機,自動重啟」

    如果此時 master 宕機,就會導致下面的問題:

    • master 宕機,哨兵還未發起切換,此時 master 進程立即被 supervisor 自動拉起

    • 但 master 沒有開啟任何數據持久化,啟動后是一個「空」實例

    • 此時 slave 為了與 master 保持一致,它會自動「清空」實例中的所有數據,slave 也變成了一個「空」實例

    看到了么?在這個場景下,master / slave 的數據就全部丟失了。

    這時,業務應用在訪問 Redis 時,發現緩存中沒有任何數據,就會把請求全部打到后端數據庫上,這還會進一步引發「緩存雪崩」,對業務影響非常大。

    所以,你一定要避免這種情況發生,我給你的建議是:

  • Redis 實例不使用進程管理工具自動拉起

  • master 宕機后,讓哨兵發起切換,把 slave 提升為 master

  • 切換完成后,再重啟 master,讓其退化成 slave

  • 你在配置數據持久化時,要避免這個問題的發生。

    2) AOF everysec 真的不會阻塞主線程嗎?

    當 Redis 開啟 AOF 時,需要配置 AOF 的刷盤策略。

    基于性能和數據安全的平衡,你肯定會采用 appendfsync everysec 這種方案。

    這種方案的工作模式為,Redis 的后臺線程每間隔 1 秒,就把 AOF page cache 的數據,刷到磁盤(fsync)上。

    這種方案的優勢在于,把 AOF 刷盤的耗時操作,放到了后臺線程中去執行,避免了對主線程的影響。

    但真的不會影響主線程嗎?

    答案是否定的。

    其實存在這樣一種場景:Redis 后臺線程在執行 AOF page cache 刷盤(fysnc)時,如果此時磁盤 IO 負載過高,那么調用 fsync 就會被阻塞住。

    此時,主線程仍然接收寫請求進來,那么此時的主線程會先判斷,上一次后臺線程是否已刷盤成功。

    如何判斷呢?

    后臺線程在刷盤成功后,都會記錄刷盤的時間。

    主線程會根據這個時間來判斷,距離上一次刷盤已經過去多久了。整個流程是這樣的:

  • 主線程在寫 AOF page cache(write系統調用)前,先檢查后臺 fsync 是否已完成?

  • fsync 已完成,主線程直接寫 AOF page cache

  • fsync 未完成,則檢查距離上次 fsync 過去多久?

  • 如果距離上次 fysnc 成功在 2 秒內,那么主線程會直接返回,不寫 AOF page cache

  • 如果距離上次 fysnc 成功超過了 2 秒,那主線程會強制寫 AOF page cache(write系統調用)

  • 由于磁盤 IO 負載過高,此時,后臺線程 fynsc 會發生阻塞,那主線程在寫 AOF page cache 時,也會發生阻塞等待(操作同一個 fd,fsync 和 write 是互斥的,一方必須等另一方成功才可以繼續執行,否則阻塞等待)

  • 通過分析我們可以發現,即使你配置的 AOF 刷盤策略是 appendfsync everysec,也依舊會有阻塞主線程的風險。

    其實,產生這個問題的重點在于,磁盤 IO 負載過高導致 fynsc 阻塞,進而導致主線程寫 AOF page cache 也發生阻塞。

    所以,你一定要保證磁盤有充足的 IO 資源,避免這個問題。

    3) AOF everysec 真的只會丟失 1 秒數據?

    接著上面的問題繼續分析。

    如上所述,這里我們需要重點關注上面的步驟 4。

    也就是:主線程在寫 AOF page cache 時,會先判斷上一次 fsync 成功的時間,如果距離上次 fysnc 成功在 2 秒內,那么主線程會直接返回,不再寫 AOF page cache。

    這就意味著,后臺線程在執行 fsync 刷盤時,主線程最多等待 2 秒不會寫 AOF page cache。

    如果此時 Redis 發生了宕機,那么,AOF 文件中丟失是 2 秒的數據,而不是 1 秒!

    我們繼續分析,Redis 主線程為什么要等待 2 秒不寫 AOF page cache 呢?

    其實,Redis AOF 配置為 appendfsync everysec 時,正常來講,后臺線程每隔 1 秒執行一次 fsync 刷盤,如果磁盤資源充足,是不會被阻塞住的。

    也就是說,Redis 主線程其實根本不用關心后臺線程是否刷盤成功,只要無腦寫 AOF page cache 即可。

    但是,Redis 作者考慮到,如果此時的磁盤 IO 資源比較緊張,那么后臺線程 fsync 就有概率發生阻塞風險。

    所以,Redis 作者在主線程寫 AOF page cache 之前,先檢查一下距離上一次 fsync 成功的時間,如果大于 1 秒沒有成功,那么主線程此時就能知道,fsync 可能阻塞了。

    所以,主線程會等待 2 秒不寫 AOF page cache,其目的在于:

  • 降低主線程阻塞的風險(如果無腦寫 AOF page cache,主線程則會立即阻塞住)

  • 如果 fsync 阻塞,主線程就會給后臺線程留出 1 秒的時間,等待 fsync 成功

  • 但代價就是,如果此時發生宕機,AOF 丟失的就是 2 秒的數據,而不是 1 秒。

    這個方案應該是 Redis 作者對性能和數據安全性的進一步權衡。

    無論如何,這里你只需要知道的是,即使 AOF 配置為每秒刷盤,在發生上述極端情況時,AOF 丟失的數據其實是 2 秒。

    4) RDB 和 AOF rewrite 時,Redis 發生 OOM?

    最后,我們來看一下,當 Redis 在執行 RDB 快照和 AOF rewrite 時,會發生的問題。

    Redis 在做 RDB 快照和 AOF rewrite 時,會采用創建子進程的方式,把實例中的數據持久化到磁盤上。

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

    fork 執行完成后,父進程和子進程會同時共享同一份內存數據。

    但此時的主進程依舊是可以接收寫請求的,而進來的寫請求,會采用 Copy On Write(寫時復制)的方式操作內存數據。

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

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

    你應該發現了,如果父進程要修改一個 key,就需要拷貝原有的內存數據,到新內存中,這個過程涉及到了「新內存」的申請。

    如果你的業務特點是「寫多讀少」,而且 OPS 非常高,那在 RDB 和 AOF rewrite 期間,就會產生大量的內存拷貝工作。

    這會有什么問題呢?

    因為寫請求很多,這會導致 Redis 父進程會申請非常多的內存。在這期間,修改 key 的范圍越廣,新內存的申請就越多。

    如果你的機器內存資源不足,這就會導致 Redis 面臨被 OOM 的風險!

    這就是你會從 DBA 同學那里聽到的,要給 Redis 機器預留內存的原因。

    其目的就是避免在 RDB 和 AOF rewrite 期間,防止 Redis OOM。

    以上這些,就是「數據持久化」會遇到的坑,你踩到過幾個?

    下面我們再來看「主從復制」會存在哪些問題。

    主從復制有哪些坑?

    Redis 為了保證高可用,提供了主從復制的方式,這樣就可以保證 Redis 有多個「副本」,當主庫宕機后,我們依舊有從庫可以使用。

    在主從同步期間,依舊存在很多坑,我們依次來看。

    1) 主從復制會丟數據嗎?

    首先,你需要知道,Redis 的主從復制是采用「異步」的方式進行的。

    這就意味著,如果 master 突然宕機,可能存在有部分數據還未同步到 slave 的情況發生。

    這會導致什么問題呢?

    如果你把 Redis 當做純緩存來使用,那對業務來說沒有什么影響。

    master 未同步到 slave 的數據,業務應用可以從后端數據庫中重新查詢到。

    但是,對于把 Redis 當做數據庫,或是當做分布式鎖來使用的業務,有可能因為異步復制的問題,導致數據丟失 / 鎖丟失。

    關于 Redis 分布式鎖可靠性的更多細節,這里先不展開,后面會單獨寫一篇文章詳細剖析這個知識點。這里你只需要先知道,Redis 主從復制是有概率發生數據丟失的。

    2) 同樣命令查詢一個 key,主從庫卻返回不同的結果?

    不知道你是否思考過這樣一個問題:如果一個 key 已過期,但這個 key 還未被 master 清理,此時在 slave 上查詢這個 key,會返回什么結果呢?

  • slave 正常返回 key 的值

  • slave 返回 NULL

  • 你認為是哪一種?可以思考一下。

    答案是:不一定。

    嗯?為什么會不一定?

    這個問題非常有意思,請跟緊我的思路,我會帶你一步步分析其中的原因。

    其實,返回什么結果,這要取決于以下 3 個因素:

  • Redis 的版本

  • 具體執行的命令

  • 機器時鐘

  • 先來看 Redis 版本。

    如果你使用的是 Redis 3.2 以下版本,只要這個 key 還未被 master 清理,那么,在 slave 上查詢這個 key,它會永遠返回 value 給你。

    也就是說,即使這個 key 已過期,在 slave 上依舊可以查詢到這個 key。

    //?Redis?2.8?版本?在?slave?上執行 127.0.0.1:6479>?TTL?testkey (integer)?-2????//?已過期 127.0.0.1:6479>?GET?testkey "testval"???????//?還能查詢到!

    但如果此時在 master 上查詢這個 key,發現已經過期,就會把它清理掉,然后返回 NULL。

    //?Redis?2.8?版本?在?master?上執行 127.0.0.1:6379>?TTL?testkey (integer)?-2 127.0.0.1:6379>?GET?testkey (nil)

    發現了嗎?在 master 和 slave 上查詢同一個 key,結果竟然不一樣?

    其實,slave 應該要與 master 保持一致,key 已過期,就應該給客戶端返回 NULL,而不是還正常返回 key 的值。

    為什么會發生這種情況?

    其實這是 Redis 的一個 Bug:3.2 以下版本的 Redis,在 slave 上查詢一個 key 時,并不會判斷這個 key 是否已過期,而是直接無腦返回給客戶端結果。

    這個 Bug 在 3.2 版本進行了修復,但是,它修復得「不夠徹底」。

    什么叫修復得「不夠徹底」?

    這就要結合前面提到的,第 2 個影響因素「具體執行的命令」來解釋了。

    Redis 3.2 雖然修復了這個 Bug,但卻遺漏了一個命令:EXISTS。

    也就是說,一個 key 已過期,在 slave 直接查詢它的數據,例如執行 GET/LRANGE/HGETALL/SMEMBERS/ZRANGE 這類命令時,slave 會返回 NULL。

    但如果執行的是 EXISTS,slave 依舊會返回:key 還存在。

    //?Redis?3.2?版本?在?slave?上執行 127.0.0.1:6479>?GET?testkey (nil)???????????//?key?已邏輯過期 127.0.0.1:6479>?EXISTS?testkey (integer) 1 ????//?還存在!

    原因在于,EXISTS 與查詢數據的命令,使用的不是同一個方法。

    Redis 作者只在查詢數據時增加了過期時間的校驗,但 EXISTS 命令依舊沒有這么做。

    直到 Redis 4.0.11 這個版本,Redis 才真正把這個遺漏的 Bug 完全修復。

    如果你使用的是這個之上的版本,那在 slave 上執行數據查詢或 EXISTS,對于已過期的 key,就都會返回「不存在」了。

    這里我們先小結一下,slave 查詢過期 key,經歷了 3 個階段:

  • 3.2 以下版本,key 過期未被清理,無論哪個命令,查詢 slave,均正常返回 value

  • 3.2 - 4.0.11 版本,查詢數據返回 NULL,但 EXISTS 依舊返回 true

  • 4.0.11 以上版本,所有命令均已修復,過期 key 在 slave 上查詢,均返回「不存在」

  • 這里要特別鳴謝《Redis開發與運維》的作者,付磊。

    這個問題我是在他的文章中看到的,感覺非常有趣,原來 Redis 之前還存在這樣的 Bug 。隨后我又查閱了相關源碼,并對邏輯進行了梳理,在這里才寫成文章分享給大家。

    雖然已在微信中親自答謝,但在這里再次表達對他的謝意~

    最后,我們來看影響查詢結果的第 3 個因素:「機器時鐘」。

    假設我們已規避了上面提到的版本 Bug,例如,我們使用 Redis 5.0 版本,在 slave 查詢一個 key,還會和 master 結果不同嗎?

    答案是,還是有可能會的。

    這就與 master / slave 的機器時鐘有關了。

    無論是 master 還是 slave,在判斷一個 key 是否過期時,都是基于「本機時鐘」來判斷的。

    如果 slave 的機器時鐘比 master 走得「快」,那就會導致,即使這個 key 還未過期,但以 slave 上視角來看,這個 key 其實已經過期了,那客戶端在 slave 上查詢時,就會返回 NULL。

    是不是很有意思?一個小小的過期 key,竟然藏匿這么多貓膩。

    如果你也遇到了類似的情況,就可以通過上述步驟進行排查,確認是否踩到了這個坑。

    3) 主從切換會導致緩存雪崩?

    這個問題是上一個問題的延伸。

    我們假設,slave 的機器時鐘比 master 走得「快」,而且是「快很多」。

    此時,從 slave 角度來看,Redis 中的數據存在「大量過期」。

    如果此時操作「主從切換」,把 slave 提升為新的 master。

    它成為 master 后,就會開始大量清理過期 key,此時就會導致以下結果:

  • master 大量清理過期 key,主線程發生阻塞,無法及時處理客戶端請求

  • Redis 中數據大量過期,引發緩存雪崩

  • 你看,當 master / slave 機器時鐘嚴重不一致時,對業務的影響非常大!

    所以,如果你是 DBA 運維,一定要保證主從庫的機器時鐘一致性,避免發生這些問題。

    4) master / slave 大量數據不一致?

    還有一種場景,會導致 master / slave 的數據存在大量不一致。

    這就涉及到 Redis 的 maxmemory 配置了。

    Redis 的 maxmemory 可以控制整個實例的內存使用上限,超過這個上限,并且配置了淘汰策略,那么實例就開始淘汰數據。

    但這里有個問題:假設 master / slave 配置的 maxmemory 不一樣,那此時就會發生數據不一致。

    例如,master 配置的 maxmemory 為 5G,而 slave 的 maxmemory 為 3G,當 Redis 中的數據超過 3G 時,slave 就會「提前」開始淘汰數據,此時主從庫數據發生不一致。

    另外,盡管 master / slave 設置的 maxmemory 相同,如果你要調整它們的上限,也要格外注意,否則也會導致 slave 淘汰數據:

    • 調大 maxmemory 時,先調整 slave,再調整 master

    • 調小 maxmemory 時,先調整 master,再調整 slave

    以此方式操作,就避免了 slave 提前超過 maxmemory 的問題。

    其實,你可以思考一下,發生這些問題的關鍵在哪?

    其根本原因在于,slave 超過 maxmemory 后,會「自行」淘汰數據。

    如果不讓 slave 自己淘汰數據,那這些問題是不是都可以規避了?

    沒錯。

    針對這個問題,Redis 官方應該也收到了很多用戶的反饋。在 Redis 5.0 版本,官方終于把這個問題徹底解決了!

    Redis 5.0 增加了一個配置項:replica-ignore-maxmemory,默認 yes。

    這個參數表示,盡管 slave 內存超過了 maxmemory,也不會自行淘汰數據了!

    這樣一來,slave 永遠會向 master 看齊,只會老老實實地復制 master 發送過來的數據,不會自己再搞「小動作」。

    至此,master / slave 的數據就可以保證完全一致了!

    如果你使用的恰好是 5.0 版本,就不用擔心這個問題了。

    5) slave 竟然會有內存泄露問題?

    是的,你沒看錯。

    這是怎么發生的?我們具體來看一下。

    當你在使用 Redis 時,符合以下場景,就會觸發 slave 內存泄露:

    • Redis 使用的是 4.0 以下版本

    • slave 配置項為 read-only=no(從庫可寫)

    • 向 slave 寫入了有過期時間的 key

    這時的 slave 就會發生內存泄露:slave 中的 key,即使到了過期時間,也不會自動清理。

    如果你不主動刪除它,那這些 key 就會一直殘留在 slave 內存中,消耗 slave 的內存。

    最麻煩的是,你使用命令查詢這些 key,卻還查不到任何結果!

    這就 slave 「內存泄露」問題。

    這其實也是 Redis 的一個 Bug,Redis 4.0 才修復了這個問題。

    解決方案是,在可寫的 slave 上,寫入帶有過期時間 key 時,slave 會「記錄」下來這些 key。

    然后 slave 會定時掃描這些 key,如果到達過期時間,則清理之。

    如果你的業務需要在 slave 上臨時存儲數據,而且這些 key 也都設置了過期時間,那么就要注意這個問題了。

    你需要確認你的 Redis 版本,如果是 4.0 以下版本,一定要避免踩這個坑。

    其實,最好的方案是,制定一個 Redis 使用規范,slave 必須強制設置為 read-only,不允許寫,這樣不僅可以保證 master / slave 的數據一致性,還避免了 slave 內存泄露問題。

    6) 為什么主從全量同步一直失敗?

    在主從全量同步時,你可能會遇到同步失敗的問題,具體場景如下:

    slave 向 master 發起全量同步請求,master 生成 RDB 后發給 slave,slave 加載 RDB。

    由于 RDB 數據太大,slave 加載耗時也會變得很長。

    此時你會發現,slave 加載 RDB 還未完成,master 和 slave 的連接卻斷開了,數據同步也失敗了。

    之后你又會發現,slave 又發起了全量同步,master 又生成 RDB 發送給 slave。

    同樣地,slave 在加載 RDB 時,master / slave 同步又失敗了,以此往復。

    這是怎么回事?

    其實,這就是 Redis 的「復制風暴」問題。

    什么是復制風暴?

    就像剛才描述的:主從全量同步失敗,又重新開始同步,之后又同步失敗,以此往復,惡性循環,持續浪費機器資源。

    為什么會導致這種問題呢?

    如果你的 Redis 有以下特點,就有可能發生這種問題:

    • master 的實例數據過大,slave 在加載 RDB 時耗時太長

    • 復制緩沖區(slave client-output-buffer-limit)配置過小

    • master 寫請求量很大

    主從在全量同步數據時,master 接收到的寫請求,會先寫到主從「復制緩沖區」中,這個緩沖區的「上限」是配置決定的。

    當 slave 加載 RDB 太慢時,就會導致 slave 無法及時讀取「復制緩沖區」的數據,這就引發了復制緩沖區「溢出」。

    為了避免內存持續增長,此時的 master 會「強制」斷開 slave 的連接,這時全量同步就會失敗。

    之后,同步失敗的 slave 又會「重新」發起全量同步,進而又陷入上面描述的問題中,以此往復,惡性循環,這就是所謂的「復制風暴」。

    如何解決這個問題呢?我給你以下幾點建議:

  • Redis 實例不要太大,避免過大的 RDB

  • 復制緩沖區配置的盡量大一些,給 slave 加載 RDB 留足時間,降低全量同步失敗的概率

  • 如果你也踩到了這個坑,可以通過這個方案來解決。

    總結

    好了,總結一下,這篇文章我們主要講了 Redis 在「命令使用」、「數據持久化」、「主從同步」3 個方面可能存在的「坑」。

    怎么樣?有沒有顛覆你的認知呢?

    這篇文章信息量還是比較大的,如果你現在的思維已經有些「凌亂」了,別急,我也給你準備好了思維導圖,方便你更好地理解和記憶。

    希望你在使用 Redis 時,可以提前規避這些坑,讓 Redis 更好地提供服務。

    后記

    最后,我想和你聊一聊在開發過程中,關于踩坑的經驗和心得。

    其實,接觸任何一個新領域,都會經歷陌生、熟悉、踩坑、吸收經驗、游刃有余這幾個階段。

    那在踩坑這個階段,如何少踩坑?或者踩坑后如何高效率地排查問題呢?

    這里我總結出了 4 個方面,應該可以幫助到你:

    1) 多看官方文檔 + 配置文件的注釋

    一定要多看官方文檔,以及配置文件的注釋說明。其實很多可能存在風險的地方,優秀的軟件都會在文檔和注釋里提示你的,認真讀一讀,可以提前規避很多基礎問題。

    2) 不放過疑問細節,多思考為什么?

    永遠要保持好奇心。遇到問題,掌握剝絲抽繭,逐步定位問題的能力,時刻保持探尋事物問題本質的心態。

    3) 敢于提出質疑,源碼不會騙人

    如果你覺得一個問題很蹊蹺,可能是一個 Bug,要敢于提出質疑。

    通過源碼尋找問題的真相,這種方式要好過你看一百篇網上互相抄襲的文章(抄來抄去很有可能都是錯的)。

    4) 沒有完美的軟件,優秀軟件都是一步步迭代出來的

    任何優秀的軟件,都是一步步迭代出來的。在迭代過程中,存在 Bug 很正常,我們需要抱著正確的心態去看待它。

    這些經驗和心得,適用于學習任何領域,希望對你有所幫助。

    往期推薦

    云計算到底是誰發明的?

    從Docker的信號機制看容器的優雅停止

    低代碼發展專訪系列之三:低代碼平臺會成為企業數字化基礎設施么?

    內容整理志愿者招募了!

    點分享

    點收藏

    點點贊

    點在看

    總結

    以上是生活随笔為你收集整理的Redis 会遇到的「坑」,你踩过几个?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    国产一二三区在线观看 | 中文字幕在线视频一区 | 91在线资源 | 久久8| 27xxoo无遮挡动态视频 | 免费在线激情电影 | 蜜桃av观看 | 日本精品视频免费观看 | 中文在线中文资源 | 国产精在线| 久久久久亚洲国产 | 三日本三级少妇三级99 | 久久免费av电影 | 亚洲专区 国产精品 | 国产精品久久视频 | 在线视频一二三 | 国产精品123 | 99免在线观看免费视频高清 | 九九热免费精品视频 | 欧美一区二区三区在线观看 | 一区二区网 | 国产大陆亚洲精品国产 | 久久一区二区免费视频 | av网站免费线看精品 | 夜色资源站国产www在线视频 | 久久精品视频一 | 国产又粗又长的视频 | 精品综合久久久 | 视频三区在线 | 99精品国产免费久久久久久下载 | 色在线高清 | 91在线视频| 日韩网站在线看片你懂的 | 狠狠躁天天躁 | 国产手机在线播放 | 国产成人一区二区三区在线观看 | 色天天综合久久久久综合片 | 日韩中文字幕视频在线观看 | 国产精品久久久久999 | 天天夜操| 日韩特级黄色片 | 天天色婷婷 | 蜜桃视频精品 | 特级黄色片免费看 | 亚洲在线看 | 91av中文 | 91在线免费视频观看 | 久艹视频免费观看 | 精品国产中文字幕 | 国内精品久久久久 | 国产黄网在线 | 国产69精品久久99不卡的观看体验 | 毛片网站免费在线观看 | 中文字幕av在线播放 | 久久 精品一区 | 国产亚洲精品久久网站 | 午夜三级毛片 | 亚洲欧美少妇 | 欧美成人久久 | 在线不卡中文字幕播放 | 中文字幕一区二区三区在线播放 | 91片在线观看 | 天天草天天摸 | 蜜臀av麻豆 | 天天天干天天天操 | 国产区免费在线 | 日韩久久精品一区二区 | 日韩免费电影网 | 久热色超碰 | 操操综合网 | 999久久久免费精品国产 | 日韩在线观看电影 | 久草免费资源 | 中文字幕国产精品 | 99久久久久成人国产免费 | 国产黄色美女 | 日韩精品视频免费看 | 国产视频在线免费 | 亚洲午夜精品在线观看 | 久久99久久99久久 | 亚洲欧美日韩国产一区二区 | 五月激情六月丁香 | 超碰人人在线观看 | 狠狠色伊人亚洲综合网站色 | 国产一区欧美一区 | 黄色a在线观看 | 在线激情网 | 亚洲伊人色 | 特级毛片aaa | 成人av片在线观看 | 91久久人澡人人添人人爽欧美 | 成人黄色毛片 | 成人黄色大片网站 | 国产黄色网 | 超碰人人草人人 | 天天干视频在线 | 久久天堂亚洲 | 亚洲激情视频在线 | 国产91成人 | 国产成人精品一区二区三区在线观看 | 婷婷丁香七月 | 欧美成年人在线观看 | 亚洲aⅴ在线 | 色99视频| 国产精品一区二区62 | 在线播放 日韩专区 | 婷婷激情站 | 久久久精品视频网站 | 久久tv| 免费h精品视频在线播放 | 欧美亚洲国产一卡 | 99久久综合狠狠综合久久 | 狠狠综合久久 | 日韩免费成人 | 午夜在线免费视频 | 精品国产片 | 日韩一区二区三区观看 | 久久99精品波多结衣一区 | 成人福利在线播放 | 国产一二三精品 | 精品国产亚洲在线 | 五月婷婷综合色拍 | 国产精品久久视频 | 国产91精品一区二区麻豆网站 | 国产精品视频 | 亚欧洲精品视频在线观看 | 亚洲欧美国产视频 | 国产麻豆精品在线观看 | 中文字幕一区二区三区乱码在线 | 亚洲综合五月 | 黄色视屏免费在线观看 | 国产精品美女久久久久久免费 | 午夜精品一区二区三区视频免费看 | 激情五月婷婷激情 | 欧美日韩精品影院 | 精品高清美女精品国产区 | 欧美9999 | 国产精品剧情在线亚洲 | 国产特级毛片aaaaaaa高清 | 欧美精品久久久久久久久久白贞 | 国产精品久久久久久久久久尿 | 91精彩视频在线观看 | 免费观看www小视频的软件 | 久草在线这里只有精品 | 久久久久久久国产精品影院 | 亚洲一级片在线看 | 亚在线播放中文视频 | 一区二区理论片 | 一区二区精品在线观看 | 91九色蝌蚪| 国产精品男女啪啪 | 成 人 黄 色 片 在线播放 | 99在线免费视频观看 | 五月婷婷在线观看 | 亚洲视频网站在线观看 | 福利网址在线观看 | 日本中文字幕免费观看 | 亚洲国产成人av网 | 久久激情五月丁香伊人 | 久久久国产精品一区二区中文 | 日韩欧美一区二区三区在线观看 | 国产你懂的在线 | 99国产精品一区二区 | 久久免费黄色网址 | 日本精品一区二区三区在线观看 | 久99久中文字幕在线 | 玖玖999 | 日韩精品1区2区 | 久久久久亚洲精品成人网小说 | 国产综合在线视频 | 一级精品视频在线观看宜春院 | 99热最新精品 | 97在线免费观看视频 | 天天操天天操天天 | 久艹在线观看视频 | 久久精品视频在线播放 | 欧美性生活大片 | 日韩色爱 | 欧美色婷婷 | 日韩有色 | 九九九热视频 | 激情婷婷亚洲 | 波多野结衣网址 | av电影 一区二区 | 99婷婷狠狠成为人免费视频 | 美女av电影 | 日韩中文字幕免费看 | 欧美午夜理伦三级在线观看 | 色综合久久久久久久 | 欧美激情视频在线观看免费 | 亚洲精品永久免费视频 | 久久久久欠精品国产毛片国产毛生 | 亚洲国产中文字幕 | 丁香网婷婷 | 亚洲天堂精品视频 | 日韩欧美在线影院 | 国产精品中文字幕在线观看 | 国产精品久久久久久a | 手机看片 | 中国一级片在线观看 | 黄色软件在线观看 | 国产精品中文字幕在线 | 精品国产一区二区三区av性色 | 综合激情av | 天天av天天 | 99久久婷婷国产综合亚洲 | 国产精品美女久久久久久久久久久 | 成人在线免费视频 | 成人精品久久久 | 美女久久久 | 精品视频123区在线观看 | 成人久久久精品国产乱码一区二区 | 日韩精品在线免费播放 | 在线视频 一区二区 | 婷婷 中文字幕 | 午夜精品剧场 | 成人亚洲精品久久久久 | 天天操天天干天天综合网 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 亚洲欧美日韩国产一区二区三区 | 久草视频资源 | 国产欧美最新羞羞视频在线观看 | 丁香婷婷综合激情五月色 | 国产成人免费在线观看 | 四虎在线免费视频 | 久久久久久高潮国产精品视 | 欧美一级免费在线 | 在线观看国产福利片 | 毛片视频网址 | 天天夜夜狠狠操 | 国产成人综合在线观看 | 免费观看一级特黄欧美大片 | 人人爽人人爽人人片av | 一区二区三区在线免费播放 | 中文字幕免费高清 | www.婷婷com| 成人免费视频网 | 久久久久区 | 色综合久久久久综合 | 国产一区黄色 | 在线国产视频观看 | 91丝袜美腿| 欧美日韩不卡一区 | 国产九九热视频 | 亚洲另类视频在线观看 | 免费看片黄色 | 在线国产一区二区 | 在线国产中文字幕 | 国产精品久久久久久久久免费 | 亚洲一区二区三区在线看 | 亚洲国产精品女人久久久 | av福利网址导航 | 国产日韩av在线 | 亚洲高清视频在线观看免费 | 亚洲黄色影院 | 亚洲精品久久久蜜桃直播 | 欧美大香线蕉线伊人久久 | 精品v亚洲v欧美v高清v | 国产亚洲婷婷免费 | 久久精品一二三区白丝高潮 | 99在线高清视频在线播放 | 视频在线亚洲 | www.五月婷婷 | 国产黄色大全 | 国产精品99久久久久人中文网介绍 | 欧美久草网 | 天堂av在线网址 | 在线观看日韩精品 | 亚洲精品美女 | 在线精品视频免费观看 | 亚洲精品在| 色综合久久综合中文综合网 | 99视频在线精品国自产拍免费观看 | 999电影免费在线观看 | 四虎影视欧美 | 日本精品二区 | 在线成人中文字幕 | av福利在线看 | 日韩一区二区三免费高清在线观看 | 人人干人人做 | 玖草在线观看 | 日韩精品在线观看视频 | 日韩欧美综合 | 亚洲国产精品小视频 | 国产精品成人国产乱一区 | 天堂在线免费视频 | 日韩av黄 | 亚洲综合色视频在线观看 | 91久久丝袜国产露脸动漫 | 欧美一区二区伦理片 | 黄色小说免费在线观看 | 亚洲综合最新在线 | 亚洲高清在线观看视频 | 国产日韩视频在线播放 | 深爱激情五月网 | 日日夜夜免费精品视频 | 91精品视频免费观看 | 国产色网| 91丨九色丨国产女 | 日韩丝袜| 人人插人人做 | 亚洲精品国产综合99久久夜夜嗨 | 免费看一级黄色大全 | 欧美日韩中文在线观看 | 91亚洲狠狠婷婷综合久久久 | 五月激情丁香图片 | 91麻豆精品国产91久久久久 | 亚洲男男gaygayxxxgv | 99热在线观看 | 久久这里只有精品视频首页 | 国产精品大尺度 | 国产精品福利视频 | 91传媒91久久久 | 成人亚洲综合 | 美女av在线免费 | 欧美日韩性生活 | 日韩电影一区二区在线 | 日韩欧美视频 | 成人av片免费看 | 91九色porn在线资源 | 国产精品九九久久99视频 | 久久精品一区二区三 | 日韩成人精品 | av观看在线观看 | 国产午夜精品一区二区三区 | 久久精品人人做人人综合老师 | 国产伦理剧 | 日韩精品一区二区三区免费观看 | 日韩久久在线 | 96久久 | 黄色一级大片在线免费看产 | 五月天综合色激情 | 日韩在线电影一区 | 日韩激情影院 | 久久精精品 | 日韩精品在线播放 | 国产精品久久久久久久av电影 | 亚洲视频 视频在线 | 天天操夜夜摸 | 日韩精品欧美一区 | 成人av资源网| 人人干天天干 | 免费黄色在线播放 | 久久综合成人网 | 国产亚洲片| 国产一区免费 | 欧美激情综合五月色丁香 | 天天操天天干天天玩 | 伊人色**天天综合婷婷 | 日韩精品一区在线播放 | 欧美精品在线观看一区 | 91一区二区三区久久久久国产乱 | 国产v在线播放 | 色综合久久久久网 | 免费观看国产视频 | 久久97久久 | 久久人人插 | 最新av网址大全 | 国产亚洲视频在线 | 99久久久久国产精品免费 | 国产精品中文字幕在线播放 | 亚洲欧美视频网站 | 91精品国产一区二区三区 | 久久99国产精品久久 | 欧美极品在线播放 | 99精品在线免费 | 99精彩视频| 亚洲美女视频在线 | 国产99久久久国产精品成人免费 | 色999精品| 成人毛片一区 | 久久五月婷婷综合 | 91成人免费看| 五月天激情综合 | 成人中文字幕+乱码+中文字幕 | 亚洲国产精品成人va在线观看 | 精品久久久成人 | 亚洲成人在线免费 | 成人免费网站视频 | 免费美女av| 久久超| 亚洲一级理论片 | 91精品视频在线免费观看 | 91免费黄视频 | 亚洲欧美国产精品18p | 成人av一区二区兰花在线播放 | 久久污视频 | 国产热re99久久6国产精品 | 久久精品视频免费 | 日日干综合| 欧美一二三四在线 | 日日夜夜精品 | 在线观看黄色免费视频 | 国产91精品一区二区麻豆网站 | 国产h在线观看 | av丝袜在线 | 97色在线观看 | 97夜夜澡人人爽人人免费 | 免费网站色 | 国产一区不卡在线 | 久久久久久久久国产 | 日本精品va在线观看 | 国产自在线 | 日本爽妇网 | 国产精品一区二区果冻传媒 | 四虎永久免费在线观看 | 超碰在线98 | 日日夜夜天天射 | 人人添人人澡 | 蜜臀av性久久久久av蜜臀三区 | 成人免费av电影 | 天天爽夜夜爽人人爽曰av | 亚洲综合欧美精品电影 | .国产精品成人自产拍在线观看6 | 国产成人精品一区二区三区在线观看 | 精品久久久久国产免费第一页 | 久久99精品国产麻豆婷婷 | 免费看的国产视频网站 | 免费亚洲成人 | 日韩亚洲在线 | 911av视频| 99视频导航 | 中文视频在线看 | 精品v亚洲v欧美v高清v | 国产亚洲精品美女 | 成人av播放 | 日韩av不卡在线观看 | 91麻豆精品国产91久久久更新时间 | 开心激情网五月天 | 日本久久不卡视频 | 国产亚洲精品v | 久久免费a| 国产在线精品福利 | 夜夜摸夜夜爽 | 中文字幕a∨在线乱码免费看 | 久草在线视频首页 | 日本中文一区二区 | 91精品久久香蕉国产线看观看 | 国产精品av在线免费观看 | 国产精品2019 | 久久免费精品视频 | 91在线在线观看 | 免费手机黄色网址 | 欧美久久久久久久久久久 | 久久婷婷一区二区三区 | 色综合久久五月 | 亚洲乱码一区 | 国产精品观看视频 | 国产精品美女久久久久久久久久久 | 欧美精品一区二区三区一线天视频 | 亚洲精品国产精品国自产观看 | av资源免费看 | 天天天干天天天操 | 欧美黑人性猛交 | 黄视频色网站 | 国产精品96久久久久久吹潮 | 天天视频色| 91成人精品一区在线播放 | 中文字幕视频在线播放 | 亚洲国内精品视频 | 99精品国产在热久久 | 国产精品免费在线播放 | 日本中文一级片 | 黄色aaa毛片 | 国产精品国产三级国产 | 国产精品精品国产 | 成人av一二三区 | 国产少妇在线观看 | 亚洲国产一区二区精品专区 | 亚洲区精品 | 激情五月五月婷婷 | 日日夜夜骑 | 国产精品一区二区三区在线看 | 中文字幕亚洲综合久久五月天色无吗'' | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产手机在线视频 | 美女网站在线 | 2018亚洲男人天堂 | 欧美日韩午夜 | 日韩精品一区二区三区免费视频观看 | 免费av在线| 在线观看av免费观看 | 三级黄色片在线观看 | 五月天婷亚洲天综合网精品偷 | www.亚洲精品视频 | 成全在线视频免费观看 | 亚洲伊人色| 成年人视频在线免费 | 亚洲一区二区高潮无套美女 | 91福利视频网站 | 久久久久欠精品国产毛片国产毛生 | 黄色成人影视 | 在线中文字幕电影 | 色噜噜狠狠色综合中国 | 国产精品成久久久久 | 麻豆视频免费在线播放 | 亚洲精品福利视频 | 国内精品久久久久国产 | 久久五月天综合 | 在线观看黄色av | 久草精品网 | 狠狠躁夜夜a产精品视频 | 99 色| 国内综合精品午夜久久资源 | 九九99 | 国产高清黄色 | 中文字幕在线视频国产 | 91伊人久久大香线蕉蜜芽人口 | 国产三级午夜理伦三级 | 日韩三级视频在线观看 | 久久黄色片 | 欧美激情va永久在线播放 | 久久99精品国产麻豆宅宅 | 国产成人精品一区二区在线观看 | 97人人人人 | 91看片在线看片 | 欧美日本啪啪无遮挡网站 | 99视频精品 | 免费看片网址 | 成人免费共享视频 | 成 人 黄 色 视频免费播放 | 亚洲精品免费在线 | 美女精品国产 | 激情综合色播五月 | 亚洲乱码精品久久久久 | 毛片一区二区 | 日韩av中文字幕在线 | 中文字幕在线一区观看 | 婷婷成人亚洲综合国产xv88 | 国产精品一区二区三区久久久 | 久久久久亚洲国产 | 91插插插免费视频 | 久章草在线观看 | 黄色资源在线观看 | 久久有精品 | 亚洲精品视频在线观看视频 | 99免费在线视频观看 | 国产黄在线| 免费av网站在线 | 97在线观看视频免费 | 日本高清免费中文字幕 | 免费看黄色91 | 国产精品 亚洲精品 | 在线a亚洲视频播放在线观看 | 996久久国产精品线观看 | 国产精品video爽爽爽爽 | 美女视频黄色免费 | 免费看一级特黄a大片 | 免费不卡中文字幕视频 | 久草视频在线看 | 亚洲精品高清一区二区三区四区 | 久久看看 | 综合激情av | 天堂在线视频免费观看 | 欧美日韩性视频在线 | 精品国产自在精品国产精野外直播 | 精品久久一区二区三区 | 99久久99视频 | 夜夜躁狠狠躁日日躁 | 亚洲日本va午夜在线影院 | 亚洲精品综合一区二区 | 国产精品不卡一区 | 黄色三级在线观看 | 超碰97免费在线 | 亚洲成人资源在线 | 成人黄色中文字幕 | 日韩高清免费无专码区 | 国产一区二区三区黄 | 最新超碰| 日本在线观看一区二区三区 | 色婷婷av一区二 | av韩国在线| 国产精品日韩欧美 | 久久成人在线视频 | 99爱国产精品 | 五月色婷 | 天堂av免费看 | 丁香五月亚洲综合在线 | 日日夜夜狠狠操 | 国产精品福利无圣光在线一区 | 在线播放日韩av | 在线观看91av | 久草观看视频 | 亚洲精品久久久久58 | 亚洲精品乱码白浆高清久久久久久 | 欧美精品亚洲精品日韩精品 | 欧美久久久久久久 | 又黄又刺激又爽的视频 | 久久夜色精品国产欧美乱 | 精品少妇一区二区三区在线 | 99婷婷狠狠成为人免费视频 | 欧美另类sm图片 | 国产精品正在播放 | 国产专区在线看 | 二区精品视频 | 日韩成人在线一区二区 | 国产精品久久久久久久久久东京 | 成人a视频片观看免费 | 久久伊人八月婷婷综合激情 | 午夜av激情| 中文字幕国产视频 | 国产精品视频专区 | 国产美女久久久 | 日韩毛片在线播放 | 日韩中文字幕网站 | 国产午夜精品久久久久久久久久 | 午夜免费福利片 | 97视频免费观看2区 亚洲视屏 | av亚洲产国偷v产偷v自拍小说 | 亚洲精品毛片一级91精品 | 天堂va欧美va亚洲va老司机 | 久久男人免费视频 | 2019中文在线观看 | 日女人免费视频 | 国产欧美在线一区 | 欧美一级片在线观看视频 | 99麻豆久久久国产精品免费 | 亚洲婷婷伊人 | 精品一区二区在线免费观看 | 亚州中文av| 国产自产高清不卡 | 麻豆视频在线观看免费 | 久久婷婷一区二区三区 | 国产精品久久久久久吹潮天美传媒 | 91中文在线观看 | 激情五月综合 | 亚洲jizzjizz日本少妇 | 国产高清成人在线 | 91精品国 | 久草在线视频精品 | 一级免费黄色 | 色91在线视频 | 欧美成人高清 | www.午夜色.com | 日韩av高清 | 日韩精品免费一区二区 | 国产网站av | 高清久久久久久 | 在线观看aaa | 69视频永久免费观看 | 亚洲精品9| 免费国产黄线在线观看视频 | 麻豆传媒视频在线播放 | 亚洲一区久久 | 激情婷婷 | 一级电影免费在线观看 | 又黄又刺激的网站 | 天天干天天草 | 狠狠地日 | 亚洲香蕉在线观看 | 午夜三级大片 | 免费看国产a | 欧美日韩性| 国产在线观看污片 | 黄色在线视频网址 | 国产精品va在线 | 午夜久久 | 天天爱天天射天天干天天 | 亚洲精品乱码久久久久v最新版 | 久久精品免费观看 | 亚洲aⅴ一区二区三区 | 久久在线免费 | 日b视频在线观看网址 | 久操97 | 欧美日韩精品电影 | 国产精品正在播放 | 中文字幕一区二区在线播放 | www.久久婷婷 | 国产成人久久精品 | 中文字幕文字幕一区二区 | 手机看片99 | 久久精品亚洲综合专区 | 最近中文字幕视频网 | 麻豆一区在线观看 | 黄色av免费电影 | 伊人色综合久久天天网 | 91精品国产综合久久福利不卡 | 在线亚洲成人 | 国模一区二区三区四区 | 在线观看mv的中文字幕网站 | 国产亚洲精品久久久久久 | 国内精品久久久久久 | 激情综合网五月激情 | 在线精品视频免费观看 | 操操操人人| a爱爱视频| 一区二区三区电影 | 久久久精品小视频 | 国产精品久久久视频 | 久久男人中文字幕资源站 | 欧美国产91| 91大神电影 | 午夜国产在线观看 | 四虎成人精品在永久免费 | 欧美日韩精品免费观看 | 国产a高清 | 欧美日韩在线观看视频 | 国产乱码精品一区二区三区介绍 | 日韩视频在线观看免费 | 欧美综合国产 | 中文字幕欧美日韩va免费视频 | 麻豆传媒视频在线播放 | 在线色吧 | 综合久久久久久久久 | 欧美日本不卡 | 人人爽人人爽人人片av | 99久久这里只有精品 | 在线观看黄色 | 天天干一干 | 久久激情电影 | 黄a网| 亚洲国产成人在线播放 | 日韩国产精品一区 | 黄av资源 | 中文字幕一区二区三区四区久久 | 国产精品久久一区二区三区, | 亚洲精品毛片一级91精品 | 国产中文字幕视频在线观看 | 超碰在线98 | 一级片免费观看视频 | 日韩久久电影 | 正在播放国产一区二区 | 中文字幕第 | 色婷婷综合久久久久中文字幕1 | 日本bbbb摸bbbb | 亚洲成人黄色在线观看 | 久久人91精品久久久久久不卡 | 国产不卡精品视频 | 色综合激情网 | 国产精品久久久久久久久久久久午 | 国产精品成人自产拍在线观看 | 色在线观看网站 | 色综合色综合久久综合频道88 | 91精品1区 | 天天se天天cao天天干 | 六月丁香激情网 | 亚洲视屏在线播放 | 国产一区二区在线免费视频 | 国产一区二区三区 在线 | 色五月成人 | .国产精品成人自产拍在线观看6 | 美女视频是黄的免费观看 | 黄色特级片 | 亚洲伊人色 | 亚洲免费在线播放视频 | 中文字幕在线高清 | 中文av一区二区 | 色射爱| 新版资源中文在线观看 | 狠狠色狠狠综合久久 | 麻豆影视在线观看 | 夜夜躁狠狠躁日日躁视频黑人 | av高清免费在线 | 国产美女视频免费 | 麻豆一区二区三区视频 | 99在线国产 | 欧美另类重口 | 久久五月激情 | 久久这里只有精品1 | 黄色小网站在线 | 国产欧美久久久精品影院 | 黄色网址国产 | 久久黄色a级片 | 麻豆国产在线视频 | 国产小视频91 | 欧美成人精品在线 | 91成品人影院| 成人91在线观看 | 欧美日韩一区久久 | 在线观看视频在线观看 | 免费看黄的视频 | 色婷婷视频在线 | 超碰在线观看99 | www.超碰97.com| 日韩欧美电影在线 | 国产99久久九九精品免费 | 国产夫妻自拍av | 91在线欧美| 一级全黄毛片 | 国产精品久久一卡二卡 | 99久久综合国产精品二区 | 国产高清视频免费最新在线 | 久久公开免费视频 | 亚洲成人家庭影院 | av资源在线看 | 91.dizhi永久地址最新 | 亚洲精品自拍 | 日韩av一区二区在线影视 | 久久久www成人免费精品 | 久久福利国产 | 亚洲免费永久精品国产 | 在线观看免费色 | 一区二区三区福利 | 亚洲欧美怡红院 | 99久久精品无码一区二区毛片 | 久久爱资源网 | 五月色综合 | 韩日精品视频 | 国产亚洲精品久久久久久无几年桃 | 五月综合激情网 | 人人爽爽人人 | 久久艹国产视频 | 少妇bbbb| 天天天综合 | 91久久爱热色涩涩 | 精品国产精品久久一区免费式 | 天天操天天干天天插 | 日本精品视频免费 | 精品国产乱码久久久久久1区2匹 | 99精品视频在线播放观看 | 国产精品成人国产乱一区 | 97精品久久人人爽人人爽 | www久久国产 | 亚洲资源视频 | 日韩高清免费在线 | 精品国产一区二区三区蜜臀 | 成人a v视频| 日韩一级片网址 | 日韩影片在线观看 | 婷色| 五月婷在线观看 | 国产精品一区二区av日韩在线 | 在线观看亚洲国产精品 | 亚洲国产免费 | 韩日成人av| 久久涩涩网站 | 高清av中文在线字幕观看1 | 91成人精品一区在线播放69 | 天天天操天天天干 | 欧美激情第一区 | 在线观看视频三级 | 狠狠躁天天躁综合网 | av电影一区二区三区 | 四川妇女搡bbbb搡bbbb搡 | 国产精品99久久久久久小说 | 欧女人精69xxxxxx | 手机看片国产日韩 | 人人精品久久 | 国产美女网站在线观看 | 日韩美av在线 | 国产亚洲成人网 | 欧美午夜一区二区福利视频 | 日韩乱码在线 | 亚洲精品在线观看视频 | 国产一级性生活 | 国产精品一区二区果冻传媒 | 五月婷婷在线视频观看 | av电影在线观看 | 91免费高清 | 久久黄色网页 | 婷婷色中文字幕 | 五月天色丁香 | 国产精品免费成人 | 亚洲春色综合另类校园电影 | 国产a高清| 福利一区二区在线 | 人人澡人 | 丝袜av网站 | 岛国av在线| 国产精品免费一区二区三区在线观看 | 久久成人18免费网站 | 看片的网址 | 久久国产精品偷 | 国产免费观看久久 | 91人人澡人人爽人人精品 | 久久尤物电影视频在线观看 | 国产精品免费不 | 亚洲一区免费在线 | 国产乱老熟视频网88av | 久久精品久久国产 | 激情视频亚洲 | 国产精品久久久视频 | 国产成人黄色av | 99久久精品无码一区二区毛片 | 日韩在线播放av | 日日夜夜精品视频 | 99在线免费观看 | 91精品亚洲影视在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 91在线免费观看网站 | 夜夜骑日日 | 在线成人av | 亚洲情感电影大片 | 天天激情综合网 | 亚洲视频,欧洲视频 | 深爱激情五月婷婷 | 97成人超碰| 狠狠色丁香婷婷综合久久片 | 国产精品美女免费 | 欧美日韩一区二区三区在线免费观看 | 日韩久久久久久 | 中文字幕第一页在线视频 | 97在线公开视频 | 夜夜操夜夜干 | 久久影院中文字幕 | a v在线视频 | 欧美日韩在线播放 | 免费a视频在线观看 | 五月天电影免费在线观看一区 | 日韩3区 | 久久五月天综合 | a天堂中文在线 | 九九在线免费视频 | 麻豆影视在线播放 | 午夜精品一二区 | 丁香在线观看完整电影视频 | 午夜在线日韩 | 久久丁香 | 激情婷婷在线观看 | 三级av免费观看 | 91精品啪在线观看国产81旧版 | 在线观看激情av | 91人人澡 | 久久精品99精品国产香蕉 | 黄色在线视频网址 | 免费高清在线视频一区· | 99久久99久久 | 免费亚洲视频在线观看 | 欧美亚洲国产一卡 | 国产成人三级在线 | 中文字幕国产一区 | 国产成人免费网站 | 黄在线免费观看 | 成在人线av | 中文字幕一区2区3区 | 精品国产一区二区三区久久 | 在线播放 一区 | 成年人黄色大片在线 | 久久久久国产成人精品亚洲午夜 | 久草在线久草在线2 | 美女精品网站 | 成人在线观看日韩 | 色综合久久88色综合天天6 | 91传媒91久久久 | 欧美国产日韩一区二区三区 | 久草在线免费在线观看 | 美女久久久久 | 日韩在线免费电影 | 精品国产成人在线 | 精品在线观 | 日日弄天天弄美女bbbb | 五月天久久精品 | 国产视频2区 | 国产三级精品在线 | 欧美日韩一区二区三区视频 | 久久婷婷五月综合色丁香 | 久草免费新视频 | 99免费精品视频 | 免费在线色电影 | 成人中文字幕在线 | 欧美日韩中文在线视频 | 中文字幕中文字幕中文字幕 | 天天干,天天草 | 国产九九在线 | 丁香婷婷深情五月亚洲 | 经典三级一区 | 亚洲国产精品视频 | 国产一级精品绿帽视频 | 人人看看人人 | 久久免费观看视频 | 91精品久久久久久久久久久久久 | 成人av网站在线观看 | 97av影院| 人人藻人人澡人人爽 | 色欧美日韩 | 亚洲视频综合在线 | 五月av在线| 丁香久久五月 | 99视频在线精品国自产拍免费观看 | 在线国产一区 | 亚洲综合在线发布 | av免费在线网站 | 色综合网 | 国产在线播放一区 | 久久亚洲区 | 国产精品99久久久久人中文网介绍 | 日韩免费一区二区 | 国产一级免费在线 | 99视频国产精品 | 亚洲精品在线观 | 国产玖玖精品视频 | 夜夜夜 | 亚洲专区视频在线观看 | 91最新网址在线观看 | 91激情在线视频 | 五月婷婷香蕉 | 久久精品亚洲一区二区三区观看模式 | 欧美日韩国产一二三区 | 在线观看国产日韩欧美 | 国产视 | 欧美日韩视频一区二区 | www.av免费观看 | 美女很黄免费网站 | 久久99久久99精品免观看软件 | 成人亚洲精品久久久久 | 欧美巨大 | 日韩在线观看你懂的 | 精品久久精品 |