久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Redis生產(chǎn)實踐:緩存一致性、分布式鎖與主從復(fù)制避坑

Redis生產(chǎn)實踐:緩存一致性、分布式鎖與主從復(fù)制避坑 Redis 幾乎是后端面試的必考科目緩存一致性、分布式鎖、持久化、主從復(fù)制、內(nèi)存淘汰網(wǎng)上成套的八股文背下來二十分鐘能把面試官答得頻頻點頭。但我?guī)н^的新人里面試分?jǐn)?shù)最高的那個把 Redis 接進項目第一周就出了一次線上事故用戶改完昵稱刷新頁面又變回舊的過了十幾秒才恢復(fù)。排查下來代碼里寫的正是八股文標(biāo)準(zhǔn)答案——先更新數(shù)據(jù)庫再刪除緩存。問題不在結(jié)論而在于他把結(jié)論當(dāng)成了萬能公式完全沒有考慮主從延遲、并發(fā)讀寫和刪除失敗的場景。這篇東西不打算再給你抄一遍面試題答案。我更想做的是把那些被壓縮成一句話的標(biāo)準(zhǔn)答案重新展開還原它們成立的前提條件再補上真正落到生產(chǎn)環(huán)境時會遇到的邊界情況。內(nèi)容覆蓋數(shù)據(jù)類型選擇、緩存一致性方案、分布式鎖的實現(xiàn)演進、RDB/AOF 與主從復(fù)制細節(jié)、大 key 熱 key 治理以及安裝部署和監(jiān)控這些動手環(huán)節(jié)。不管你是正在準(zhǔn)備面試還是已經(jīng)接手了一個跑著 Redis 的項目都能從里面找到能直接用的判斷依據(jù)。1. 背得滾瓜爛熟的答案為什么一上生產(chǎn)就變形1.1 八股答案的通用毛病結(jié)論正確前提被吃掉了八股文最大的問題是它把結(jié)論和前提一起壓成了一句話而背誦的人往往只記住了后半截。比如Redis 是單線程的所以快這句話在 Redis 6.0 之前基本成立但真正的快來自內(nèi)存操作、IO 多路復(fù)用和高效的數(shù)據(jù)結(jié)構(gòu)而不是單線程這個屬性本身Redis 6.0 之后網(wǎng)絡(luò) IO 已經(jīng)多線程化了命令執(zhí)行仍然是單線程。如果你在面試?yán)镏淮饐尉€程所以快遇到追問就答不上來如果在生產(chǎn)里按單線程所以不會并發(fā)問題去做設(shè)計那更危險——單線程指的是命令執(zhí)行不是你的業(yè)務(wù)邏輯。再舉一個例子Redis 支持事務(wù)。八股文里背的是 MULTI、EXEC、DISCARD、WATCH 四個命令。但真實的語義是Redis 事務(wù)不支持回滾某條命令執(zhí)行失敗其余命令照樣執(zhí)行它只是把命令打包一次性、按順序執(zhí)行中間不會被其他客戶端插隊。很多人第一次用事務(wù)是因為想實現(xiàn)檢查余額再扣減這類邏輯結(jié)果發(fā)現(xiàn)并發(fā)下依然超賣。原因很簡單事務(wù)的原子性是執(zhí)行原子不是檢查與執(zhí)行之間的隔離。這類理解偏差就是八股答案最常見的失真方式。我自己的經(jīng)驗是每背一條 Redis 結(jié)論就強迫自己問三個問題這條結(jié)論依賴什么前提前提被破壞時會發(fā)生什么我在代碼里怎么檢測前提是否被破壞這三個問題問下來八股就變成了工程判斷。1.2 我遇到的第一次翻車更新數(shù)據(jù)庫和更新緩存的順序回到開頭那次事故。當(dāng)時的代碼邏輯是標(biāo)準(zhǔn)的 Cache Aside寫請求先更新 MySQL再DEL對應(yīng)的緩存 key讀請求先查緩存未命中再查 MySQL 并回填。單機壓測完全沒問題線上卻出現(xiàn)了舊值復(fù)活。原因藏在主從復(fù)制里。我們的 MySQL 是一主兩從寫走主庫讀走從庫。寫請求更新主庫成功后立刻刪緩存緊接著一個讀請求進來緩存未命中去從庫讀——而從庫的復(fù)制還沒追上來讀到的仍然是舊值然后這個舊值被回填進了緩存。之后所有讀請求都命中這個舊值直到下一次寫入把它刪掉。整個過程不超過 100 毫秒但影響持續(xù)了十幾秒。這個坑八股文里通常不會提因為八股文默認(rèn)數(shù)據(jù)庫讀寫都在同一個節(jié)點。一旦引入主從刪除緩存和讀庫回填之間的窗口就被放大了。解決辦法也不復(fù)雜要么讀寫相關(guān)的請求強制走主庫犧牲一點擴展性要么給緩存設(shè)置一個較短的兜底 TTL讓臟數(shù)據(jù)自己過期要么引入 binlog 訂閱做緩存失效比如 Canal 這類方案。我最后選的是回填時加短 TTL 關(guān)鍵業(yè)務(wù)讀寫走主庫的組合改動小風(fēng)險可控。1.3 一份自查清單把八股答案翻譯成生產(chǎn)約束踩過幾次坑之后我整理了一份對照表每次評審涉及 Redis 的代碼都會過一遍。它不復(fù)雜但能擋住大部分低級事故。八股說法生產(chǎn)里必須補上的前提常見的兜底手段先更新 DB 再刪緩存讀寫是否走同一節(jié)點、刪除是否可能失敗短 TTL、binlog 訂閱、重試刪除Redis 是單線程的指的是命令執(zhí)行業(yè)務(wù)邏輯仍并發(fā)用 Lua 或SET NX保證操作原子分布式鎖用SETNX必須原子設(shè)置過期時間改用SET key val NX PX msAOF 更安全取決于appendfsync的取值一般用everysec權(quán)衡性能緩存能提升性能前提是命中率足夠高監(jiān)控命中率低于閾值就排查 key 設(shè)計主從能提高可用性存在復(fù)制延遲且不是自動故障轉(zhuǎn)移主從 哨兵或直接上集群注意表格里的兜底手段沒有一個是萬能的它們的共同點是降低故障持續(xù)時間而不是杜絕故障。做緩存設(shè)計時先接受一定會有不一致窗口這個事實再考慮窗口有多長、能不能被業(yè)務(wù)容忍。2. 五種基礎(chǔ)類型背后的真實選擇邏輯2.1 先想清楚數(shù)據(jù)長什么樣再決定用哪種類型八股文講數(shù)據(jù)類型通常是一句String 存字符串Hash 存對象List 存列表Set 存集合ZSet 存有序集合。背是背下來了用的時候還是全用 String把對象序列化成 JSON 塞進去。這樣也能跑但會白白浪費 Redis 的一個核心優(yōu)勢部分讀寫。舉個具體場景。用戶信息有 id、昵稱、頭像、積分、等級等十幾個字段如果整體序列化成 JSON 存在 String 里要改一個昵稱就得把整個 JSON 讀出來、反序列化、改字段、再序列化寫回去。這段時間里如果另一個請求改了積分就會互相覆蓋。換成 Hash 之后HSET user:1001 nickname 新昵稱只動一個字段互不干擾而且內(nèi)存占用通常比 JSON 更小小 Hash 會使用緊湊編碼。再比如排行榜。用 List 也能實現(xiàn)但每次查詢排名都要遍歷ZSet 天生帶 score 和排名ZADD更新、ZREVRANGE取 Top N、ZREVRANK查排名都是 O(log N)。再比如統(tǒng)計某篇文章的獨立訪客這種去重需求Set 能做但用戶量大了內(nèi)存會爆HyperLogLog 更合適——誤差 0.81%內(nèi)存固定 12KB 左右。我的判斷順序是這樣的先看數(shù)據(jù)是不是整體讀寫String、字段級讀寫Hash、有順序且需要兩端操作List / Stream、需要去重Set、需要按分?jǐn)?shù)排序或范圍查詢ZSet。定下類型之后再考慮底層編碼和內(nèi)存。2.2 底層編碼的切換閾值決定了你的內(nèi)存賬單同樣是 ZSet元素少的時候用的是 ziplistRedis 7 里改叫 listpack元素多或者單個元素超過閾值就轉(zhuǎn)成 skiplist。這兩者的內(nèi)存差距可能有三到五倍。八股文一般只會說小數(shù)據(jù)量用壓縮列表大數(shù)據(jù)量用跳表但不會告訴你閾值在哪、怎么調(diào)。相關(guān)配置項在 redis.conf 里是這樣的# ZSet 使用 listpack 編碼的條件Redis 7.x 稱謂 zset-max-listpack-entries 128 zset-max-listpack-value 64 # Hash hash-max-listpack-entries 128 hash-max-listpack-value 64 # List list-max-listpack-size 128 # Set元素全是整數(shù)且數(shù)量不超過閾值時用 intset set-max-intset-entries 512這些值不是越大越好。調(diào)大閾值小對象的內(nèi)存占用會下降但單次操作時因為要整體重新分配內(nèi)存延遲會上升。我做過一次實測把hash-max-listpack-entries從 128 調(diào)到 512某業(yè)務(wù)的內(nèi)存下降了約 18%但 P99 寫延遲從 0.4ms 漲到了 0.9ms。對延遲不敏感、內(nèi)存緊張的場景值得調(diào)對延遲敏感的場景就別動。提示轉(zhuǎn)換是單向的一旦從緊湊編碼轉(zhuǎn)成跳表或哈希表即使后來元素減少也不會自動轉(zhuǎn)回去除非刪除并重建 key。所以如果某個 key 會周期性膨脹考慮給它加上定時重建的邏輯。2.3 被八股文漏掉的那幾個類型Bitmap、HyperLogLog、GEO、Stream基礎(chǔ)五類型之外Redis 還提供了幾個特殊結(jié)構(gòu)它們在特定場景下能把復(fù)雜度和內(nèi)存都降一個量級。Bitmap 本質(zhì)是 String但可以用位操作。簽到場景特別典型一個用戶一年 365 天用 Bitmap 只需要 46 字節(jié)SETBIT sign:1001 20240315 1打卡BITCOUNT統(tǒng)計總天數(shù)BITOP做多用戶聚合。如果用 Set 存日期字符串一個用戶一年就要幾十 KB。HyperLogLog 用來做基數(shù)統(tǒng)計PFADD添加、PFCOUNT估算。它的特點是內(nèi)存固定、有誤差、不支持刪除單個元素。適合UV 統(tǒng)計搜索結(jié)果去重計數(shù)這類不要求精確的場景。要注意的是PFCOUNT在多 key 合并時會比較慢因為它要把多個 HLL 結(jié)構(gòu)合并計算。GEO 是建立在 ZSet 之上的地理位置結(jié)構(gòu)GEOADD存經(jīng)緯度GEOSEARCH按半徑或矩形查詢。做附近的店鋪這類功能不用自己算球面距離了。Stream 是 5.0 引入的消息隊列結(jié)構(gòu)有消費者組、消息 ID、ACK 機制。它比 List 實現(xiàn)的簡易隊列更完整但也不是專業(yè) MQ 的替代品——沒有復(fù)雜的重試策略、死信隊列需要自己實現(xiàn)。這幾個結(jié)構(gòu)八股文里出現(xiàn)頻率不高但面試?yán)镆坏﹩柕侥氵€知道哪些數(shù)據(jù)結(jié)構(gòu)能講清楚它們的適用邊界比背定義有用得多。3. 緩存一致性三種方案的真實差異3.1 三種更新順序的失效概率到底差在哪關(guān)于緩存和數(shù)據(jù)庫的一致性網(wǎng)上流傳的方案主要有三種先更新 DB 再刪緩存、先刪緩存再更新 DB、先更新 DB 再更新緩存。八股文的結(jié)論一般是用第一種但很少解釋為什么。先看先更新緩存在更新 DB。這個方案的問題最明顯兩個并發(fā)寫請求A 先更新緩存為值 2B 后更新緩存為值 3但數(shù)據(jù)庫層面 B 可能先落庫、A 后落庫最終數(shù)據(jù)庫是 2、緩存是 3長期不一致。而且如果緩存更新成功、數(shù)據(jù)庫更新失敗臟數(shù)據(jù)就留在緩存里了。再看先刪緩存再更新 DB。這個方案在并發(fā)下有個經(jīng)典漏洞請求 A 刪除緩存然后去更新數(shù)據(jù)庫在 A 更新完成之前請求 B 進來讀緩存未命中讀到數(shù)據(jù)庫里的舊值回填緩存之后 A 才更新完數(shù)據(jù)庫。結(jié)果緩存里是舊值數(shù)據(jù)庫里是新值。要堵住這個漏洞需要在 A 更新完之后再刪一次緩存也就是延遲雙刪。最后是先更新 DB 再刪緩存。這個方案的失效窗口更小但依然存在就是我前面遇到的主從延遲問題刪除緩存之后、主從同步完成之前的讀請求會把舊值回填。理論上要出現(xiàn)這個情況需要讀請求恰好在這個窗口內(nèi)到達概率不高但現(xiàn)實中確實會發(fā)生。方案主要風(fēng)險失效窗口是否需要額外機制先更新 DB 再更新緩存并發(fā)寫覆蓋、更新緩存的成本高大不建議采用先刪緩存再更新 DB讀請求回填舊值大需要延遲雙刪先更新 DB 再刪緩存主從延遲導(dǎo)致回填舊值小短 TTL 或 binlog 訂閱3.2 延遲雙刪的延遲時間怎么算不是拍腦袋很多人寫延遲雙刪延遲時間直接寫 500 毫秒或者 1 秒問他為什么答網(wǎng)上都這么寫。這個值其實是可以算的。延遲時間要覆蓋的是從第一次刪緩存到數(shù)據(jù)庫更新完成并被讀到新值這段時間主要包括三部分主從復(fù)制的延遲、業(yè)務(wù)更新數(shù)據(jù)庫本身的耗時、以及可能的網(wǎng)絡(luò)抖動。前兩項可以監(jiān)控MySQL 的Seconds_Behind_Master或者SHOW SLAVE STATUS里的延遲加上業(yè)務(wù) SQL 的 P99 耗時。假設(shè)主從延遲 P99 是 30ms更新 SQL 的 P99 是 20ms那么一次延遲刪除至少要覆蓋 50ms取兩倍余量就是 100ms。如果主從延遲經(jīng)常抖到幾百毫秒那延遲雙刪本身就不適合因為你要延遲很久才能刪第二次而且第二次刪除還可能失敗。我的做法是分兩檔主從延遲穩(wěn)定的業(yè)務(wù)用 200ms 左右的延遲刪除配合 5 到 10 分鐘的緩存 TTL 兜底主從延遲不穩(wěn)定的業(yè)務(wù)干脆把讀請求強制路由到主庫用一點性能換一致性。另外第二次刪除一定要放在異步線程或者延時隊列里做不能阻塞主流程并且刪除失敗要能重試。3.3 穿透、擊穿、雪崩三個病的藥方不能混用這三個詞長得像但成因完全不同方案也不能互換。緩存穿透是查詢一個數(shù)據(jù)庫里也不存在的 key每次請求都穿過緩存打到數(shù)據(jù)庫。典型來源是惡意刷接口或者業(yè)務(wù)上用了自增 ID 之外的隨機標(biāo)識。方案有兩個一是把空結(jié)果也緩存起來設(shè)置較短的 TTL比如 60 秒二是用布隆過濾器提前攔截把所有可能存在的 key 預(yù)先放進去查詢前先判斷。注意布隆過濾器有誤判率判斷存在時可能出錯判斷不存在時一定準(zhǔn)確。所以它的正確用法是說沒有就一定沒有說有不一定有。另外它不支持刪除元素如果要支持刪除得換成計數(shù)布隆過濾器或者定期重建。緩存擊穿是某個熱點 key 突然過期高并發(fā)請求同時打到數(shù)據(jù)庫。方案有兩個互斥鎖只讓一個請求去查庫回填其他請求短暫等待或返回舊值邏輯過期key 本身不設(shè) TTL而是把過期時間寫在 value 里命中后判斷是否過期過期則異步更新當(dāng)前請求先返回舊值。緩存雪崩是大批 key 在同一時刻過期或者 Redis 實例整體不可用。前者通過給 TTL 加隨機擾動解決比如基礎(chǔ) 30 分鐘加上 0 到 5 分鐘的隨機值后者要靠多級緩存、集群部署、限流熔斷來解決本質(zhì)上是可用性問題不是緩存設(shè)計問題。4. 分布式鎖從 SETNX 到 Redlock 的實際演進4.1 從 SETNX 到 SET NX PX原子性這一步省不得分布式鎖的經(jīng)典八股寫法是SETNX lock:order:1001 1 EXPIRE lock:order:1001 30這兩條命令分開執(zhí)行中間如果服務(wù)重啟或者網(wǎng)絡(luò)斷開EXPIRE沒執(zhí)行成功鎖就永遠不過期后續(xù)所有請求全部阻塞。這個坑很多資料都會提正確寫法是把兩條合并成一條原子命令SET lock:order:1001 requestId NX PX 30000這里有幾個細節(jié)值得展開。第一value 必須是唯一標(biāo)識比如 UUID 或者機器標(biāo)識 線程 ID因為解鎖的時候要校驗這把鎖是不是自己加的。第二用PX而不是EX毫秒粒度更適合控制鎖的過期時間。第三NX保證只有 key 不存在時才設(shè)置成功。4.2 鎖續(xù)期、看門狗以及業(yè)務(wù)沒執(zhí)行完鎖先過期設(shè)置了 30 秒過期如果業(yè)務(wù)執(zhí)行了 40 秒鎖會在第 30 秒自動釋放此時其他線程就能拿到鎖進入臨界區(qū)兩個線程同時操作共享資源鎖形同虛設(shè)。這個問題有兩種應(yīng)對方式。第一種是給業(yè)務(wù)加超時控制保證執(zhí)行時間遠小于鎖的過期時間。這種做法簡單但前提是業(yè)務(wù)耗時可控涉及外部調(diào)用、批量處理時很難保證。第二種是鎖續(xù)期。啟動一個后臺線程在鎖快過期時比如剩余三分之一時間檢查業(yè)務(wù)是否還在執(zhí)行如果是就重新設(shè)置過期時間。Redisson 的看門狗機制就是這個思路默認(rèn)鎖過期時間 30 秒每隔 10 秒續(xù)期一次。用起來方便但要注意如果應(yīng)用進程被 kill續(xù)期線程也跟著消失鎖最多再存活 30 秒這是可以接受的但如果發(fā)生了長時間的 GC 停頓續(xù)期線程可能來不及執(zhí)行鎖提前過期這就是所謂的鎖失效窗口。4.3 主從切換與 Redlock 的爭議落到實踐是什么樣單節(jié)點 Redis 加鎖有個致命問題如果主節(jié)點在鎖還沒同步到從節(jié)點時就宕機了故障轉(zhuǎn)移后從節(jié)點升為主節(jié)點鎖信息丟失第二個客戶端就能拿到同一把鎖。圍繞這個問題Redis 作者提出了 Redlock 算法向多個獨立節(jié)點加鎖超過半數(shù)成功才算拿到鎖。但 Redlock 也受到過質(zhì)疑核心論點是它依賴各節(jié)點的時間假設(shè)在時鐘漂移、進程停頓的情況下仍然可能失效而且它解決的是鎖的互斥性解決不了持鎖者對共享資源的操作是否安全。落到工程實踐我的選擇順序是這樣的場景推薦方案理由同一進程內(nèi)的并發(fā)控制本地鎖無需網(wǎng)絡(luò)開銷性能最好單實例、容忍極低概率失效單節(jié)點 Redis 鎖 唯一 value Lua 解鎖簡單可靠滿足絕大多數(shù)業(yè)務(wù)對一致性要求極高數(shù)據(jù)庫唯一索引 / 樂觀鎖版本號依賴數(shù)據(jù)庫事務(wù)不依賴緩存可用性跨機房、強一致基于共識算法的協(xié)調(diào)服務(wù)復(fù)雜度高但語義明確我自己的項目里訂單創(chuàng)建這類不能重復(fù)的操作最終用的是數(shù)據(jù)庫唯一索引兜底 Redis 鎖做快速失敗。Redis 鎖擋掉 99% 的重復(fù)請求剩下的漏網(wǎng)之魚由唯一索引攔截觸發(fā)異常后返回請勿重復(fù)提交。這樣即使 Redis 出問題業(yè)務(wù)也不會出錯只是壓力會打到數(shù)據(jù)庫。4.4 Lua 校驗解鎖為什么不能直接 DEL解鎖最容易被忽略的一點是不能直接DEL。因為如果 A 的業(yè)務(wù)超時了鎖自動過期B 拿到了鎖這時 A 執(zhí)行完業(yè)務(wù)來解鎖直接DEL就把 B 的鎖刪了。所以必須校驗 value 是不是自己的而校驗 刪除這兩步必須是原子的只能用 Lua-- KEYS[1]: 鎖的 key -- ARGV[1]: 當(dāng)前請求的唯一標(biāo)識 if redis.call(GET, KEYS[1]) ARGV[1] then return redis.call(DEL, KEYS[1]) else return 0 end在 Java 里通過RedisTemplate.execute(RedisScript, keys, args)執(zhí)行。很多人用if (get(key).equals(id)) del(key)這種寫法在并發(fā)下依然會出問題因為GET和DEL之間鎖可能剛好過期并被別人搶走。提示Redis 集群模式下執(zhí)行 Lua 腳本所有 key 必須落在同一個槽位。如果鎖的 key 是按業(yè)務(wù) ID 拼的一般沒問題但如果腳本里同時操作多個 key需要用 hash tag比如{order:1001}:lock強制它們同槽。5. RDB 與 AOF分工、代價和主從復(fù)制鏈路5.1 RDB 與 AOF 不是二選一而是分工八股文的對比表通常是RDB 快、文件小、可能丟數(shù)據(jù)AOF 安全、文件大、恢復(fù)慢。結(jié)論生產(chǎn)環(huán)境建議同時開啟。這句話沒錯但沒解釋為什么同時開啟更好。RDB 是某個時間點的數(shù)據(jù)快照適合做備份和全量恢復(fù)也適合主從復(fù)制的首次同步。AOF 記錄的是寫命令能保證更高的數(shù)據(jù)安全性但它會隨著時間不斷增長需要重寫來壓縮。Redis 4.0 之后引入了混合持久化AOF 重寫時會把當(dāng)前數(shù)據(jù)以 RDB 格式寫到 AOF 文件開頭后續(xù)增量命令以 AOF 格式追加。這樣恢復(fù)時先加載 RDB 部分再重放增量命令速度比純 AOF 快很多。關(guān)于appendfsync這個參數(shù)三種取值的安全性和性能差異很明顯取值行為最多丟多少數(shù)據(jù)性能影響always每條命令都 fsync幾乎不丟明顯下降everysec每秒 fsync 一次約 1 秒影響很小no交給操作系統(tǒng)決定可能幾十秒幾乎無影響絕大多數(shù)業(yè)務(wù)用everysec就夠了。只有對數(shù)據(jù)安全性要求極高的場景才考慮always而且要先用壓測確認(rèn)性能能扛住。5.2 fork 與寫時復(fù)制內(nèi)存為什么在 bgsave 時突然翻倍執(zhí)行BGSAVE時Redis 會 fork 一個子進程來寫文件主進程繼續(xù)處理請求。很多人以為 fork 之后內(nèi)存會翻倍其實不會立刻翻倍因為 fork 用的是寫時復(fù)制Copy-On-Write父子進程共享同一份物理內(nèi)存只有當(dāng)某一方修改了某個內(nèi)存頁才會復(fù)制那一頁。問題在于寫入量。如果 fork 之后主進程的寫入非常頻繁被修改的頁越來越多操作系統(tǒng)復(fù)制的內(nèi)存就越來越多極端情況下內(nèi)存占用會接近翻倍。這就是為什么在寫入高峰期做BGSAVE容易觸發(fā) OOM。我踩過一次一個 20GB 的實例設(shè)置了每 10 分鐘觸發(fā)的自動快照某天流量翻倍內(nèi)存直接沖到了 38GB觸發(fā)了容器內(nèi)存上限被殺。后來把自動快照的頻率調(diào)低改成業(yè)務(wù)低峰期執(zhí)行并且把實例內(nèi)存從 32GB 提到了 64GB留出足夠的 COW 余量。經(jīng)驗是實際內(nèi)存峰值大約等于當(dāng)前數(shù)據(jù)量乘以 1.5 到 2規(guī)劃容量時別只看數(shù)據(jù)本身。注意vm.overcommit_memory這個內(nèi)核參數(shù)需要設(shè)置為 1否則內(nèi)核可能拒絕 fork 請求導(dǎo)致后臺保存失敗。5.3 主從復(fù)制的 runid、offset 與全量、增量同步主從復(fù)制的完整流程分三步。第一步從節(jié)點連接主節(jié)點發(fā)送PSYNC因為是首次同步主節(jié)點回復(fù)FULLRESYNC runid offset然后執(zhí)行BGSAVE生成 RDB 文件發(fā)給從節(jié)點從節(jié)點清空自身數(shù)據(jù)后加載。這個過程中主節(jié)點的新寫入會被記錄在復(fù)制緩沖區(qū)里RDB 發(fā)送完之后再把這部分命令補發(fā)給從節(jié)點。第二步全量同步完成后進入命令傳播階段主節(jié)點每執(zhí)行一個寫命令就發(fā)給從節(jié)點同時維護一個 Offset 計數(shù)器主從雙方通過比較 Offset 判斷是否一致。第三步如果網(wǎng)絡(luò)中斷后重連從節(jié)點發(fā)送PSYNC runid offset主節(jié)點檢查這個 runid 是不是自己的以及 offset 是否還在復(fù)制積壓緩沖區(qū)repl-backlog范圍內(nèi)。都滿足就只發(fā)缺失的那部分命令也就是增量同步否則退化成全量同步。這里有個關(guān)鍵參數(shù)repl-backlog-size默認(rèn) 1MB在高寫入量下很容易不夠。一旦斷開時間稍長offset 超出了緩沖區(qū)范圍就會觸發(fā)全量同步——主節(jié)點 fork、生成 RDB、傳輸、從節(jié)點加載整個過程對主節(jié)點壓力很大。估算方式是平均寫入速率 × 期望能容忍的斷連時長比如寫入 5MB/s 還想容忍 60 秒斷連那至少要 300MB。5.4 主從搭建的實操順序與幾個必改參數(shù)以一臺主、一臺從為例從節(jié)點的配置里加上replicaof 192.168.1.10 6379 masterauth 主節(jié)點密碼 replica-read-only yes repl-backlog-size 256mb repl-backlog-ttl 3600 repl-timeout 60啟動后檢查狀態(tài)redis-cli -h 192.168.1.11 info replication # 關(guān)注 role:slave, master_link_status:up, master_repl_offset, slave_repl_offset幾個容易忽略的點。第一masterauth一定不能漏否則連接會卡在master_link_status:down日志里會看到NOAUTH Authentication required。第二從節(jié)點默認(rèn)read-only yes別為了圖方便改成 no否則可能出現(xiàn)雙向?qū)懭雽?dǎo)致數(shù)據(jù)混亂。第三主節(jié)點也要設(shè)置repl-backlog-size這個參數(shù)配置在主節(jié)點上不是從節(jié)點。第四防火墻和安全組要放開 6379 端口的互訪但這個端口絕對不能暴露到公網(wǎng)。如果要做自動故障轉(zhuǎn)移單靠主從不夠需要引入哨兵或者直接使用集群模式。哨兵負(fù)責(zé)監(jiān)控、選主和通知客戶端客戶端通過哨兵獲取當(dāng)前主節(jié)點地址。6. 大 key、熱 key 與內(nèi)存治理6.1 過期刪除與內(nèi)存淘汰兩組策略不是一回事這兩個概念經(jīng)常被混在一起。過期刪除處理的是設(shè)置了 TTL 的 key 到期后怎么刪內(nèi)存淘汰處理的是內(nèi)存達到 maxmemory 后刪哪些 key。前者是定時任務(wù)后者是內(nèi)存不足時的被動行為。過期刪除用的是惰性刪除 定期刪除的組合訪問 key 時檢查是否過期過期就刪同時每秒若干次隨機抽查一部分設(shè)置了 TTL 的 key刪掉其中過期的。這樣設(shè)計是為了避免遍歷所有 key 造成卡頓代價是有些過期 key 會短暫滯留。內(nèi)存淘汰策略由maxmemory-policy決定策略淘汰范圍適用場景noeviction不淘汰寫入報錯當(dāng)數(shù)據(jù)庫用不能丟數(shù)據(jù)allkeys-lru所有 key按最近最少使用純緩存場景推薦allkeys-lfu所有 key按訪問頻率熱點數(shù)據(jù)明顯、有長期低頻 keyvolatile-lru只淘汰設(shè)置了 TTL 的 key緩存和持久數(shù)據(jù)混用volatile-ttl優(yōu)先淘汰剩余時間短的對過期時間敏感的場景allkeys-random隨機淘汰訪問分布均勻時可用LRU 在 Redis 里是近似實現(xiàn)通過maxmemory-samples控制采樣數(shù)量默認(rèn) 5。調(diào)大采樣數(shù)會讓淘汰更接近真實 LRU但會消耗更多 CPU。我們線上一般設(shè)成 10效果和開銷比較平衡。注意把maxmemory-policy設(shè)成noeviction而maxmemory又設(shè)得偏小時寫入會直接返回OOM command not allowed錯誤業(yè)務(wù)側(cè)會報異常。要么給足內(nèi)存要么選淘汰策略。6.2 大 key 怎么找、怎么拆大 key 的危害是多方面的單次操作耗時長可能阻塞其他請求刪除時如果用的是DEL會同步釋放內(nèi)存造成卡頓主從復(fù)制和持久化時也會放大影響。找大 key 最直接的方式是redis-cli --bigkeys redis-cli --memkeys redis-cli -h host -p 6379 memory usage key--bigkeys是按類型采樣統(tǒng)計的不會掃全庫對線上影響可控。MEMORY USAGE可以精確查看單個 key 的內(nèi)存占用默認(rèn)采樣 5 個元素估算。拆分思路要看數(shù)據(jù)結(jié)構(gòu)。如果是 Hash可以按字段前綴拆成多個小 Hash如果是 List可以按時間或 ID 區(qū)間分段如果是 String先確認(rèn)是不是存了序列化的大對象能拆成 Hash 就拆。刪除大 key 一定要用UNLINK而不是DELUNLINK是異步釋放不會阻塞主線程。另外如果業(yè)務(wù)里會批量掃描比如KEYS *或者HGETALL大 Hash一定要換成SCAN系列命令分批遍歷。KEYS在生產(chǎn)環(huán)境應(yīng)該被完全禁用有的團隊甚至?xí)谂渲美锔牡裘蠲麃矸乐拐`用。6.3 熱 key 與本地緩存熱 key 指的是訪問量極度集中的 key比如秒殺活動里的庫存 key、首頁配置 key。單個 key 的 QPS 太高會集中打到一個 Redis 節(jié)點上集群模式下成為瓶頸。發(fā)現(xiàn)熱 key 可以用redis-cli --hotkeys但前提是淘汰策略為 LFU否則統(tǒng)計不到。也可以自己做客戶端埋點統(tǒng)計每個 key 的訪問次數(shù)。應(yīng)對方式有幾層。第一層是本地緩存用 Caffeine 這類工具在應(yīng)用進程內(nèi)緩存熱點數(shù)據(jù)設(shè)置很短的 TTL比如 1 到 3 秒大部分請求根本不會到 Redis。這一層的代價是數(shù)據(jù)一致性會有秒級延遲要評估業(yè)務(wù)能否接受。第二層是 key 分散把hot:key復(fù)制成hot:key:1到hot:key:10讀的時候隨機選一個寫的時候全部更新把壓力分散到多個節(jié)點。第三層是限流降級當(dāng) Redis 響應(yīng)變慢時直接走本地兜底數(shù)據(jù)保證核心鏈路可用。我們做秒殺時用的是第一層 第三層庫存預(yù)熱到本地緩存Redis 只承擔(dān)扣減和最終校驗Redis 出現(xiàn)抖動時直接拒絕新請求而不是排隊等待。7. 安裝部署與監(jiān)控幾個容易踩的實操點7.1 安裝方式怎么選源碼、包管理還是容器編排在 Linux 上裝 Redis常見有三種方式。包管理器安裝apt install redis-server或yum install redis最省事但版本通常偏舊而且默認(rèn)配置不一定適合生產(chǎn)。源碼編譯安裝可以指定版本和編譯參數(shù)適合需要特定版本的場景缺點是升級麻煩。容器方式適合已經(jīng)有編排平臺的環(huán)境配置和版本都能用鏡像固化下來。Windows 環(huán)境需要說明一下Redis 官方并不提供 Windows 版本官方文檔里明確建議在 Windows 上通過 WSL2 運行 Linux 版本。網(wǎng)上流傳的一些 Windows 移植版本通常停留在較老的版本功能和安全更新都跟不上只適合本地學(xué)習(xí)不要用在正式環(huán)境。如果用 Docker Compose 部署主從一個可參考的寫法是services: redis-master: image: redis:7.2 container_name: redis-master command: [redis-server, /etc/redis/redis.conf] volumes: - ./master/redis.conf:/etc/redis/redis.conf - ./master/data:/data ports: - 6379:6379 restart: always redis-replica: image: redis:7.2 container_name: redis-replica command: [redis-server, /etc/redis/redis.conf] volumes: - ./replica/redis.conf:/etc/redis/redis.conf - ./replica/data:/data depends_on: - redis-master restart: always從節(jié)點的配置文件里寫上replicaof redis-master 6379和masterauth。注意容器里用的是服務(wù)名而不是 IP因為容器重啟后 IP 會變。數(shù)據(jù)目錄一定要掛載出來否則容器重建后數(shù)據(jù)就沒了。7.2 一份生產(chǎn)可用的配置骨架配置項很多但核心的就那些。下面這份是我從幾個項目里提煉出來的骨架具體數(shù)值要按業(yè)務(wù)壓測調(diào)整bind 0.0.0.0 protected-mode yes port 6379 requirepass 強密碼 timeout 300 tcp-keepalive 300 # 持久化 save 900 1 save 300 10 appendonly yes appendfsync everysec aof-use-rdb-preamble yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 內(nèi)存 maxmemory 8gb maxmemory-policy allkeys-lru maxmemory-samples 10 # 慢查詢 slowlog-log-slower-than 10000 slowlog-max-len 512 # 危險命令重命名 rename-command KEYS rename-command FLUSHALL 幾個必須強調(diào)的點bind不要寫成0.0.0.0之后又把端口暴露到公網(wǎng)這是最常見的被入侵原因requirepass一定要設(shè)而且密碼不能太弱rename-command把KEYS、FLUSHALL這類高危命令禁用掉能避免很多誤操作slowlog-log-slower-than單位是微秒10000 表示 10 毫秒超過這個耗時的命令會被記錄下來。7.3 可視化工具與監(jiān)控指標(biāo)命令行夠用但排查問題時有個可視化工具會快很多。RedisInsight 是官方出品的界面清晰支持內(nèi)存分析、慢查詢查看和命令行。Another Redis Desktop Manager 是社區(qū)里口碑不錯的客戶端跨平臺、啟動快、支持集群和哨兵日常用起來很順手。監(jiān)控方面最重要的幾個指標(biāo)是命中率keyspace_hits / (keyspace_hits keyspace_misses)低于 80% 就要排查 key 設(shè)計或 TTL 設(shè)置內(nèi)存使用率used_memory / maxmemory長期高于 80% 要警惕慢查詢數(shù)量slowlog_len持續(xù)增長說明有耗時命令連接數(shù)connected_clients突增可能是連接池泄漏或客戶端沒復(fù)用連接主從延遲master_repl_offset - slave_repl_offset被拒絕的命令rejected_connections、errorstats里的各類錯誤計數(shù)這些指標(biāo)通過INFO命令就能拿到接進 Prometheus 之后用 Grafana 做看板。我個人習(xí)慣是在看板上加一條內(nèi)存增長曲線如果曲線斜率在業(yè)務(wù)低峰期也不下降基本可以確定有 key 沒設(shè) TTL 或者大 key 在堆積。最后分享一個我在排查線上問題時常用的小技巧當(dāng)懷疑是某個 key 導(dǎo)致的問題先用redis-cli --bigkeys和--hotkeys快速定位再用MONITOR短時間抓一下命令流一定要短MONITOR本身開銷很大長時間開啟會拖慢實例最后用SLOWLOG GET 20看最近最慢的二十條命令。這三步走下來大部分 Redis 相關(guān)的線上問題都能定位到具體原因。如果后續(xù)要擴展我會優(yōu)先把 binlog 訂閱做緩存失效這條鏈路補上它比延遲雙刪更長治久安只是需要額外的中間件和運維成本。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本高清免费一本视频在线观看| 超碰97极品9| 国产又黄又粗的视频| 亚洲综合贴图91| 亚洲一区日韩| 亚洲导航深夜福利| 精品久久久久久中文字幕三区| 骚鸭AV| 91蜜臀熟女| 免费精品人妻一区二区三| 国产99999| 蜜桃网熟妇| 日han少妇无码| 9999免费精彩视频| 91一区二区| 精品午夜福利国产一区二区在线观看| 爱妃国产亚洲视频中文字幕| 女优大全 - 91n| 欧美同性恋 的搜索结果 - 91n| 久久久久9999妇女| 久久久久久性爱视频| 亚洲天堂热| 少妇人妻好深太紧了vr91| 蜜臀久久99精品久久久久久-DVD| 日韩欧美久久婷婷网站| 中文字幕神马久久| 人妻天天爽夜夜爽2| 久久久影院| 亚洲九区| 激情综合久久| 91一区二区| 五月丁香大香蕉| 九九久久精品| 久久99精品九九久久久婷婷| 亚洲怡春院| 99热18这里只有精品| 蜜臀99999| 91超碰碰在线| 综合大香蕉美。| 亚洲综合校园春色| 国产日韩美女小穴视频网站不卡| 久久精品国产亚洲粉嫩| 啊啊嗯嗯好爽| 国产成人亚洲精品无码最新在线| 超碰97人妻免费在线| 婷婷久月| 超碰97色| 日韩午夜啪啪视频| 四虎 精品 WWW| 欧美色偷拍| av操操不卡| 国语精品av| 91操熟妇| 黄色大片视频在线免费看| 97精| 国产熟女完整版中字| 日韩一级成人毛片免费观看| 欧美日韩国内不卡| 99热精品在线| 少妇内射www在线观看视频| 很很很很操| 精国久久一区二区三区98| 欧美综合 站| 亚洲日韩久久精品一区| 久操免费电影| 黄色AAAAA欧美| 一级久久久久久久久久久| 亚洲精品无码少妇久久| 精品国产国产AV| 一二视频神马久久传媒| 激情一区二区| AA特级绝黄| 久久久久免费少妇| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 日少妇亚洲版| 亚洲有薄码区久久在线一区| 在线观看免费视频国产| 色婷婷激情| 热久久九九热| 久久97视频| 亚洲欧洲中文日韩女优乱码| 亚洲αv一区二区三区| 91 刺激在线| 亚洲精品欧美专业| 校园春色亚洲色图| 久久东京伊人一本到鬼色| 一级久久性爱视频| 人妻激情在线视频| 亚洲中文字幕精品一区| 日日干日日| 99只有精品| 青青草久草| 亚洲天堂7777| 亚洲天堂电影网| 在线视频免费观看午夜| 午夜男女爽爽爽在线视频| 蜜色网色哟哟| 麻豆天美在线| 天天干天天狼在线视频| 色综和网| 黑人精品XXX一区一二区| 国产精品视频精品一二| 91碰碰| 日韩免费福利在线观看| 天堂九九九九九九九九九| 国产成人精品一区| 一级性爱啪啪视频| 欧美操逼视频二区| 黄色香蕉视频网站一区| 97精品国产97久久久久久| 国产丸一视频| 无码人妻丰满热妇又大又粗| 九九热在线精品视频| 国内毛片欧美香蕉精品| 97国产精品国| 涩综合导航| 暖暖精品二区三区观看| 老鸭窝成人免费毛片视频| 黑丝自慰喷水网站| 中文字幕一区二区日韩网| 麻豆天美国美国产AV| 美女天天干| 国产亚洲日韩在线三区黑人| 国产精品丝袜久久亚洲不卡| 欧美色视频在线| 日韩中文字幕宗合在线| 超碰精品在线| 男同专区一区二区三区在线| 1024香蕉视频| 天天射天天| 欧洲精品在线播放| 亚洲AV噜噜狠狠网址蜜桃动漫| 九X超碰| 亚洲国产婷婷在线播放| 免费亚洲国产精品久久一区| 国产小黄片在线免费观看| 欧美亚洲宗合色性图| 亚洲伊人a线观看视频| 亚精品无码毛片一区二区三区| 巨爆乳一区二区爆乳区| 久热精品在线| 色999人与兽| 国产后入| 人人妻人人色| 国产欧美日韩在线不卡第一页| 精品久久9| 97天天摸天天碰| 91少妇人妻| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 超碰av在线| 凌辱美少妇久久aV| 欧洲一区二区三区四区在线观看| 大香蕉久操| 黄色无码高清黄色无码网站| 久日91在线| 可以免费观看的AV| 熟妇人妻精品一区二区视频色欲| 久久艹逼视频| 久操免费在线| 美女AV一区二区| 综合操逼| 无码人妻精品酒店| 亚洲一二三| 精品国产久热在线观看| 久久精品熟女亚洲AV麻豆软件| 国产欧美日韩臀 | 午夜男人av| 肥佬影院91| 国产不卡中文字幕免费avi| 国产精品久久成人免费| 国产一国产一级毛片古装| 99国产精品久久久久久久成人热 | 人人澡综合涩| 91色艳| 波多野42部无码喷潮在线观看| 蜜汁欧美| 中文字幕乱偷人妻久久艾草网| 精品久久久久久亚洲| 国产精品福利视频播放| 超碰人人干天天射| 美女让帅哥通她小鸡鸡| 97超碰巨乳| 亚洲日韩一区电影| 首页中文字幕中文字幕免费| 日韩精品人妻一| 欧美综合网| 午夜精品久久久久久久第一页按摩| 熟女欧美日韩综合婷婷| 国产美女精品| 精品然女一区二区| 麻豆天美久久91| 男女真人网18| 天堂中文日本在线观看| 成人性爱av| 国产精品96| 亚洲第一页色网| 清清草影| 制服诱惑亚洲一区二区三区在线观看| 欧美白嫩在线放| 久久久亚洲精品电影免费看| 久久久久成人蜜桃精品| 99热这里是精品| ?亚洲伊人伊成久久人综合网| 精品国产一区二区三区香蕉欧美| 激情综合网亚洲| 日骚逼视频| 久久超碰天天| 日产精品久久久一区二区| 精品乱码久久久久| 日本一级不卡一二区| 超硑97精品| 日产国产精品中文久久婷婷| 啊啊啊啊啊啊啊好爽不要| 欧美少妇一区二区三区| 天天肏美女| 色精品极品| 91大学精品激情戏| 亚洲熟妇熟在线电影视频| 亚殴在线| 欧美91网站| 操少妞在线视频| 亚洲91综合| 欧美在线|亚洲| 中文字幕人妻丝袜乱一区三区| 午夜久久久| 日韩AV噜噜噜一区二区三区四区| 丁香婷婷五月| 亚洲欧美在线观看免费| 无码自拍SM| 东京日日夜夜| 老熟妇一区二区三区啪啪| 国模91| 国产精品禁久久久精品| 少妇熟女一区二区三区| 強姦亂倫a| 小视频玖玖| 国产一区二区三区影片| 99这里都是精品| 亚洲美女精品| 亚洲天堂日本| 性感美女91影视| 9Ⅰ超碰| 国产精品第一区第一页| 国产精品69人妻无码久久久| 国产成人综合网| 久热久一区二区三区| 97香蕉人人乳| 欧美第五页| 啊啊啊啊啊在线| 免费精品中文字幕| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 人人操人人狠狠操| 啊啊啊啊啊在线观看网址| 熟妇精品juliaannAV| 超碰在线在公开超碰在线在公开| 欧美91变态| 九月丁香婷婷色| 国产亚洲精品自在线亚洲情侣| 中文字幕一区 二区三四五 区日 日骚 | 肉丝中文无码高清| 涩涩这里只有精品视频| 欧美 亚洲 制服 精品| 亚欧美综合网。| 欧美在线啊啊| 国产亚州精品美女久久久免费| 免费看毛片操穴| 91少妇香蕉久久精品| 国产免费小视频| 久久这里只精品免费福利| 9色在线| 欧美情色男人的天堂| 国产91美女视频| 约操熟妇| 色香综合天天影视综合| 国产精品日韩在线一区| 女优免费一区二区永久| 亚洲图片 欧美电影| 国产操操日韩三级黄| 日韩无码嘿咻黑热久| 国产女主播视频在线观看| 91大神精品长腿在线观看网站| 婷婷伊人| 72av视频| 抽插无码高清一区| 东京热91| 99碰碰| 亚洲图片 欧美电影| 日韩AV熟女乱伦| 亚洲视频二区| 强奸乱伦av电影| 婷婷丁香一区二区三区| 99久久亚洲精品无码毛片潘甜甜| 五月丁香网站| 91性网| 女人被添高潮免费视频| 麻豆人妻偷人精品无码视频| 无码高清专| 青青草无码视频| 在线观看色视频| 欧美亚洲国产日本在线,久久精品国产| 亚洲无 码A片在线观看麻豆| 97中文天堂| 亚洲最新Av| 伊人大香蕉在线| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 国产亚洲禁久一区二区 | 国产一区二区免费福利片| 久久极品一区二区| 99老司机精品视频在线观看| 国产青青美女玩逼视频| 亚洲中文国际强奸字幕| 爱丝福利| 天天看综合网| 中文字幕日韩专区精品系列 | 97在线视频免费看| 十八禁网站在线| 人妻夜夜爽天天爽三区麻豆AV网站| 天天日天天色| heyZO天然素人无码AⅤ专区| 98超碰日本| 婷婷久月| 岛国免费黄色网址| 老熟女综合网| 蜜桃传媒一区二区亚洲| 天天色天天干天天射| 中文字幕诱惑制服人妻丝袜美丝袜美| 岛国成人av在线播放网址| 麻豆成人影音在线| 精品国产久久乱码| 丁香五月天啪啪| 色哟哟 日韩精品| 91日产欧美| 热九九精品| 色哟哟 日韩精品| 啊啊啊啊啊啊啊啊啊啊在线观看| 婷婷色色五月天| 国产精品人妻一区二区| 91亚洲黄色网| 欧美精品双插| 私色综合网| 国产精品露脸在线观看| 欧美另类丝袜熟女| 欲色影视综合吧| 国产 三级自拍| 日韩三级伊人| 无套后入双马尾| 亚洲综合小视频小说在线观看| 国产树林里野战在线看| 亚洲欧美日韩偷拍色图| 91丝袜人妻| 天天看片麻豆| 日本天天人人狠狠在线日美女| 国产精品无码在线| 国产传媒午夜理伦精品| 欧美性爱第1 页| 亚洲影视第一页| 成人综合视频久久| 91亚洲黑人| 熟女视频久久| 国产自产自拍| 在线观看免费视频国产| 一级性爱视频免费在线| 欧美一级二级三级| 人人操超碰在线| 搞中出视频在线观看| 2011国产精品| 又大又长又爽| AV天天在线观看| 九九黄色网| 国产精品无码在线| 黄片色区软件| 欧美人妻精品一区二区| 亚洲好看强奸乱伦| 精品无码久久久久久国产浪潮| 欧美色人| 中日韩免费看男女操逼大全| 日韩有码专区| 91丝袜视频在线观看| 国产精品夜夜夜| 亚洲欧美日韩国产丝袜自拍中文| 日韩精品操少妇| 人妻精品一区二区全免费| 欧美精品人妻视频| 91老司机在线视频免费观看| 殴美,日韩国产伦精品| 长长久久免费视频| 蜜臀国产AV中文字幕| 久久9视频| 色狠狠综合| 人妻激情偷乱视三区频一区二区| 国产乱伦性爱AV| 国产AV高清AV无码| 婷婷五月天成人网| 婷婷日韩一区二区三区中文字幕在线| 色婷婷五月天| 国产白嫩精品久久| 伊人久久大香蕉线AV五月天| 色偷综合| 中国91AV| 眼镜人妻101.com| 日韩中文字幕精品一区在线| 极品美女福利在线观看| 亚洲国产一区二区三区四区国产| 成片免费观看视频大全| 78p欧美| 天天夜夜久久| 一本一道久久综合久久| 蜜臀中文字幕| 2017人人操,人人摸| 亚洲AV无码黄色强奸| 中文字幕精品资源在线| 青青草在线成人视频| 99抽插| 偷拍亚洲视频一区二区三区四区| 天天综合青苹果| 亚洲一区二区三区春色| 思思性爱| 欧美精品人妻视频| 亚洲无限观看| 91少妇| 无码天天操| 国产67194| 亚洲熟妇图片| 99精品九九九九九九| 亚洲一区二区三区在线激情| 亚洲AV无码国产成人| 五月天春色激情网| 中文字幕av一区二区三区人妻少妇| 天天干18禁| 超碰色男人操熟女| 黑丝内射一区二区三区| 综合色拍| 色香欲影| 91色婷婷综合久久中文字幕二区| 很黄很污的免费网站| 日本亚欧爱爱| 久久riav中文精品| 麻豆2区1区天美| 欧美国产操逼| 日韩极品无码B| 在线不卡视频| 国产久久久久影院老熟女| 国产免费内射视频| 国产三级日产三级韩国三级| 蜜臀亚洲中文| 91在线观看,天天综合| 夜夜夜久久| 欧美综合传媒| 精品成人动漫一区二区| 91美女在线视频| 热热色中文无码| 欧美日本国产日韩激情视频| 精品97久久综合| 97日韩欧美| www.婷婷六月天| 天天综合站| 色官网色综合| 午夜后入| 中文字幕亚洲永久精品| 激情综合av| 91精品国产91久久青草| 最新加勒比丝袜在线| 欧美综合综合| 十八禁视频网站| 欧美草草| 久9视频| 欧美综合色综合| 欧美性爱中文字幕无线码| 欧美欲色| www.yeyecao| 日韩成人午夜精品久久高潮| 91性高朝久久久久久久久| 玖玖97综合 | 福利在线观看一区二区| 韩日自拍| 色婷婷激情| 亚州色综合| 水澄无码AV| 97综合| 国产白嫩精品久久| 极品综合| 熟妇激情| 久久婷五月天| 青娱乐国产剧情av一区| 97在线欧洲| 亚洲无码太久| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 性色av婷婷久久一区二区点复制| 校园春色美腿丝袜| 蜜桃视频精品一区二区| 久久神马| 神马久久69| 人妻精品一区二区在线| 欧美se综合| 人妻天天操天天爽视频免费| 第四色奇米影视777| 亚洲色图 综合| 制服乱伦| 色综合一本| 99re6国产精品99re| 日本一级性爱| WWW.操逼.COM| 欧美在线综合| 久热色情精品| 色色香蕉| 另类图片综合| 日日干夜夜欢| 熟妇熟女亚洲天堂网| 欧美爱三级日韩久久| 亚洲高清男人天堂| 久久大香蕉手机高清| 国产精品一区av在线| 亚洲熟女一区二区| 中文字幕欧美日韩三级| 综合网久久| 另类视频在线| 密乳无码| 黄色无码高清黄色无码网站| 999熟女精品| 精品人妻一区二区三区-国产| 国产免a费看黄片在线| 玖玖久久久| 久久久久久久久久久999| 久操操| 最新岛国大片| yw尤物av无码点击进入麻豆| 91美女视频直播| 97看操| 日韩97超碰中文字幕| 综合欧美激情网| 久久只有精品| 变态综合色| 日本顶级天天操狠狠操夜夜操中文字幕| 天美精品av| 国产精品久久伊人| av网页一区二区三区| 永久电影三级在线观看| 青草一区二区| 高潮9999外国| 97精品网站| 日本大香蕉| 精品久久99| 思思热在线| 久久人人看| 秋霞蝌科网日本一区| 午夜福利1区2区3区| 97干97色| 久艹日日日| 91亚洲图片| 91日韩网站| 亚洲人人夜夜澡人人爽| 美女丝袜激情小说| 亚洲色图 综合| av东京热男人的天堂| 黄色高清久久无码依人| 熟女在线视频| 天天弄欧美| 亚洲综合码| 黄色二级片网站| 午夜超碰| 超清中文乱码字幕| 夜色91| 九九九九热| 人妻三级在线中文字幕| 欧美日本成人一区二区| 操逼操2| 日本操逼视频免费| 无码137片内射在线影院| 人妻色偷色噜| 国产超碰AV在线精品| 人人看人人插| 精品亚洲国产成人av网站| 亚洲国产精品有声| 高清在线偷拍自拍视频| 色色色欧美| 亚洲天天艹| 呦呦一区| 97在线亚洲| 色区久久| 国产女人91精品嗷嗷嗷嗷| 欧美亚洲中文字幕| 欧美精品第3页| 亚洲欧洲小说图片视频| 亚洲综合影片| 蜜乳av一区二区三区| 中文字幕第二页| 美女91在线| 日韩激情电影中文字幕| 精品高清一区二区三区三州| 日本精品第一视频在'| 热久久这里只有精品| 最新AVzaixian| 亚洲中文电影| 亚洲色图欧美色18直播在线| 日韩性爱小视频| 强奸乱伦Av网| 67914亚洲精品| 最新精品久久蜜桃 | 欧美91网| AA级电影三区| 久久婷综合| 熟啊v色欧美热| 久久久久久裸体| 九九九九热| 黄色一级视| 97综合在线观看| 欧美日韩国产一区二区小黄片大全| 欧美性生活男人的天堂| 国模精品娜娜一二三区| 九一综合精品视品av| 欧美亚洲韩国视频十五区| 久96热在线观看视频| 黄色免费网页无码| 97大色网| 免费视频97| 亚州AV无码国产精品| 九九九九九九九九九九九免费国产| 亚洲图片在线| 色欲三区| 高清不卡国产| 高清孕妇孕交 交| 成人亚欧免费视频| 久久天天躁日日躁狠狠躁 | 无码抄逼网| 日本大香蕉| 亚洲加勒比久久日本道| 日本精品第一视频在'| 玖玖资源中文字幕制服丝袜| 麻豆精品一区二区三区四区免费观看| 日韩不卡毛片Av免费高清| 亚洲天堂自拍| 国语对白露脸XXXXXX| 亚洲 日本 一 二 三| 嗯~啊~轻一点 视频| 国内亚洲精彩视频在线| 婷婷情色五月天| 亚洲中文字幕在现观看| 精品区9| 久久久久久人| 国产精品自产拍在线观看社区| 久久骚少妇| 超碰在线人妻中文字幕| http://qxhbdz.com| 精品天堂| 日本天天操| 亚洲综合嫩| 99性视频| 成人小电影网站tex| 久草视频分类在线| 久久东京热成人| 二色av| 欧美热图99| 九九精品热| 日本三级精品| 91久久精品蜜臀| 中文字幕三四五区| 亚洲AV无码天美传媒一区| 中文字幕一区二区三区视频播放| 久久超碰av在线| 亚欧高清在线| 极品少妇久久久| 亚洲 欧美 91| 精品人妻一区二区三区四区石在线 | 99国内熟女露脸视频| 亚欧日韩成人| 92大香蕉| 久操黄色视频| wwwxxx日本爽| 欧美黑人168页欧美黑人167| 婷婷五月av| 91欧美综合| 久久国产视频专区一二三| 亚洲无码太久| 日韩欧美中文字亚洲慕| 99热亚洲| 亚洲无码太久| 超碰在线成人电影| 亚洲图片 91| 成人无码在线视频网站| 大屁股熟女一区二区三区| 四色永久成人网站| 国产日韩精品suv| 亚州色图片在线色| 狠狠操夜夜操蜜桃视频三区| 久久av无码| 97精品视频在线播放| 熟女乱伦二区| a亚洲欧美色欲| 久久久久久九九九九九九| 亚洲色图久久精品蜜| 成在线人在线观看视频| 中文字幕人妻丝袜乱一区三区| 亚洲AV乱码专区国产噜噜亚洲| 国产精品亚洲无码| 揉揉日日日日| 国产妇女精品视频青青草| 婷婷五月天丁香| 国产日韩在线播放av| 色区97| 性生活无遮挡纯毛片在线看| 91啪啪| 操逼国产免费| 日日夜夜摸| 春色综合免费| 99国产精品久久久久久久成人热 | 精品久久久久综合无码| 97er欧美性| 超碰超碰欧美| 五月婷婷性爱| 亚洲日韩美国人妻| 丰满人妻被猛烈进入中| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 97伊人超碰| 超碰中文字幕人妻草一区| 99这里有精品视频| 特级丰满少妇一级AAAA爱毛片| 天天射夜夜操| 漂亮人妻被强中文字幕hd| 97超碰在线资源网站| 日韩在线视频1234| 激情五月丁香五月| 日本成人电影资源网| 国产精品白领在线观看| 亚洲色图欧美| 天天天干977| 亚洲综合另类色图| 91欧美综合在线| 青青操在线亚洲视频观看欧美在线| 色婷婷五月天| 香蕉婷婷| 丁香六月啪| 岛国精品视频在线观看| 国产亚州高清国产拍精| 97精品熟女少妇一区| 韩美日操逼| 国产内射爽爽大片| 91成人18| 懂色aV一区二区天美传媒| 麻豆成人AV| 亚州男人天堂| 中文字幕后石码四区五区| 酒色综合网| 999综合网| 青娱乐淫乱1314| 欧美成年人性爱视频免费观看| 丰满人妻一区二区三区色-百度| 亚洲高清色综合| 香蕉99秘 一区精品蜜桃臀| 人人妻人人澡人人爽久久av| 国产精品夜夜| 蜜臀99久久| 久久久精品中文字幕爱豆| 国产精品日韩在线一区| 超碰色男人操熟女| 操高情无码| 欧美视频中文字幕区| 午夜丁香| sss视频华人在线| 久久久中文版| 超碰偷拍| 97日韩欧美| 黄片免费视频2019| 日韩午夜精品一区二区三区电影| 秋霞视频一区二区| 日本特黄f c2| 东北老女人的激情视频| 91男人天堂网| 少妇久久久久| 国产精品久久久久久照片| 国产麻豆福利av在线播放| 国产无马av| 国产原创精品| 呦女网站| 91骚熟女| AV网站高清无码在线观看| 日本黄 R色 成 人网站| 肥臀熟女福利视频一区二区| 加勒比五月天| 91性片| 人人艹亚洲| 欧美性爱五月天| 超碰综合色| 精品97久久| 欧美性生活免费网| av天堂影视中文在字幕在线中文| 国产农村妇女精品一二区| 国产不卡的视频| 老司机福利青青草| 尤物一级在线免费观看| 亚洲。日韩。欧美| 日本精品一区二区三| 探花精品 一区二区| 国产 无码 一区二区| 精品人人| 有码专区最新中文字幕有码| 久久性生大片免费观看性| 99久久久er直播网址| 九一亚洲国产免费| 5252色欧美在线男人的天堂| 日本高清视频xxxx| 嗯嗯啊中文字幕| 国产风韵犹存熟妇三区| 中文字幕人妻资源在线| a网站免费观看| 色老久久| 九九热久久99精品re| 日韩欧美视频青青| 国产AV天美传媒一区二区三区| 内射夫妻三片| 97天天摸天天碰| 超碰在线成人电影| 免费av在线播放二区| 色情综合网| 精品久久久不卡一区二区| 乱欲视频| 综合一区中亚洲国产成人综合精品| 怡红院成人av| 亚洲男人综合| 亚洲另类综合欧美| 青青草大香蕉视频| 色官网色综合| 91久久国产综合精品| 久久精品国产亚洲粉嫩| 亚洲无码久久久久久久| 999九九精品| 国产无码精品久久久久久| 99国产人成精品| 97超碰欧美手机在线| 国产女乱淫真高清免费视频| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 97超级色碰碰| 婷婷激情五月天小说网| 欧美性爱一区二区三区四区| 国产欧美日本亚洲精品| 欧美黑人XXXⅩ高潮交| 日本一天色道久久久精品视频| 欧美亚洲图片| 久久综合18p| 天天综合网亚洲综合网| 國產尤物AV尤物在線觀看| 天天超级碰碰碰| 国产精品久久久久久高清无码免费看 | 不卡免费av在线播放| 亚洲性感丝袜诱惑在线观看| 欧美操逼熟女| 日韩欧美偷拍美女视频| 在线观看AV片| 国产女人9999| 99热只有这里有精品| 夜夜嗨一区| 午夜男女爽爽爽在线视频 | 国产三级中文有码在线视频| 91精品国产乱码| 亚洲天堂AV在线播放| 日本孕妇孕交| 岛国黄色大片网站| 这里都是精品| 國產尤物AV尤物在線觀看| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 密臀在线视频| 99精品在线观看| 国产精品久久久| 中文字幕人妻色偷偷久久皮| 一区二区三区亚洲| 熟女熟妇一区二区三区视频| 92人人操人人| 日日爱99| 天美麻豆精品视频99| 无码精品久久| 天天影视综合色| 五月丁香影院| 欧美黄色片在线播放| 超碰1997| 2010男人的天堂| 日韩操p| 热的中文 热的有码 热的国产| 岛国精品视频在线观看 | 欧美男女午夜啪啪| 亚洲欧美综合区自拍另类| 蜜桃精品一区二区三区久在线| 开心五月婷婷激情| 亚洲国产成人精品女人久久久| 久日91在线| 亚洲老熟妇xxx| 人妻偷拍一区二区三区| 麻豆天美AV传媒第一页| 小少妇| 久久亚洲AV无码专区国产精品| 大逼色网站| 97一区二区蜜臀| 性色av婷婷久久一区二区点复制| 2020天天色综合| 精品国产少妇高潮视频| 亚洲伊人a线观看视频| 日日躁狠狠躁天天躁精品| 神马福利久草| 可以在线观看AV的网站| 欧美色另类| 欧美一级专区免费大片| 亚洲18禁| 婷婷五月天AV| 亚洲视频1区| 91成人无码| 久久草视频污视频| 任我爽视频在线观看| 久久99视频| 性爱Av免费| 亚洲成a人v欧美综合天堂下载| 91爱看| 女一区二区| 国产在线76页| 久久久久亚洲Aⅴ无码| 人妻偷拍一区二区三区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 日本国产欧美一区三区二区 | 五月丁香六月婷综合成人综合| 在线有码中文字幕| 午夜在线播放| 欧美情色亚洲| 香蕉国产97| 日本精品性生活久久久| 人人手机欧洲亚洲国产人妻| 中文字幕性感少妇av| 免费精品人妻一区二区三| 91人精品妻入口| 一本久道久久综合狠狠爱一密臀精| 精品美女人人干| 日韩国产十八禁| 桃色六月天| 后入 亚洲 美女 射| a在线观看| 综合色色婷婷| 一级做a爰片性色毛片久久| 亚洲国产精品久久AV| 69精品| 无码人妻系列少妇| 欧美曰韩国产精品| 欧美三级免费伊人| 爱干爱射网啊啊啊| 9久超碰| 青娱乐亚洲热| 蜜桃视频精品一区二区| 欧美日韩m| 日本不卡三级网在线播放| 嗯嗯啊在线视频| 四虎影库国产精品免费| 91校园春色长篇| 又大又长又爽| 四虎AV影视国产精品亚洲精品| 青青国产精品在线| 福利风月五月天影院| 久久九九一区二区三区成人| 亚洲熟妇图片| 操死我了嗯嗯嗯| 97碰碰日本乱偷人妻中文的| 97超碰人操| 综合亚州欧美| 大香蕉草草| 亚洲国产精品无码AV久久| 亚洲最新Av| 国产一区二区免费福利片| 视频在线观看免费一区二区三区| 激情抓乳插进去啪啪啪日韩 | 天天操天天舔| 伊人久久88国产女| 婷婷日韩一区二区三区中文字幕在线| 亚州操操穴网| 免费成人在线熟妇网| 色五月激情AV在线| 久久久久国色αv免费观看| 91丝袜在线观看| 青娱乐福利99| 在线观看精品国产免费| 日韩熟妇二区| 97亚洲国产影视| 亚洲日韩东京热一区| 欧美 亚洲 91| 天天肏天天干| 三级特黄60分钟播放| 激情国产乱伦Av| 欧美日韩丝袜| 亚洲视频二区| 欧美人妻熟女在线| 伊人国产成人av网站| 在线看片国产精品每日更新| 亚洲经典啪啪| 情色五月天久久久| 99国内熟女露脸视频| 亚洲在饯| 欧美午夜视频精品久久| 大香蕉五月天| 欧洲与亚洲欧美精品中文字幕| 久热这里| 国产精品人妻无码久久久老鸭窝 | 日韩美女高潮喷水视频| 天堂亚洲精品| 亚洲成aⅴ人片不卡无码| 久久精品国产亚洲AV片多多| 午夜激情床戏激情| 97国产精选| 日本精品中文字幕视频| 亚洲1区| 精国久久一区二区三区98| 骚货操死你| 日韩国产在线观看av| 国产精品成人无码a v毛片| 大香交伊人网| 少妇熟女视频一区二区三区| 成·人免费午夜在线观看| 爱媛媛久久国产福利| 欧亚日韩三区| 黄页| 日本日皮视频逼| 九九九九九用不成了| 青青草综合在线| www黄片免费看com| 日夜干射色啊| 九九九九九九视频免费| 天天爽人人综合免费7799| 美女诱惑在线一区| 极品人妻少妇综合| 日本免费人成视频播放120秒| 伊人网av| 揉揉日日日日| 婷婷丁香熟妇综合网| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 91热色| 操逼免费视频无码国产| 欧美三级免费伊人| 国产在线观看一区二区三区| 99性视频| 欲香欲色综合天天伊人| 亚洲AV成人无码一区二区三区在线观看 | 欧洲色| 九t超碰| 狠狠操狠狠| 免费精品AB| 中文激情网| 91无码精品| 91精品国产麻豆国产自产在| 欧美96交| 东京热免费视频| yazhouzaixian| 欧美一级A片在线看视频性色| 偷拍片久久| av绯色| 亚洲怡春院| 国产成人精品日本亚洲语言| AV中文字幕剧情1区2区3| 这里只有精品视频在线观看麻豆| 青青草视频导航官网| 亚洲AV成人精品网站在AV| 久久九七| 美女极品一区二区三区| 久热久| 国产AV超爽| 久久久久久加勒比| www久| 在线日韩日本亚洲国产| 99RE在线视频精品,这里只有精品| 国产极品粉嫩馒头一线天av| 欧洲乱码一区二区| 国产91乱伦| 夜夜黄| 久热9| 日韩免费簧片| 99re6国产精品99re| 青娱乐国产盛宴视频| 深喉吞精| 蜜桃视频精品一区二区三区| 日韩字幕一区| 亚洲AV色图一区| 欧美亚洲综合色| 色九九久九九| 黑人中出21连凳花野真衣| 日本色色色视频| 日日摸天天爽夜夜欢| 丰满少妇一区二区三区专区| 在线观看成人性爱免费小视频| 欧洲站一级二级三级h| 亚洲激情网| 中文字幕一区二区三区字幕| 亚洲交换| 日本久久久久久久久| 亚州免费啪啪视频| 人人操人人肉久久精品| 91中文精品日韩欧美在线| 91在线视频观看国产| 欧美熟妇精品黑人巨大91| 人人澡综合涩| 国模精品一区二区三区苹果色戒| 永久电影三级在线观看| 天天干夜夜| 国产原创精品| 色综合尤物| 日韩高清黄片| 超碰在线综合97| 有码免费观看| 精品久热| 操逼操逼逼操操逼91 | 国产 码在线成人网站| 黄片免费日韩| 欧美成97爱| 在线五区| 国产欧美日韩臀| 婷婷伊人网| 人妻一区视频| 国产亚洲深夜激情| 国产精品一区在线播放| 精品女同一区| 国内一区二区免费| 少妇精品久久久八区九区| 超碰午夜在线| 婬女免费一二三区A片| 香蕉热人人精品| 欧美99999| 97在线视频免费看| 少妇69中文| 麻豆黄色五月天| 九色PORNY9l原创自拍| 亚洲精品三区在线观看| 26UUU欧美日本| 欧美啪啪色吧在线| 97中文综合| 色九九九综合| 青娱乐大香蕉| 天天综和| 亚洲 国产 精品一区| 尤物黄色在线观看网站| AⅤ片水多多| www国产无码| 精品国产乱码久久久久久久久久毛片| 青草影院内射高潮| 玖玖爱一区在线| 天天欧美欧美亚洲网| 亚洲午夜福利视频| 岛国艾薇凹凸视频天堂| 尤物黄色在线观看网站| 伊人热综合| 韩国三级一线观看久| 老司机福利青青草| 国产成人亚洲精品无| AV中文字幕三四五| 91N综合网| 亚洲性高潮| 色香欲影| 欧美日韩色| 97久久国产| 国产成人欧美精品在线| 亚洲图片91| 亚洲欧洲激情卡通另类文学四射小说网站| 日韩在线电影| 另类图片综合| 超碰地址久久| 久久久97| 欧美十八禁视频| 国产精品美女在线一区| 99久久精品无码一区二区毛片免费 | 清纯唯美激情| 综合网91|