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

ARTICLE DETAIL

資訊詳情

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

Redis深度實(shí)戰(zhàn):從數(shù)據(jù)結(jié)構(gòu)到高可用架構(gòu)與緩存治理

Redis深度實(shí)戰(zhàn):從數(shù)據(jù)結(jié)構(gòu)到高可用架構(gòu)與緩存治理 說個(gè)實(shí)話Redis 是被低估得最厲害的一個(gè)中間件。很多人學(xué)了幾天會(huì)了SET和GET知道五種數(shù)據(jù)類型就以為自己入門了結(jié)果一到面試被問“緩存穿透怎么解決”“主從切換會(huì)不會(huì)丟數(shù)據(jù)”或者一上線就被慢查詢、內(nèi)存暴漲、分布式鎖失效折騰到懷疑人生才發(fā)現(xiàn)自己根本沒摸到 Redis 的門。這篇筆記不是給你背面試題的是按我實(shí)際折騰 Redis 的路徑整理的從安裝選型、數(shù)據(jù)類型底層邏輯到高可用架構(gòu)、緩存治理、常見故障排查一次講透。內(nèi)容適用于用 Redis 做緩存、做分布式鎖、做排行榜、做消息隊(duì)列的開發(fā)者和運(yùn)維同學(xué)也適合準(zhǔn)備大廠面試、想系統(tǒng)梳理 Redis 知識(shí)體系的人。我盡量用大白話講清楚每個(gè)關(guān)鍵選擇的“為什么”而不是只告訴你“怎么做”。1. 學(xué)習(xí)路線與整體設(shè)計(jì)思路拆解1.1 為什么你該把 Redis 當(dāng)“數(shù)據(jù)結(jié)構(gòu)服務(wù)器”來學(xué)很多教程開場就說“Redis 是高性能 KV 緩存數(shù)據(jù)庫”這個(gè)定位本身沒錯(cuò)但它直接把你的思路帶窄了。如果只把 Redis 當(dāng)緩存那你永遠(yuǎn)只會(huì)用它來存字符串遇到實(shí)際需求就想“這玩意兒是不是不適合”——排行榜用 ZSet、去重用 Set、消息隊(duì)列用 List 或 Stream、分布式 ID 用 INCR、附近的人用 GEO這些都不是“緩存”而是數(shù)據(jù)結(jié)構(gòu)能力。我建議把 Redis 理解成“一個(gè)跑在內(nèi)存里的數(shù)據(jù)結(jié)構(gòu)服務(wù)器”。它和 MySQL 最大的區(qū)別不是快而是它的數(shù)據(jù)模型本身就是為特定數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的你往里面放 String、Hash、List、Set、ZSet它幫你維護(hù)增刪改查、排序、聚合、去重這些能力。學(xué) Redis 的第一原則就是拿到一個(gè)需求先判斷“這個(gè)數(shù)據(jù)結(jié)構(gòu)適不適合用 Redis 表達(dá)”而不是“能不能塞進(jìn)緩存里”。帶著這個(gè)思路學(xué)習(xí)路徑就清晰了先掌握命令和數(shù)據(jù)結(jié)構(gòu)再理解持久化和過期策略接著上高可用和集群最后回到緩存治理和分布式鎖這些真實(shí)場景。每一步都在解決前一步帶來的新問題是一條完整的鏈路。1.2 按階段拆解基礎(chǔ)、進(jìn)階、實(shí)戰(zhàn)三步走第一階段是基礎(chǔ)目標(biāo)是“會(huì)用”。這個(gè)階段只需要搞定三件事安裝、五種數(shù)據(jù)類型、常用命令。你可以把 Redis 跑起來然后用redis-cli或者可視化工具比如 Another Redis Desktop Manager手動(dòng)敲命令把每種數(shù)據(jù)類型的增刪改查、過期時(shí)間、TTL 都過一遍。這一步不需要背命令大全先把最常用的三十個(gè)命令用到條件反射就行。第二階段是進(jìn)階目標(biāo)是“懂原理”。這個(gè)階段要搞清楚三塊內(nèi)容Redis 為什么快單線程 IO 多路復(fù)用、數(shù)據(jù)怎么不丟RDB 和 AOF、內(nèi)存不夠了怎么辦過期策略和淘汰策略。這三個(gè)問題是面試高頻題也是你以后排查性能問題和設(shè)計(jì)緩存方案的理論基礎(chǔ)。很多人在這個(gè)階段容易犯的錯(cuò)是只背概念不結(jié)合命令去驗(yàn)證。比如你背了“Redis 默認(rèn)有 16 個(gè)庫”但你不知道SELECT 1切庫之后AOF 重寫、RDB 快照到底怎么處理多庫數(shù)據(jù)你背了“LRU 淘汰”但你不知道 Redis 的 LRU 是近似實(shí)現(xiàn)不是嚴(yán)格 LRU。第三階段是實(shí)戰(zhàn)目標(biāo)是“會(huì)排障”。這一階段要圍繞真實(shí)場景展開主從怎么搭、哨兵解決了什么問題、集群的槽位是怎么分配的、緩存穿透擊穿雪崩分別怎么應(yīng)對、分布式鎖怎么實(shí)現(xiàn)才不會(huì)出事故。這個(gè)階段的標(biāo)志是你開始能看懂redis.log里的告警信息能根據(jù)INFO命令的輸出判斷系統(tǒng)健康度能在 Redis Desktop Manager 的連接失敗提示里快速定位問題。我個(gè)人建議這個(gè)階段配合 Docker 來做實(shí)驗(yàn)因?yàn)橹鲝?、哨兵、集群的搭建?huì)反復(fù)摧毀重建用容器最省心。2. 環(huán)境準(zhǔn)備安裝、選型與可視化工具的坑2.1 Windows 安裝別去官網(wǎng)下“官方 Windows 版”先說一個(gè)很多人踩過的坑Redis 官方是不支持 Windows 的官網(wǎng)只提供 Linux 源碼包。你在網(wǎng)上搜“redis windows 下載”搜到的那些.exe安裝包基本都是第三方移植版或者微軟舊版維護(hù)分支。不是說不能用而是要選對來源。如果你只是本地學(xué)習(xí)我推薦最常見的方案去 Redis 的 Windows 移植倉庫比如 tporadowski/redis下載 zip 包解壓后直接運(yùn)行redis-server.exe默認(rèn)端口 6379 就能起來redis-cli.exe就是命令行客戶端特別適合新手。注意兩個(gè)細(xì)節(jié)第一這個(gè)移植版大多停留在 Redis 5.x 或 6.x 版本學(xué)習(xí)和單機(jī)測試沒問題但它和 Linux 官方版在高版本特性上會(huì)有差異生產(chǎn)環(huán)境千萬別用第二啟動(dòng)后進(jìn)程會(huì)一直占著控制臺(tái)窗口關(guān)掉窗口 關(guān)掉服務(wù)學(xué)習(xí)階段無所謂但你最好知道有redis-server --service-install這種以 Windows 服務(wù)方式運(yùn)行的命令。Linux 上安裝是更正經(jīng)的做法。以 CentOS 和 Ubuntu 為例源碼編譯是標(biāo)準(zhǔn)的安裝路徑下載源碼包、make、make install。編譯之前記得裝好gcc和make否則會(huì)報(bào)一堆讓人頭大的編譯錯(cuò)誤。編譯安裝完Redis 的可執(zhí)行文件會(huì)放在/usr/local/bin配置文件在源碼目錄下的redis.conf。這里有個(gè)常見坑很多人直接./redis-server啟動(dòng)結(jié)果發(fā)現(xiàn)根本沒有配置文件生效所有的數(shù)據(jù)持久化和后臺(tái)運(yùn)行配置都失效了。正確姿勢是./redis-server /path/to/redis.conf顯式指定配置文件。2.2 Docker 方式學(xué)習(xí)高可用架構(gòu)最快的路徑如果你要學(xué)主從、哨兵、集群我強(qiáng)烈建議直接用 Docker。手寫配置文件、在一臺(tái)機(jī)器上起多個(gè)實(shí)例不是不行但改端口、改 pid 文件、調(diào)日志路徑會(huì)消耗大量耐心。用 Docker 的話一條docker run命令就是一個(gè)獨(dú)立實(shí)例網(wǎng)絡(luò)隔離也是天然的。舉個(gè)例子搭建一主兩從的 Redis 主從結(jié)構(gòu)# 創(chuàng)建自定義網(wǎng)絡(luò)方便容器間通過容器名互相訪問 docker network create redis-net # 主節(jié)點(diǎn) docker run -d --name redis-master --network redis-net -p 6379:6379 redis:7.0 redis-server --appendonly yes # 從節(jié)點(diǎn)1 docker run -d --name redis-slave1 --network redis-net -p 6380:6379 redis:7.0 redis-server --appendonly yes --slaveof redis-master 6379 # 從節(jié)點(diǎn)2 docker run -d --name redis-slave2 --network redis-net -p 6381:6379 redis:7.0 redis-server --appendonly yes --slaveof redis-master 6379啟動(dòng)完成后進(jìn)入主節(jié)點(diǎn)容器執(zhí)行INFO replication你就能看到兩個(gè)從節(jié)點(diǎn)已經(jīng)連接上來。用 Docker 做這種實(shí)驗(yàn)的好處是環(huán)境干凈、銷毀容易、模擬故障特別方便。比如你直接docker stop redis-slave1就能觀察主從斷開后主節(jié)點(diǎn)有沒有報(bào)錯(cuò)、從節(jié)點(diǎn)重連后的數(shù)據(jù)同步情況。注意Docker 方式雖然方便但你要分清兩個(gè)概念——--slaveof這是主從復(fù)制的配置不是集群的配置。主從復(fù)制解決的是“數(shù)據(jù)多副本冗余”集群解決的是“數(shù)據(jù)分片存儲(chǔ)”。很多人把這兩個(gè)搞混后面看集群文檔時(shí)一臉懵。2.3 可視化客戶端Redis Desktop Manager 的替代品Redis Desktop Manager簡稱 RDM是搜索最多、知名度最高的 Redis 可視化客戶端但它的坑也不少。2022 年起新版 RDM 開始收費(fèi)如果你搜“redis desktop manager 免費(fèi)版”或者“redis desktop manager 開源舊版”能找到的是最后一個(gè)免費(fèi)開源版本大概停在 2022 年 6 月左右。當(dāng)年很多人就在這個(gè)坎上栽了跟頭——下載安裝了新版一打開就彈試用提醒還看不到 key 列表的完整功能。我實(shí)際用下來的推薦是如果只是日常學(xué)習(xí)直接用Another Redis Desktop Manager這是一個(gè)完全開源免費(fèi)、持續(xù)維護(hù)的替代品。它的 UI 比舊版 RDM 更現(xiàn)代支持 SSH 隧道、支持可視化查看 stream、支持命令執(zhí)行的實(shí)時(shí)監(jiān)控對單機(jī)、集群、哨兵模式都有不錯(cuò)的支持。當(dāng)然如果你只有幾臺(tái)服務(wù)器、鍵也不多用命令行的redis-cli其實(shí)完全夠可視化客戶端的核心價(jià)值是讓你看清 key 的分布、內(nèi)存占用和過期時(shí)間排查問題時(shí)特別直觀。3. 五大數(shù)據(jù)類型與底層實(shí)現(xiàn)邏輯3.1 String不只是字符串的三層編碼String 是一個(gè)繞不開的基礎(chǔ)但你真不一定了解它。Redis 的 String 除了存文本還能存數(shù)字配合 INCR/DECR 做計(jì)數(shù)器、存二進(jìn)制數(shù)據(jù)比如圖片的字節(jié)流但容易讓你翻車的點(diǎn)在于它的內(nèi)存編碼。Redis 對 String 做了三種內(nèi)部編碼int純數(shù)字、embstr短字符串、raw長字符串。前兩種字節(jié)數(shù)少存儲(chǔ)緊湊超過 44 字節(jié)會(huì)自動(dòng)轉(zhuǎn)成raw。這個(gè) 44 字節(jié)不是隨便定的它和 Redis 內(nèi)部redisObject結(jié)構(gòu)的對齊、內(nèi)存分配器的分配粒度有關(guān)你不需要死記但你得理解Redis 對短字符串做了極致優(yōu)化所以設(shè)計(jì) key 時(shí)別弄?jiǎng)虞m幾百字節(jié)的 value除非業(yè)務(wù)必須。實(shí)際測試下來一個(gè)幾百字節(jié)的 value 比短字符串多占 3~5 倍內(nèi)存這在千萬級(jí) key 的緩存里就是幾十 GB 的差距。String 最常見的生產(chǎn)場景有三個(gè)緩存、計(jì)數(shù)器、分布式 ID。計(jì)數(shù)器用INCR時(shí)要留心INCR不準(zhǔn)的坑——這里說的“不準(zhǔn)”不是 Redis 算錯(cuò)而是并發(fā)下的計(jì)數(shù)語義問題。如果你用INCR做庫存扣減命令本身是原子的沒問題但如果你先GET再SET這就是經(jīng)典的讀改寫競態(tài)丟更新就是必然結(jié)果。類似“瀏覽量 1”這種業(yè)務(wù)用INCR沒問題但“基于當(dāng)前值做復(fù)雜計(jì)算再寫回”就必須用 Lua 腳本或者加鎖。3.2 Hash對象類數(shù)據(jù)的“常規(guī)武器”和 Redis 的“乞丐版分片”Hash 在業(yè)務(wù)里最典型的應(yīng)用是存儲(chǔ)對象。比如一個(gè)用戶信息最笨的存法是SET user:1001 {name:tom,age:18}問題是改一個(gè)字段就要整體覆蓋整個(gè) JSON浪費(fèi)網(wǎng)絡(luò)和內(nèi)存。用 Hash 存就變成了HSET user:1001 name tom age 18改哪個(gè)字段就只更新哪個(gè)字段還能單獨(dú)對字段設(shè)置過期時(shí)間嗎不行Hash 本身沒有字段級(jí)別的 TTL這是它和 String 的另一個(gè)取舍。Hash 內(nèi)部編碼有兩種ziplist和hashtable。當(dāng)字段數(shù)量少、字段值小的時(shí)候用ziplist緊湊存儲(chǔ)字段多了或者值大了自動(dòng)轉(zhuǎn)成hashtable。這里有一個(gè)用 Hash 做“小分片”的思路當(dāng)單個(gè) key 的 value 過大比如一個(gè)大 List 存了百萬條記錄會(huì)導(dǎo)致讀寫這個(gè) key 的耗時(shí)增加這在 Redis 里叫“大 key 問題”。解決方案之一就是把一個(gè)大集合拆成多個(gè)小 Hash。舉例來說如果你要存一個(gè)用戶的行為記錄一天幾十條不要用SET user_actions:1001 大JSON而是按天分片HINCRBY user_actions:20250120:1001 type_click 1這樣每個(gè) key 只負(fù)責(zé)一天的增量數(shù)據(jù)。這個(gè)思路在任何需要給單個(gè) key 瘦身的場景都通用理解它能幫你解決一大批“Redis 查詢越來越慢”的問題。3.3 List 和 Stream隊(duì)列功能到底用誰List 的LPUSHRPOP組合是最簡單的生產(chǎn)者消費(fèi)者模式配合BLPOP還能實(shí)現(xiàn)阻塞讀很多輕量級(jí)消息隊(duì)列就是用這個(gè)做的。但 List 做隊(duì)列有天然的毛病消息丟失沒有重試機(jī)制沒有消費(fèi)確認(rèn)消費(fèi)者崩了就永遠(yuǎn)丟了而且LRANGE翻頁取數(shù)據(jù)雖然方便但對長列表是 O(N) 操作列表一長就拖垮性能。所以 Redis 5.0 之后引入了 Stream它的設(shè)計(jì)目標(biāo)就是正兒八經(jīng)的消息隊(duì)列支持消費(fèi)者組、支持消息確認(rèn)ACK、支持 PEL待處理列表、支持持久化。如果你在做項(xiàng)目時(shí)需要一個(gè)“能用但不想引入 Kafka/RabbitMQ”的輕量隊(duì)列Stream 幾乎是唯一正解。我自己的建議是隊(duì)列非常簡單的場景比如事件通知丟了也無所謂可以用 List要求消息不丟、要消費(fèi)組、要重試用 Stream。面試問到“Redis 做消息隊(duì)列”你要能說出這個(gè)演進(jìn)關(guān)系比單純背命令值錢多了。3.4 Set 和 ZSet從去重到排行榜Set 用來做去重和集合運(yùn)算交集、并集、差集典型場景是抽獎(jiǎng)、標(biāo)簽系統(tǒng)、共同好友。ZSet 比 Set 多了分值排序底層是跳躍表 哈希表跳躍表的時(shí)間復(fù)雜度是 O(log N)所以 ZSet 在百萬級(jí)數(shù)據(jù)量下的排序操作依然很快。排行榜、實(shí)時(shí)熱點(diǎn)、延時(shí)隊(duì)列都是 ZSet 的主場。我要提醒一個(gè) ZSet 的坑同樣是ZADD如果你在寫入時(shí)不控制 member 的規(guī)模一個(gè) ZSet 里有幾百萬個(gè) member后續(xù)的ZRANGE、ZREM雖然單次很快但內(nèi)存占用會(huì)非常嚇人。ZSet 的成員越多跳躍表的指針開銷越大單個(gè) member 的額外開銷可能有幾十字節(jié)。所以設(shè)計(jì)上要注意排行榜類數(shù)據(jù)要么只保留 Top N用ZREMRANGEBYRANK定期清理要么按業(yè)務(wù)維度拆 key比如按天拆排行榜千萬別讓一個(gè) ZSet 無限增長。4. 高可用架構(gòu)主從、哨兵與集群4.1 主從復(fù)制REPLICAOF 背后的增量與全量同步主從復(fù)制解決的是“單點(diǎn)故障”問題。主節(jié)點(diǎn)可讀可寫從節(jié)點(diǎn)默認(rèn)只讀主節(jié)點(diǎn)把寫操作同步給從節(jié)點(diǎn)。同步分兩種情況全量同步和增量同步。全量同步發(fā)生在從節(jié)點(diǎn)剛連接主節(jié)點(diǎn)、或者主從數(shù)據(jù)差距過大時(shí)。流程是從節(jié)點(diǎn)發(fā)送PSYNC命令主節(jié)點(diǎn)執(zhí)行BGSAVE生成 RDB 快照發(fā)給從節(jié)點(diǎn)從節(jié)點(diǎn)清空舊數(shù)據(jù)并加載快照然后主節(jié)點(diǎn)把快照生成期間新增的寫命令存在復(fù)制緩沖區(qū)里再發(fā)給從節(jié)點(diǎn)。增量同步靠的是主從之間維護(hù)的復(fù)制偏移量如果偏移量還在緩沖區(qū)范圍內(nèi)只需要同步差額部分如果從節(jié)點(diǎn)斷連太久緩沖區(qū)里的數(shù)據(jù)已經(jīng)覆蓋了就得重新全量同步。這里有一個(gè)隱藏很深的坑如果從節(jié)點(diǎn)斷連時(shí)間很短但主節(jié)點(diǎn)的復(fù)制緩沖區(qū)太小默認(rèn) 1MB可通過client-output-buffer-limit replica調(diào)大也會(huì)觸發(fā)全量同步。全量同步一旦頻繁發(fā)生主節(jié)點(diǎn)要反復(fù) BGSAVE 傳輸數(shù)據(jù)CPU 和網(wǎng)絡(luò)都會(huì)被打滿導(dǎo)致主節(jié)點(diǎn)阻塞。生產(chǎn)環(huán)境出現(xiàn)“主從反復(fù)全量同步”的情況第一件事就是去看INFO replication里的偏移量差值和緩沖區(qū)大小。4.2 哨兵自動(dòng)故障轉(zhuǎn)移的“哨兵進(jìn)程”主從復(fù)制解決了數(shù)據(jù)冗余但主節(jié)點(diǎn)掛了從節(jié)點(diǎn)不會(huì)自動(dòng)頂上需要人工切換。哨兵Sentinel就是來解決這個(gè)問題的它是一個(gè)獨(dú)立進(jìn)程負(fù)責(zé)監(jiān)控主從節(jié)點(diǎn)的健康狀態(tài)在主節(jié)點(diǎn)掛掉后自動(dòng)從從節(jié)點(diǎn)中選舉出一個(gè)新主節(jié)點(diǎn)并把其他從節(jié)點(diǎn)重新指向新主節(jié)點(diǎn)。但哨兵不是萬能的。它最被人質(zhì)疑的點(diǎn)是哨兵本身就是單點(diǎn)雖然可以部署哨兵集群而且故障轉(zhuǎn)移期間存在“腦裂”窗口。經(jīng)典場景主節(jié)點(diǎn)和哨兵之間的網(wǎng)絡(luò)發(fā)生分區(qū)哨兵認(rèn)為主節(jié)點(diǎn)掛了選舉出新的主節(jié)點(diǎn)但原主節(jié)點(diǎn)其實(shí)還活著還能接收寫入等網(wǎng)絡(luò)恢復(fù)后原主節(jié)點(diǎn)的數(shù)據(jù)就和新主節(jié)點(diǎn)不一致了這部分丟失的數(shù)據(jù)無法找回。所以涉及錢的業(yè)務(wù)比如扣庫存、交易流水不能只靠 Redis 主從 哨兵保證強(qiáng)一致這是架構(gòu)層面的問題。用 Docker 搭建哨兵的時(shí)候最容易被坑的是配置文件里的sentinel monitor master-name host port quorum這個(gè)host不能寫127.0.0.1因?yàn)樯诒枰ㄖ捌渌鄙诒汀捌渌睆墓?jié)點(diǎn)連接主節(jié)點(diǎn)。在容器環(huán)境里主機(jī)地址要寫容器網(wǎng)絡(luò)中可達(dá)的別名的地址比如redis-master。這個(gè)細(xì)節(jié)我當(dāng)年調(diào)試了一下午白屏的時(shí)間都浪費(fèi)在地址可達(dá)性上。4.3 集群數(shù)據(jù)分片的槽位分配以及為什么集群也有“一票否決”Redis Cluster 和主從哨兵是兩套不同的體系。Cluster 把整個(gè)數(shù)據(jù)空間分成 16384 個(gè)槽位每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分槽位key 通過CRC16(key) % 16384計(jì)算屬于哪個(gè)槽。寫請求如果落到了非負(fù)責(zé)節(jié)點(diǎn)節(jié)點(diǎn)會(huì)返回MOVED錯(cuò)誤客戶端要跟著重定向。這是 Cluster 和單機(jī)模式最大的體驗(yàn)差異——你的客戶端必須支持集群協(xié)議比如 Jedis 的JedisCluster、Lettuce 的集群模式否則會(huì)出現(xiàn)各種莫名其妙的連接和寫入失敗。Cluster 本身自帶主從冗余每個(gè)主節(jié)點(diǎn)可以掛一個(gè)或多個(gè)從節(jié)點(diǎn)主掛了從自動(dòng)頂上。但要注意Cluster 的可用性判定比哨兵更嚴(yán)格如果一個(gè)主節(jié)點(diǎn)和它的所有從節(jié)點(diǎn)同時(shí)掛掉整個(gè)集群就會(huì)進(jìn)入不可用狀態(tài)即使其他槽位的主節(jié)點(diǎn)都活著。這就是少數(shù)派不可訪問導(dǎo)致集群不可用的經(jīng)典場景。查詢操作可以通過CLUSTER SLOTS命令看清楚每個(gè)槽位的負(fù)責(zé)節(jié)點(diǎn)這個(gè)命令排障時(shí)非常好使。Docker 部署集群有幾個(gè)注意點(diǎn)端口映射不能只映射 6379因?yàn)榧和ㄐ乓?16379總線端口不映射會(huì)造成節(jié)點(diǎn)間通信失敗容器重啟后 IP 變化會(huì)讓集群變的不可用解決辦法是給容器設(shè)置固定 IP--ip或使用 Docker Swarm / Kubernetes 的穩(wěn)定 DNS 名稱。這些問題在本地實(shí)驗(yàn)時(shí)不明顯但如果你用 KubeSphere 之類的平臺(tái)去搭建 Redis 集群就會(huì)頻繁遇到“集群狀態(tài)正常但客戶端連不上”的怪事排查到最后基本都是網(wǎng)絡(luò)標(biāo)識(shí)變動(dòng)引起的。4.4 從“會(huì)搭”到“會(huì)調(diào)”配置參數(shù)背后的取舍搭建完高可用架構(gòu)你才能真正讀懂配置文件里的各種參數(shù)。比如maxmemory和maxmemory-policy決定了內(nèi)存耗盡后的行為——allkeys-lru是全局近似 LRU 淘汰volatile-ttl只對設(shè)置了過期時(shí)間的 key 淘汰。再比如appendonly yes開啟 AOF 后appendfsync everysec表示每秒刷盤一次這是性能和可靠性的折中方案always最安全但性能下降明顯no交給操作系統(tǒng)決定但可能丟失一秒鐘的數(shù)據(jù)。關(guān)于 AOF 和 RDB我的建議是生產(chǎn)環(huán)境兩者都開RDB 做快速恢復(fù)的冷備AOF 做災(zāi)備的精確日志。只開 AOF 的坑是AOF 文件會(huì)越來越大雖然 rewrite 能瘦身但如果宕機(jī)時(shí) AOF 文件有損壞Redis 可能啟動(dòng)失敗需要先運(yùn)行redis-check-aof --fix修復(fù)。只開 RDB 的坑更明顯兩次快照之間的數(shù)據(jù)全部丟失。我遇到過把 RDB 快照間隔設(shè)成 900 秒的項(xiàng)目一次斷電丟了十五分鐘緩存雖然后臺(tái)有 MySQL 兜底但那個(gè)時(shí)間段的請求壓力直接把 DB 打崩了這個(gè)教訓(xùn)說明持久化參數(shù)不是隨便填的。5. 緩存治理穿透、擊穿、雪崩與分布式鎖5.1 緩存三大災(zāi)難的應(yīng)對不是靠 Redis 本身緩存穿透、擊穿、雪崩這三個(gè)問題面試必問但很多人回答得過于套路化。我按自己的經(jīng)驗(yàn)說說區(qū)別和處理優(yōu)先級(jí)。緩存穿透是查一個(gè)根本不存在的數(shù)據(jù)緩存里沒有數(shù)據(jù)庫里也沒有請求直接打到 DB。對 Redis 而言它根本沒壓力壞的是 DB。常見的解法有三種緩存空值設(shè)置一個(gè)較短的過期時(shí)間比如 5 分鐘、布隆過濾器一種空間效率很高的概率型數(shù)據(jù)結(jié)構(gòu)不存在則直接短路、參數(shù)校驗(yàn)攔截非法請求。我個(gè)人覺得業(yè)務(wù)層參數(shù)校驗(yàn)是最先該做的布隆過濾器適合 key 基數(shù)大的場景空值緩存適合 key 容易被窮舉暴力的場景。緩存擊穿是某一個(gè)熱點(diǎn) key 過期瞬間大量請求直接打到 DB。注意是“單個(gè) key”不是“一批 key”。應(yīng)對的核心思路是“不讓 DB 扛流量”一是互斥鎖只有一個(gè)線程去查 DB 重建緩存其它線程等待或返回默認(rèn)值二是邏輯過期不讓 key 實(shí)際過期而是在 value 里塞一個(gè)過期時(shí)間戳后臺(tái)異步刷新適合對一致性要求不高的熱點(diǎn)數(shù)據(jù)。緩存雪崩是大量 key 同時(shí)過期或者 Redis 實(shí)例宕機(jī)導(dǎo)致流量直撲 DB。處理手法過期時(shí)間加隨機(jī)值比如SETEX key (base random(0,300))、熱點(diǎn) key 預(yù)熱、多級(jí)緩存兜底本地 Caffeine 再擋一層。在 Redis 本身宕機(jī)時(shí)多級(jí)緩存幾乎是唯一能在 Redis 恢復(fù)前保護(hù) DB 的手段否則你再怎么設(shè)計(jì)過期時(shí)間也擋不住洪水。5.2 分布式鎖SET NX EX 和 Lua 缺一不可說到分布式鎖最常見的實(shí)現(xiàn)是基于SET key value NX EX seconds。注意這個(gè)命令必須是一條命令完成不能拆成SETNX再EXPIRE因?yàn)閮蓷l命令之間有間隙進(jìn)程崩了鎖就沒過期時(shí)間了死鎖就是這么來的。然后是釋放鎖很多人寫成if (redis.call(GET, KEYS[1]) ARGV[1]) then return redis.call(DEL, KEYS[1]) else return 0 end為什么要用 Lua因?yàn)椤芭袛嘀凳欠袷亲约旱摹焙汀皠h除 key”是兩個(gè)操作拆開執(zhí)行中間鎖過期了別的線程拿到了鎖然后你把這個(gè)別人的鎖刪了。這個(gè) bug 在并發(fā)稍高的場景下必現(xiàn)。用 Lua 把兩步合并成一個(gè)原子操作這是分布式鎖最底層的底線。還有兩個(gè)進(jìn)階問題要心里有數(shù)。第一個(gè)是“鎖過期時(shí)間怎么設(shè)”業(yè)務(wù)執(zhí)行時(shí)間可能超過鎖的過期時(shí)間導(dǎo)致鎖被提前釋放解決辦法是“看門狗”機(jī)制——在持有鎖期間定期續(xù)期但這是 Redisson 這些客戶端庫實(shí)現(xiàn)的能力自己裸寫要慎重。第二個(gè)是“主從切換鎖丟失”的問題主節(jié)點(diǎn)拿到了鎖但數(shù)據(jù)還沒同步到從節(jié)點(diǎn)主節(jié)點(diǎn)掛了從節(jié)點(diǎn)頂上后鎖就沒了。Redisson 的 RedLock 試圖解決這個(gè)問題但代價(jià)是復(fù)雜度陡增而且在大規(guī)模部署下正確性爭議一直存在。我的建議是能用數(shù)據(jù)庫唯一約束解決的業(yè)務(wù)就別用 Redis 分布式鎖用了就要接受它的“在極端故障下有鎖丟失風(fēng)險(xiǎn)”這個(gè)前提。5.3 序列化Redis 客戶端里最容易被忽視的性能瓶頸Java 用 Redis 時(shí)序列化方式直接影響你能存什么、占多少內(nèi)存。最常用的兩個(gè)StringRedisTemplate是純字符串讀寫存 Java 對象時(shí)你得自己把對象轉(zhuǎn)成 JSONRedisTemplateGenericJackson2JsonRedisSerializer可以自動(dòng)把對象序列化成 JSON 存入取出來時(shí)反序列化回對象非常方便但代價(jià)是存儲(chǔ)的內(nèi)容里會(huì)帶一段class類型信息占用并不大但是讀出來的數(shù)據(jù)肉眼看起來也不是那么干凈。序列化還有一個(gè)隱藏痛點(diǎn)默認(rèn)的JdkSerializationRedisSerializerSpring Data Redis 默認(rèn)配置如果沒做任何定制是 Java 原生序列化二進(jìn)制格式占用空間大而且存進(jìn)去的東西你在可視化工具里完全看不懂全是\xAC\xED開頭的一堆亂碼。我強(qiáng)烈建議任何項(xiàng)目都顯式配置 JSON 序列化方式除非你能忍受排查問題時(shí)對著亂碼猜內(nèi)容。Python 連接 Redis 也有類似問題用pickle序列化存進(jìn)去的數(shù)據(jù)別指望redis-cli能人類可讀??缯Z言讀寫同一個(gè) key 時(shí)一定要統(tǒng)一序列化方案否則等著你的就是亂碼或者反序列化異常。5.4 Lua 腳本不是炫技是原子性的救命稻草Redis 的 Lua 腳本能力很多初學(xué)者不重視覺得“我是業(yè)務(wù)開發(fā)用不上 Lua”。但實(shí)際上只要你的操作需要“讀當(dāng)前值 - 計(jì)算 - 寫回”這樣的組合Lua 就是最優(yōu)雅的原子性保證。前面說的分布式鎖釋放邏輯只是一個(gè)例子還有“限流器”INCR后判斷當(dāng)前計(jì)數(shù)是否超限超過則返回失敗整個(gè)過程塞進(jìn) Lua 里執(zhí)行就沒有并發(fā)下超發(fā)的問題。Lua 在 Spring 中通常用DefaultRedisScript配合execute調(diào)用在 Python 里是redis.register_script。用 Lua 時(shí)有幾個(gè)細(xì)節(jié)容易踩坑第一Lua 腳本里要訪問 Redis key 必須通過KEYS[]數(shù)組傳入不能寫在腳本里拼字符串否則 Redis 無法預(yù)分配槽位第二腳本執(zhí)行期間會(huì)阻塞 Redis千萬別寫死循環(huán)或者毫秒級(jí)都算慢的重計(jì)算第三腳本的“確定性”要求它不能在執(zhí)行過程中讀取自身的寫入結(jié)果在集群模式下會(huì)直接報(bào)錯(cuò)所以你在集群環(huán)境用 Lua 時(shí)要特別克制盡量只對單個(gè) key 做操作。6. 從學(xué)習(xí)到面試高頻題、監(jiān)控日志和排障手冊6.1 高頻面試題我建議你追根溯源別只背答案翻一翻網(wǎng)上流傳的“Redis 面試題”問得最多的是這些Redis 為什么快、緩存穿透和擊穿怎么解決、分布式鎖怎么實(shí)現(xiàn)、持久化怎么選、主從和集群的腦裂問題。這些問題并不難難的是你說答案的時(shí)候有沒有“現(xiàn)場感”。比如“Redis 為什么快”標(biāo)準(zhǔn)答案是“單線程避免上下文切換 基于 IO 多路復(fù)用的事件循環(huán) 純內(nèi)存操作”但你要是再往深走一步“單線程為什么還能這么快IO 多路復(fù)用到底是什么”很多人的回答就開始含糊了。我自己的理解是Redis 把每個(gè)連接封裝成一個(gè)文件事件交給內(nèi)核去監(jiān)聽讀寫事件有事件到達(dá)才觸發(fā)回調(diào)處理這本質(zhì)上和 Nginx 的事件驅(qū)動(dòng)模型類似是把“等待 IO”這件事從線程里解放出去了。你用“餐廳只有一個(gè)服務(wù)員但門口的鈴一響服務(wù)員才出去接待而不是坐在門口死等每個(gè)客人”這個(gè)類比就可以跟小白講清楚。再比如“Kubernetes 上能不能搭 Redis”這其實(shí)是一個(gè)信號(hào)題對方想看你有沒有意識(shí)到在云原生場景下Redis 這類有狀態(tài)應(yīng)用對網(wǎng)絡(luò)標(biāo)識(shí)Pod IP、節(jié)點(diǎn)名的依賴很強(qiáng)StatefulSet 是唯一合理的選擇。如果你能說出 StatefulSet 的穩(wěn)定網(wǎng)絡(luò)標(biāo)識(shí)和 Redis Cluster 的槽位分配之間是什么關(guān)系面試官對你的印象會(huì)立刻不一樣。6.2 日志、監(jiān)控和常見錯(cuò)誤每一個(gè)報(bào)錯(cuò)都別放過排查 Redis 問題的第一步是看日志。Docker 部署的實(shí)例用docker logs 容器名Linux 直接看日志文件的路徑在 redis.conf 里的logfile配置項(xiàng)。我最常關(guān)注的日志信息有幾類Background saving terminated by signal表示 BGSAVE 失敗通常和內(nèi)存或文件系統(tǒng)有關(guān)Possible nokey和Cant persist這類表示 RDB/AOF 寫入出問題要優(yōu)先檢查磁盤空間df -hMISCONF Redis is configured to save RDB snapshots, but its currently unable to persist on disk這個(gè)經(jīng)典的只讀錯(cuò)誤就是磁盤寫不進(jìn)去導(dǎo)致的。監(jiān)控指標(biāo)要盯四個(gè)connected_clients連接數(shù)used_memory內(nèi)存占用keyspace_hits和keyspace_misses算命中率命中率長期低于 80% 說明緩存設(shè)計(jì)有問題rdb_last_bgsave_status和aof_last_write_status持久化狀態(tài)。用redis-cli INFO stats | grep keyspace可以快速查命中率用SLOWLOG GET可以看慢查詢結(jié)合實(shí)際業(yè)務(wù)分析是查還是不查。可視化工具連接不上的排查路徑也很有套路基本按這個(gè)順序來第一步ping通不通第二步 telnet 6379 通不通第三步看服務(wù)端有沒有設(shè)置bind 127.0.0.1很多默認(rèn)配置只監(jiān)聽本機(jī)外部當(dāng)然連不上第四步看有沒有requirepass認(rèn)證第五步看云廠商安全組/防火墻有沒有放行 6379。八成問題都出在bind和防火墻這兩項(xiàng)。6.3 壓測、優(yōu)化和一把“性能底牌”最后聊聊性能Redis 本身吞吐很高但別忽略“客戶端導(dǎo)致的問題”。在項(xiàng)目中用了KEYS *這種 O(N) 命令在阻塞事件循環(huán)的同時(shí)它可能讓整個(gè) Redis 卡頓到毫秒級(jí)超時(shí)。用SMEMBERS拉取一個(gè)巨大 Set 的全部成員它會(huì)撐爆網(wǎng)絡(luò)和內(nèi)存。這些替換方案都是現(xiàn)成的SCAN分批遍歷 keySSCAN遍歷 SetLRANGE注意限制數(shù)量。養(yǎng)成“避免 O(N) 命令”的習(xí)慣是所有 Redis 使用者必須過的一道坎。壓測工具的選擇上redis-benchmark是官方自帶的最簡方案但它模擬不了復(fù)雜業(yè)務(wù)流量真要壓真實(shí)場景用redis-cli --latency看延遲分布、用INFO commandstats看每條命令的執(zhí)行次數(shù)和耗時(shí)占比比盲目壓 QPS 更有參考價(jià)值。我見過很多團(tuán)隊(duì)“壓測 QPS 達(dá)標(biāo)”但線上一緊張就告警觀察下來基本都是沒看延遲分布、沒看命令耗時(shí)導(dǎo)致的性能優(yōu)化要看“哪個(gè)命令最慢”而不是“系統(tǒng)最高支持多少 QPS”。我個(gè)人在實(shí)際操作中的體會(huì)是Redis 不是一個(gè)“學(xué)完就完了”的東西它和業(yè)務(wù)形態(tài)綁定得很深。同一個(gè)命令在緩存場景、計(jì)數(shù)場景、隊(duì)列場景中的語義和坑完全不一樣。你學(xué)它的方式?jīng)Q定了你后來踩坑的多少——如果只是背命令你會(huì)覺得它很簡單如果你動(dòng)手搭過集群、看過日志、壓過延遲、親手修過緩存穿透你才會(huì)真的理解“高性能中間件”這幾個(gè)字背后藏著多少容易被忽略的工程細(xì)節(jié)。這篇筆記是我自己踩坑過程的復(fù)盤寫出來算是給后來者省點(diǎn)時(shí)間尤其是那些第一次在項(xiàng)目里引入 Redis 的朋友愿你少走幾步彎路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99热66| 超碰色老头| 亚洲色天堂日韩中| 大香蕉免费3| 国产精品乱码久久久久| 91neishe| 99热99在线播放激情| av一区二区三区四区五区久草臀| av天堂精品久久| 欧美亚洲国产日本在线,久久精品国产| 人人做,人人操,人人摸| 久久精品| 国产性爱欧美性爱在线 | 日本三级黄页| 十八禁啪啦拍视频无遮挡| 欧美爱国产综合、| 95人妻爽爽人人做人人澡| 约操熟妇| 岛国色情视频在线观看| 欧美综色欧| 69超碰综合| 欧美性爱另类综合| 九九热精品| 可以在线观看AV的网站| 亚洲色图 欧美| 99热8| 五月天激情网站| 日本高清免费一本视频在线观看| 免费观看国产不卡av| 欧美伊人久久综合网| 97精品国产手机| 婷婷亚洲天堂| 手机在线视频国内精品| 亚洲色 国产 欧美 日韩| 男女日B国产| 亚洲人妻中文在线视频| 日本97久久| 人妻大香蕉| 婷婷国产精品九区| 五月婷婷久久综合| 亚洲囯产精品女人久久久| 超碰97中文| 日韩欧美中文字亚洲慕| 夜夜国自区| 久艹99| 97欧美色综合| 色欲色香天天天综合网www-亚洲综合国| 久操婷婷| 操我啊啊啊啊啊| 自拍六区| 亚欧操逼片在线观看| 夜色97| 中文无线日韩一区| 亚洲高清色综合| 中日韓欧美高清| 亚洲国产成人精品女人久久久| 97免费在线观看| 超碰在线一区二区| 日本操嫩b网| 日韩熟女乱伦中出| 久艾草在线精品视频在线观看| 97免费视频在线| 欧美激情色婷婷花野真衣一区二区| 欧洲无码一区二区| 日韩丝袜人妻AV| 柠檬AV导航| 天天干天天狼在线视频| 国产偷拍自拍在线视频| 九九九久千久久激情蜜桃在线看 | 日韩去日本高清在| 九九九综合精品| 精品十三区| 亚洲有薄码区日本系列中文字幕| 亚洲欧美一区二区不卡视频播放| 丰满少妇精品一区二区| 九九精品网| 新91视频.cmp| 97色综合中文网| 操迟操逼在巾线Fre看| 亚洲蜜桃V妇女| 1769精品一区二区三区| 操b网站亚洲无码| 大香蕉在线免| 麻豆一区二区AV天美| 明星性猛交ⅹxxx乱大交| 射久久| 婷婷久久久| 欧美亚洲另类在线蜜桃| 亚洲色天堂日韩中| 久久99久久99精品天美传媒棢·纸:. | 野狼福利社区| 内射夫妻三片| 亚洲免费成人精品电影| 久久久久斤小| 97综合久久| 日本国产欧美高清在线| www.婷婷六月天| 伊人991| 韩国一级做a久久久久| 草草草视频在线免费看| 女同女同恋久久级三级| 伊人影院中文字幕| 少妇高潮一区二区三区在线| 99热这里只有精品8| 91/欧美| 久久天堂| 少妇一线天久久久久久| 国产乱人妻精品入口| 色噜噜狠狠色综无码久久合欧美| 黄片www.| 麻豆天美在线| 99视频在线| 欧美在线|亚洲| 97日韩欧美| 婷婷色婷婷| 亚洲少妇激情一区二区三区| 亚洲啪啪综合?v一区综合精品区| 无码人妻精品一区二区中文| 狠色婷婷久久一区二区三区_| 97精品| 国产少妇肉丝在线观看| 嗯嗯啊啊啊好爽| 能直接看AV的网站| 密臀视频一区二区三区| 黄色免费一级在线毛片| 中文字幕 码精品视频网站| 性九九九九九九| 国产精品无码av在线| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 校园春色综合| 综合夜夜| 麻豆AV一区二区| 亚洲爽图| 污污污8888| 亚洲天堂AV在线播放| 久久婷综合| 综合网少妇| 思思99热| 在线免费观看高清无码视频| 97天天做| 家庭乱伦性爱av| 强奸熟女一区二区三区| 亚洲黄色影视| 91无遮挡| wuyechaopeng| 久久一二三四五六七八九区区区 | 五月天激情婷婷| 啊啊啊久久| 啊嗯好大视频在线观看| 人人妻人射| 男人的天堂成人的社区| 久久精品亚洲成a人天堂| 大香蕉92| 91天天日| 国产毛片毛片4p懂色| 色婷婷综合久久中文字幕雪峰| 国产真实子伦对白| 嗯嗯不要视频| 亚洲欧洲小说图片视频 | 亚洲精品 大香蕉| 在线日韩日本亚洲国产| 囯产精品强| 亚洲熟女乱色| 亚洲欧美中文日韩视频中国语 | 中文有码第五页| 亚洲国产综合图区中文字幕 | 91搡老女人老妇女老熟女歌词翻译| 欧美亚洲第1页| 日韩乱伦影音先锋| 国产中出内射一区二区| 国产久9| 91色五月俺来也| 国产色呦呦| 五十路一区无码| 欧洲亚洲人妻无码中字久久三区四区| 清柠毛片| aⅴ日韩成人电影av在线免费看av大全 | 澳门成人网站久国产日韩| 国产精品盗摄 偷窥盗摄| 久久综合久久综合人久久夜精品| 午夜寂寞欧美| 精品亚洲一区在线观看| 丝袜美腿av女优在线| 欧美综合网1| 超碰97资源中文字幕| 日韩免费性爱视频在线观看| 天美麻花大全视频| 欧美经典一区二区三区| 欧美极品美女aaaaaa级黄片| 97色碰| 久久精品国产97欧美精品亚洲| 裸体美女免费看网站青草| 亚乱色| 国产成人91一区二区三区| 亚洲色图8| 九九九九精品一区| 佐山爱中文字幕| 天综合网| 荡小穴在线观看| 欧美久热| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 欧美黄片免费在线观看视频| 亚洲最新中文字幕免费| 久久黄片国产一区二区| 中文字幕人妻资源在线| 日韩成人性日韩成人性爱视频在线免费观看 | 二对二中文字幕。| 亚洲熟女乱色| 热久久九九热| 超碰97最新人妻| 97天天综合网| 97一区二区三区视频| 青春草A| 久久久久久91香蕉国产| 欧美性爱网97| 色在线69堂| 狠狠躁天天躁日日躁97| 国产后入清纯| 97神马久久| 裸模AV女优| 区二区亚洲婷| 欧美日韩人妻婷婷一区| 五月天色色色| 日韩亚洲Av人人夜夜澡人人爽| 久久久久久91香蕉国产| 熟妇亚洲一区二区三区| 婷婷五月天久久精品视频一区二区三区 | 日韩电影天堂视频一区二区| 使劲用力艹少妇视频一区二区| 青青草国产亚洲精品久久| 天天摸天天插天天日| 中文字幕视频2区| 97超碰色屌| 国产精品网站www| 超碰到97情色| 久操免费观看| 久久天天艹| 中文字幕精品一区二区精| 久久久久国产精品喷潮免费观看臀| 美女写真| 久久久久ab| 青青草一区二区三区四| 日韩强奸av| 成人av影院在线观看| 精品久久人妻成人网| 亚洲人成网站7777| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 91色综合| 精品国产一级久久| 亚洲精品天天影视综合网 | 99精品久久| 97欧美精品综合| 日韩欧美中文字| 噜噜噜噜久久久精品免费| 亚洲无992tv| 黄色区免费观看中文字幕| 婷婷色中文字幕| 少妇天堂网络| 老熟妇乱轮| 黄网色一区二区三区四区精品| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 日韩有码一区三区| 欧美亚洲高清晰| 亚洲丝袜诱惑| 久久久九九网站| 色综和网| 精品无码欧美三级| 色噜噜人妻丝袜a∨先锋影| 丰满欧美少妇| 久久久久久久久久久久97| 久久五月天婷婷丁香中文字幕| 狠狠干,狠狠操| 91美女视频在线免费观看| 600国产精品视频| 国产一级不卡在线观看| 久久精品亚洲东京热色播| 91无码人妻精品一区二区三区蜜桃 | 久区视频| 69精品久久久久中文字幕| 九九精品美女高溯喷水| 亚洲一区在线观看欧洲| 操人妻少妇中文| 亚洲精品国产熟女久久久| Sekablack无码一区| 97在线免费看| 人人爱人人乐人人操| 国产九月婷婷| 91色综合| 欧美日韩亚洲五月天婷婷| 91久久九九精品国产综合| 精品女人999| 久草精品在线| 福利风月五月天影院| 9久久久久| 人人人人人人少妇| 白丝被操91| 91在线视频免费中出| 成年人黄色| 国产一区96在线| 亚欧成人一级片在线播放| 激情丁香五月| 97干97色| 欧美日本天堂| 国产女人视频三四五区| 国产原创自拍| yiqicaoav| 78久久久| 日本操逼二区| 欧美人妻一区二区| 大香蕉五月天| 国产精品久久aV| 国产精品午夜成人福利| 超碰国产精品久| 色麻豆AV| 十八禁啪啦拍视频无遮挡| 亚洲精品少妇| 99蜜桃臀亚洲成人在线观看| 久操视频资源站公开| 亚洲有薄码区久久在线一区| 色婷婷综合网| 夜夜草天天| 欧美中字二区| 女优视频第10页| 久久久97| 99热日| 超碰三级秋霞| 中文字幕交换人妻| 国产粉嫩蜜臀av一区二区三区| 精精夜夜| 搡老熟女老女人老熟妇免费视频| 超碰99re| 五月天亚洲网| 第四色亚洲色图| 亚洲高清无码免费观看视频| 九热视频| 亚洲无码国产探花在线观看| 无码九九九九| 久久久久久久久久久久久久久乱码| 超碰在线观看av不卡| 嗯嗯不要视频| 久热大香蕉网站| A V少妇特黄三级| 中国国产精品一区视频| 亚州综| 少妇精品久久久| 嗯啊不要在线| 国产一区二区欧美日本| 激情五月综合开心五月| 日韩少妇无码| 天天影视综合色| 欧美色图私拍91| 日本99热| 3p国产欧美99热| 51国产午夜精品视频| 国产精品日日摸天天碰| 天天色踪合| 91蜜臀在线久久久久| 丝袜美腿制服人妻二区中文字幕| 日韩免费av片高清无码| 久久啊啊啊| 国产人人干| 91在线色| 这里是精品| 亚洲操操操| 日本一区二区不卡精品| 国产黄色影片在线观看| 白丝被操91| 丝袜美腿亚洲| 97超碰人人模人人拍人人| 人人操人人操人妻人| 精吧天堂| 亚洲伊人青青草| 亚洲电影91| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV | 亚欧高清| 国产成人亚洲精品无码最新在线| 欧美性性性| 欧美日韩人妻精品一区二区三区| 9ⅰ久久久天天| 欧美最大综合网| 久久99草| 懂色AV网| 激情小说亚洲| 97超碰色| 樱花蜜乳av| 精品毛片av一区二区| 操www| 亚洲熟女精品| 日韩乱伦影音先锋| 操逼逼无码| 久久精品亚洲成a人天堂| 国产精品无码在线| 激情专区综合| 久久99操天天日| 无码一区二区三区四区五区六区七区八区九区十区视频 | 精品v日韩欧美国产| 国产精品麻豆视频网站| 亚洲中文字母在线播放| 久操热| 日韩美一区| 男人天堂久久日韩| 99热18这里只有精品| 热久久无毒不卡| 久久精品国产亚洲av水密被窝| 久操国产在线| 性色AV蜜色av色欲av| 韩日色费| 五月天综合网| 日韩超碰精品综合| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 久久熟女嫩草成人片免费| 中出20p| 欧美性夜| 啪啪啪东京| 亚洲综合中文字幕有码| 大香蕉伊利av| 日夜尻逼网| 男人久久天堂| 日本免费专区| 伊人97超碰| 啊啊啊好疼| 99热伊人| 加勒比久久综合网高清| 天天欧美色| 亚洲十八禁止| 翔田千里A片一区二区| 久操网视频| 亚洲激情综合| 91欧美性| 久久超碰国产一区二区三区| 日本精品不卡一二三区| 日本不卡码黄色| 亚洲少妇自拍中文字幕懂色| 乱伦熟女论坛| 亚洲色综合| 欧亚日韩三区| 国产 日韩,欧美 自拍| 日本 欧美 国产一区| 97人人爱人人做人人乐| 好吊色综合| 久久久久国产一区二| 少妇被玩视频二三区| 亚洲区小说| 黄色片,com| 蜜臀AV一区二区三区激情综合| 日韩综合色网| 强奸乱伦中文字幕AV| 亚洲乱色视频一区、二区在线| 超碰天天去日穴| av无码av无码专区| 91日产欧美| 久久国产AⅤ| 国产熟女少妇一区| 欧美性爱一区二区三区| 婷婷五月av| 91美女视频电影| 免费精品人妻一区二区三| 香蕉一区二区三区在线视频| 骚女天天综合网| 午夜天堂精品久久久久91| 97超碰中文字幕| 黄页视频网站野外| 日韩一级二级三级免费看完整版国语版 | 国产精品农村妇女| 亚洲国产无码精品首页久久久| 午夜天堂精品久久| 97色伦97色伦国产欧美| 四虎视频在线观看| 国产久久成人| 亚洲男人的天堂网| 国产亚洲禁久一区二区| 后入日本1234| 五月天色五月| 三久久久四久久久久| 水澄无码AV| 久久免费少妇| 玖玖综合色| 免费?级毛片无码?∨蜜芽试看| 中文字幕少妇色| 狠狠色噜噜狠狠狠狠2018| 欧美色997| 欧美日产国产在线成人第一区| 日韩欧美被操黄免费观看| 免费?级毛片无码?∨蜜芽试看| 日韩人妻无码精品系列| 久久久久亚洲?V片无码V| 操淫穴亚洲五月丁香| 极品尤物女神在线观看| 日本天天干天天操一区| 宅男午夜在线视频| 国产日韩区| 欧美在线|亚洲| 97精品综合久久| 极品肉射| 伊人久久大香线综合无码| 乱伦av国产| 国内一级精品| 玖玖蜜臀资源网| 亚洲中文日韩欧美大香蕉视频| 天操天操夜操夜月月年年操操| 看一级黄色视频| 午夜毛片亚洲精品片国产久久久| 欧美大香蕉97| 色婷婷av在线观看| 一级片在线观看高清无码| 麻豆区久久久久亚| 国产怡红院| 一起草日韩| 精品人妻一区二区三区四区| 青青草视频导航官网| 日韩乱伦视频| 中文字幕人成乱码熟女香港| 国际精品久久久| 鸥美插入视频| 久久国产99精品72福利 | 午夜AV污污污| 久久久久久久久久久久久久久乱码| 色狠狠 - 百度| 高清孕妇孕交 交| 最新精品久久蜜桃 | 久久久性爱| 熟妇高潮精品一区二区三区下载| 女色视频社区| 99久久久无码国产精品性男| 欧美偷拍区| 97天天| 性感美女啊啊啊在线| 熟妇人妻一区二区 | 伊人骚琪琪亚洲天堂网站| 国产亚洲日本| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 精品无码久久| 欧美日韩亚洲国产中文永久天天看| 成人综合色网| 另类天堂| 99啪啪视频| 人人人人插| 大香蕉乱级| 9久精品| 美欧色综合| 欧美另类天堂| 综合情欲网| 都市激情人妻一区二区青青操视频 | 日本福利社| 特级丰满少妇一级AAAA爱毛片| 欧美91精品国产自产| 97欧美日韩精品| 欧美激情精品久久久| 亚洲少妇在线影音| 国产精品91ai| 久操 高清| 天天做天天爱天天爽AV| 中文字幕亚洲欧美在线不卡| 青娱乐亚洲热| 有码免费观看| 欧美性区| 东京热av男人的天堂| 亚洲成人精品久久久| 亚州操操穴网| 日韩AV中文字幕电影| 国产人妻精品久久久一区二区三区| 99热精品在线在线| av优播| 精品久久99| 蜜臀AV一区二区三区激情综合| 日日日啊啊啊| 97er欧美性| 中文字幕AV片| 97超碰影音| 超碰色大香蕉| dy888午夜老子影视达达兔| 激情小说在线视频| 久久透逼视频| 大色综合网| 激情综合五月| 岛国小电影| 人人澡人人弄| 97久久久久久久久久| 人妻熟妇一区二区三区| 亚洲天堂久久久久久粉红视频| 一级一性爱免费视频| 内射老妇BBWX0C0CK| 乱欲一区二区| 红杏大香蕉| 成人精品视频一区二区| 999熟女精品| 色臀AV| 欧美一二三级精品在线| 欧美日韩国内不卡| 伊人久久亚洲中文字幕| 精品9区| 精品久久97观看在线视频| 91在线免费精品视频| 性久久| 青青草中文-久久青草精品一区二区三 | 日本亚洲熟女视频| 97人妻色| 男人的天堂久久狠| www国产无码| 粉嫩不卡一区二区性爱 | 一起草高清无码| 日本视频一区二区三区| 久久久精品日本一道| SUV一区二区在线看| 好涩综合| 老熟妇一区二区三区…| 婷婷色一区| 亚洲诱惑天堂| 手机看片日韩人妻| 志村玲子视频一区二区| 天天影视网色欲色香| 亚洲本色精品一区二区久久| 国产精品一区二区 尿失禁| 伊人青青一区成人视频在线观看区| 色九九综合AV| 思思视频免费看网站| 天天做天天爱| 一级免费精品| 视频在线观看免费一区二区三区| 91蜜臀在线久久久久| 99在线精品观看视频中文| 国产不良强奸视频免费看| 色色五月婷婷| 视频在线97| 色色香蕉| 亚州春色| 飘花国产午夜精品不卡| 久久色激情一区二区三区| 91色欧美| 成人综合久久精品色婷婷| 亚洲综合九| 亚洲 欧美 制服 另类 自拍| 7月婷婷综合| 精品九区| 色99视频| 国产精品乱码久久| 中文字幕 人妻不满 在线视频| 久久久久久久综合,国产| 久操网视频| 欧美性爱网97| 亚洲精美粉嫩嫩泬在线观看| 国产精品视频| 一本精品日本在线视频精品 | 超碰国产精品久| 96免费视频在线| 亚洲无码超碰免费| 香蕉久久国产AV一区二区| 岛国999| 国产精品一二三在线看| 亚洲AV资源| 人干人人人操人人摸| 啊啊啊啊啊好大好舒服想要| 亚洲欧美激情小说| 无码外流操逼视频| 水澄无码AV| 国产日韩欧美| 美女操逼福利视频| 久久中久文96| 日韩精品中文字幕二区| 小电影欧美91| 成人欧美一区二区三区黑人一| 久久久久久十| 国产欧美美女免费观看视频| 精品一区二区人妖| 久久华人网| 五月丁香综合激情| 国产高清自拍视频| 成人A片男人的天堂| 亚洲一曲日韩精品| 亚洲情色 无码专区| 色综合色色| 屁股久久久久久久| 久久久久ab| 色爱三区| 啊啊啊啊啊啊在线观看| 久久一二区四| 风流老熟女一区二区三区l| 热G综合热G中文| 久99久视频精选| 男女激烈网站最新| 草B在线| 老熟女91av| 男女激情黄色网址| 九九碰九九爱97超| 一直超碰| 五月丁香久久| 亚洲一曲日韩精品| 亚洲中文字幕一区二区| 岛国人妻少妇av在线观看| 国产精品自拍欧美在线| 蜜臀久久99精品久久久久| 九草在线大香蕉| 大香蕉综合网| 国产精品嫩草影院免费| 91人人操| 亚洲图片在线| 英伦大奶子熟妇吊带| 亚洲午夜福利在线影院| 精品人妻中文字幕高清| 91亚洲狠狠色| 91+欧美| 婷婷大香蕉| 2019久久久久久久久福利| 国产熟女无套内射| 毛片麻豆91糖心精品毛情片| 精品无码一区二区| 亚洲欧美经典一区二区| 天天干天天燥| 欧美爱爱97| 精品久久久久成人码免| 日日夜夜青青草母狗| 天天干美少妇一区| 欧美视频边做饭边橾| 人人操人人干xxx| 久久香蕉国产线看观看亚洲女人 | 97爱b| 97超碰国产精品| 国产精品久久久三级无码| 内射小黄片| 91天天看| 91综合熟女| 国产丝袜啪啪| 91蜜臀人妻中文字幕在线| 综合久久99亚洲人妻中文在线| 97超碰国产精品| 婷婷色综合| 日本一级黄色电影| 日本3级一区二区免费| 国产亚洲日韩在线三区黑人| 成人蜜乳小视频网站| 九九九九国产| 性色亚洲| 日韩肏逼视频| 热99这里有精品综合久久| 手机av亚洲丝袜美腿日韩第一页二页| 宗合情欲网| 欧美 亚洲 大香| 欧洲Au麻豆| 久久免费看高潮毛片韩国| 色爽爽文学| 国产不卡精品91| 精品超碰中文在线| 青青操青娱乐| 久久国产精品91| 日韩女优中文字幕| 欧美久久毛片基地| 久久久久ab| 欧美天堂亚洲电影院一区在线播放| 日韩情色AV| 伊人久久蜜月| 亚洲欧美啪啪| 久久久青青草| 欧美综合天天| 婷婷在线视频在线观看| 日韩精品国产一区二区| 26uuu国产日韩综合在线观看| 天天色天天干天天射| 熟女人妇一区二区三区| 人人干人人搞人人摸| 久久婷婷伊人| 国产亚洲 中文欧美久久| 抽查国产福利主播| 制服诱惑亚洲一区二区三区在线观看| 少好三P| 欧美 亚洲| 91一区二区三区蜜桃| 天天操天天射天天日| 丰满人妻av一区二区三区| 日本三级中国三级99人妇网站| 欧美午夜精品久久久久久超碰| 人人操天天爽| 久久久九九| 欧美熟妇精品黑人巨大91| 超碰精品国产无码| 五月天婷精品激情| 天天操av懂色| 内射卯月麻衣| 97干97色| 国产精品一区二区 尿失禁| 欧美色图天堂在线| 欧美午夜视频| 熟妇一区二区| 强奸乱伦麻豆| 天天插天天舔舔天天干| 91少妇通奸网站| 神马久久久久久| 亚洲图片欧洲图片aⅴ| 欧美|91色综合| 人妻熟女一区二区| AV乱伦国产| 国产99 中文字幕日韩小视频| 亚洲男人天堂2012| 夜夜夜夜久久久久| 伊人精品久久网站| 国产人妻精品久久久一区二区三区| 97 九色| 极品白嫩美少妇在地板上位骑射淫水泛滥| 久久riav中文精品| 99re6国产精品99re在线| 久久精品日韩专区免费观看| 中国AAAAAA黄色片| 五月丁香综合| 久久久久96| av在线观看不卡网站| 青青国产精品在线| 国产精品另类| 亚洲国产精品无码AV在线| 99re这里只有精品3| 漂亮人妻被强中文字幕hd| 超碰成人公开| 中文字幕乱码人妻一区二区三区,99精品| 国产精品午夜福利| 欧美视频一区二区在线| 啊啊啊啊啊啊啊好爽不要| 啊啊啊水好多| 国产精品视频精品一二| 啊啊啊好舒服视频在线观看| 私人尤物在线精品不卡| 超踫中文字幕| 久久精品区| 最新国产精品久久精品| 九九九草| 亚洲一卡2卡3卡4卡乱码网站| 97天天操天天干| 中日韩一区二区三区欧美| 超碰97起碰| 精品午夜福利| 国语人妻精彩刺激| 欧美天天干| 激情开心五月天| 亚洲Av诱惑| 99久久婷婷国产综合精品草原| 99re在线视频这里只有精品| 日韩精品黄片免费观看| 插入粉嫩少妇视频| 国产精品一区二区 尿失禁| 日韩 女同 综合| 青娱乐久久艹| 青草伊人网| 91日韩在线| 2017天天操| 亚洲91av| 亚洲欧洲日本精品中文a∨| 欧美天天综| 人人摸.人人色| 激情综合网一盗摄| 激情接吻视频久久久久久| 欧美色图在线视频少妇| 丰满人妻大屁一区二区| 在线播放欧洲免费av| 日韩成人精品中文字幕| 玖玖综合网| 日韩丝袜人妻AV| 男女猛烈无遮掩视频免费软件| 五月天久久婷婷亚洲| 国产最新小视频在线播放下载| 都市激情人妻一区二区青青操视频| 国产精品呦一区二区三区| 夜夜嗨免费视频| 激情婷婷五月天| 亚洲中文字幕在现观看| 屌妞视频久久久久久久 | 九九九九日本 | 日韩丝袜高跟制服在线观看| 一区二区三区四区免费视频| 日韩AV噜噜噜一区二区三区四区 | 啊啊啊啊网站| 久久久久久久久久久999| 美女国产一区二区久久| 91性网| 欧美老妇综合网| 91成人在线免费视频| 水滴偷拍| 黄色十八禁网站| 国产亚洲精品自在线亚洲情侣| 国产剧情在线| 欧美熟女丝袜| 色噜噜综合在线| 无码高清国产AV| 99热婷婷一区二区三| 精品国产一区二区三区久久久蜜臀| 国产亚洲精品美女久久久久久2021| 亚洲中字慕不卡| 精品福利视频| 国产乱伦一二三区| 香蕉国产精品麻豆亚洲欧美日韩| 东京热99999| 久久国色天香香蕉| 国语对白在线播放视频| 人人妻人人澡人人爽久久av| 中文字幕一区二区三区蜜臀| 日韩青久久| 精品福利视频| 中文字幕黄色片| 黄视频免费| 男人的天堂com| 亚州综合色图| 97超碰色五月| 精品人人插人人操| 精品人妻中文字幕4399| 日韩熟女精一区二区三区不卡| 九九热精彩视频| 999久久久久久久精| 日本岛国黄色网址| 亚洲天堂AV在线播放| 91精品人| 亚洲av资源| 久久久久久久综合,国产| 国模不卡一本二本三电影| 五月综合色| 8050无码八戒| 国产熟女完整版中字| 精品欧美老熟女一二区| 午夜啊啊| 淫穴高潮色图| 黄色十八禁| 亚洲和欧美裸体美女双飞视频| 欧美成人9797| 五月丁香影视| 欧美日韩99| 亚洲最大网站av| 亚洲成人久久一区二区| 国产亚洲精品无码三区| 亚洲伊人成综合成人网| 国语少妇精| 天天天干977| 加勒比综合在线| 中文字幕av片| 天天干夜夜操一区二区| 热的中文 热的有码 热的国产| 天天α片| 99在线视频播放| 色大师网站www永久网站视频| 亚洲精品97在线| 精品夜夜澡人妻无码| 亚洲午夜免费狠狠干| 五月天婷婷小说| 天天干天天做| 天天综合在线4| 无码91| 一区二区三区四区五区高清无码永久视频| 日韩人妻少妇 一区二区三区| 色婷婷九月| 色情综合网| 久久色人体| 日本青青草在线| 丝袜综合色图| 91麻豆一二三区| 亚洲亚洲亚洲天堂天堂| 欧美啪啪啪91| 激情一区二区| 欧美日韩在线视频网站| 秋霞操逼片| 成年人黄色小视频网站| 久久久久国产精品片区无码直播| 日韩av影片在线观看| 极品极品色影院| 中文字幕在线观看丝袜| 好爽,再快点啊哈嗯嗯嗯嗯| 国产AV天美| 91男人天堂网| 97爱爱官网| 一区在线精品中文字幕| 久久久久久国产成人| 粉嫩粉嫩一区性色AV片| 欧美性爱精品一区二区| 亚洲午夜免费狠狠干| 人人手机欧洲亚洲国产人妻| 亚洲成人一二三区| k频道色撸撸| 久久精品无码专区| av一区二区三区不卡| 欧美日韩在线国产在线| 久久久婷| AV在线资源| 伊人九九| 大学生口爆吞精| www久| 天天做天天爱天天爽AV| 91中文字幕在线观看| 亚洲人成在线放东京热| 不卡一区二区日本视频| 五月天激情小说| 色偷偷色偷偷欧美日韩| 国产91美女视频| 免费a级毛片av无码久久精品中文字幕| 国产极品美女高潮无套在线观看| 久久久婷| 狠色婷婷久久一区二区三区_| 亚洲高清欧美总合| 国产大陆天天艹| 天天欧美色| 操逼大黄片| 色综合久久888| 污污污8888| 大香蕉78| 国产AV久久久蜜爱影集| www.99热在线只有精品| v91av| 精品国产一级久久| 热久久九九热| 屁股久久久久久久久久| 一区二区视频在线播放| 国产白嫩精品久久| 亚洲图片91| 亚洲一区二区三区AV无码| 少妇天堂网络| 午夜精品久久久| av国产无码| 91少妇通奸网站| 天天躁日日躁成人字幕aⅴ| 一区二区三区精品黑丝白丝酒店对鸡| 日韩精品三级片长长久久| 91美女视频| 精品超碰中文在线| 蜜臀久久99精品久久久久久成人小说| 久草视频观看视频在线| 大香蕉十区| 国产精品美女视频诱惑| 婷婷五月天影院| 欧美色图99| 立川理惠无码一区二区| 国产AV人人夜夜澡人人爽麻豆| 精品国产91内射久久| 夜夜夜久久| 丰满人妻区一区二区三| 欧美激情五月天| 唯美清纯 妖精视频| 亚洲精品人妻吞精av| 精品视频久久区| 日韩欧美午夜视频在线| 亚洲视频二区 | 亚洲色吧网| 97在线视频免费看| 爱我干综合| 欧成人在线| 日本久久精品| 天天欲望网| 欧美色婷婷| 91精品丝袜久久久久久| 久久综合婷婷| 色综91| 国产在线不卡导航| 小说区 图片区色 综合区| 亚洲国产一区二区三区在线| 色吧5亚洲| 亚洲色9| 18禁中文字幕| 久久久久久久久久久久欧美日| 欧美亚洲尤物久久| 久久中文字幕女同性恋一区| 国产福利影视| 蜜臀99精品国产高清在线观看| 99性爱| 精品一级毛片在线观看| 久久国产精品,久久国产| 亚欧毛片基地国产毛片基地| 欧美暴力猛交| 全球成人中文在线| 高颜值美女口爆高潮浪叫| 另类图片五月天| 老司机福利青青草| 国产久久一区二区| 国产成人无码高清| 99re视频这里只有精品| 四虎影库国产精品免费| 中文字幕乱码人妻二区三区| AV色五月天| 天天爽天天爽| 国产v片在线免费观看| 色臀aV| 久久精品国产精品亚洲艾通辽熟妇| 欧美色网| 日本孕妇孕交| 久久99热这里只频精品6学生| 东北少妇高潮zzzz| 九九九精品色乱九九九| 五月丁香网站| 国内偷自视频区视频综合| 天天综合网亚洲综合网| 青草青青久久久久久国产| 国产欧美精选激情视频| 综合亚州欧美| 日韩超碰精品综合| 亚洲成人久久美女| 欧美亚洲自拍另类人妻| 呻吟 欧美 日本 中出| 国产11页| 亚洲国产成人精品无码专区| 中文字幕在线免费观看 | 亚洲欧美日韩国产丝袜自拍中文| 少妇滛荡视频| 日韩免费三级黄片电影| 午夜操一视频一区| 日han少妇无码| 91久热| 综合 欧美 亚洲 日本| 外国91| 亚洲91射| 日韩激情视频| 性色一线| 日韩不卡av一二三| 欧美日韩黄片精品在线 | 日韩女优在线| 亚洲欧洲网站免费观看| 岛国片在线视频网站| 色图综合| 黑人精品欧美一区二区蜜桃| 人妻人人澡人人爽人人| 伊人午夜福利视频| 性猛交| 久久是精品| 97国产天堂岛| 禁止观看美女黄| 另类天堂| 手机在线观看不卡无码av| 亚洲另类欧美精品| 欧成人精品一区二区三区| 亚洲性感丝袜诱惑在线观看| 熟女一区二区| 久久久久13| 人妻少妇色综合| 婷婷亚洲综合| 亚洲一区二区三区AV无码| av在线播放国产一区| 青娱乐淫乱1314| 试看60秒 爽| 久久系列| 蜜臀久久久99久久久久| 久久精品噜噜噜成人看免欧美大片| 不卡一区视频| 欧美91网站| 欧美韩国你懂得在线 | 黄色欧美性爱视频| 乳欲人妻办公室奶水| 370p日韩欧美亚洲精品| 98人妻精品一区二区色欲 | 精品视频97| 天天碰操中国年青熟妇| 欧洲免费一区二| 中文字幕一区二区三区人妻少妇在线| 国产精品成人在线| 99在线精品观看99| 开心五月激情网| 久久精品99| 男人的天堂啪啪| 欧美性猛交美女自慰91| 亚洲影视综合网| 国产精品小视频一区二区三区| 青青草原人妻| 91九色丨国产丨爆乳| 亚洲色图欧美色图制服丝袜| 亚洲图片欧美制度| 日韩在线97| 亚洲黄a三级三级三级看三级| 97欧美日韩中文| 亚洲色综网| 精品一级| 2017av无码免费无线播| 91看黄片|