亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

基于Redis的高并發(fā)緩存實(shí)戰(zhàn):分布式鎖與穿透擊穿雪崩治理

基于Redis的高并發(fā)緩存實(shí)戰(zhàn):分布式鎖與穿透擊穿雪崩治理 簡(jiǎn)介面向畢業(yè)設(shè)計(jì)與高并發(fā)緩存實(shí)戰(zhàn)的完整Redis項(xiàng)目資源適合希望深入掌握Redis核心原理、緩存策略與高并發(fā)場(chǎng)景落地的開(kāi)發(fā)者。壓縮包共79個(gè)文件以72個(gè)Java源碼類文件為主同時(shí)包含XML配置文件、Lua腳本、YAML配置與SQL初始化腳本整體體積僅93KB結(jié)構(gòu)緊湊、模塊邊界清晰。項(xiàng)目?jī)?nèi)容覆蓋常用數(shù)據(jù)結(jié)構(gòu)、RDB與AOF持久化機(jī)制、消息發(fā)布訂閱、事務(wù)與管道操作以及集群的搭建和數(shù)據(jù)分片策略同時(shí)按實(shí)際業(yè)務(wù)完成了緩存系統(tǒng)從架構(gòu)設(shè)計(jì)、編碼實(shí)現(xiàn)到壓測(cè)驗(yàn)證的完整閉環(huán)。通過(guò)該項(xiàng)目可掌握高并發(fā)環(huán)境下的緩存讀寫(xiě)優(yōu)化、數(shù)據(jù)庫(kù)壓力緩解和系統(tǒng)橫向擴(kuò)容方法為畢業(yè)設(shè)計(jì)或工程實(shí)踐提供可直接參考的完整樣例。目前已有48人學(xué)習(xí)適合正在準(zhǔn)備課設(shè)、畢設(shè)或面試的開(kāi)發(fā)者系統(tǒng)學(xué)習(xí)。1. 基于Redis實(shí)戰(zhàn)的高并發(fā)緩存項(xiàng)目在解決什么問(wèn)題不是把數(shù)據(jù)放進(jìn)內(nèi)存就完事秒殺剛開(kāi)始的一瞬間幾萬(wàn)個(gè)請(qǐng)求同時(shí)打向商品詳情頁(yè)如果每次都回源數(shù)據(jù)庫(kù)連接池幾秒就會(huì)被榨干接口延遲從幾十毫秒一路退化成超時(shí)。基于Redis實(shí)戰(zhàn)的高并發(fā)緩存項(xiàng)目練的就是這件事把熱點(diǎn)讀的壓力擋在數(shù)據(jù)庫(kù)前面同時(shí)保證緩存與數(shù)據(jù)庫(kù)最終一致。它把一條完整落地鏈路拆成可執(zhí)行步驟——Redis安裝與配置、數(shù)據(jù)類型選型、過(guò)期淘汰策略、分布式鎖、緩存穿透/擊穿/雪崩治理再到JMeter壓測(cè)和集群選型。適合正在準(zhǔn)備后端面試的Java工程師也適合在業(yè)務(wù)里被緩存一致性和緩存失效問(wèn)題追著跑的人。照著復(fù)現(xiàn)一遍等于提前踩完了高并發(fā)緩存最常見(jiàn)的坑。2. 先搭起高并發(fā)緩存的最小骨架環(huán)境、數(shù)據(jù)類型與過(guò)期機(jī)制高并發(fā)緩存項(xiàng)目不能一上來(lái)就上集群先把單機(jī)跑順。我一般先把本機(jī)或一臺(tái)測(cè)試機(jī)的Redis拉起來(lái)把讀寫(xiě)鏈路跑通再去談分布式鎖和緩存治理。不在單機(jī)階段把數(shù)據(jù)類型、過(guò)期策略和序列化方式定好后面壓測(cè)一打全是臟數(shù)據(jù)排錯(cuò)成本極高。2.1 本地快速拉起一個(gè)Redis安裝命令、核心配置與可視化工具常見(jiàn)做法是在Linux服務(wù)器上裝Redis。測(cè)試環(huán)境圖省事可以用包管理器但建議至少用源碼方式裝一次方便鎖定版本和看編譯輸出# Ubuntu / Debian 系快速安裝 sudo apt-get update sudo apt-get install -y redis-server # 源碼安裝便于指定版本 wget https://download.redis.io/releases/redis-7.0.14.tar.gz tar xzf redis-7.0.14.tar.gz cd redis-7.0.14 make sudo make install編譯通過(guò)后先前臺(tái)啟動(dòng)一次確認(rèn)沒(méi)有報(bào)錯(cuò)再轉(zhuǎn)后臺(tái)redis-server。生產(chǎn)習(xí)慣是用配置方式啟動(dòng)redis-server /etc/redis/redis.conf。源碼編譯的Redis默認(rèn)不帶systemd腳本我用nohup redis-server 起測(cè)試實(shí)例線上則用systemd或容器托管。拿到一個(gè)能跑的Redis后先改四個(gè)參數(shù)避免后患。打開(kāi)redis.conf把監(jiān)聽(tīng)地址、密碼、內(nèi)存上限和持久化策略一次調(diào)好# 綁定內(nèi)網(wǎng)網(wǎng)卡不要裸暴露到公網(wǎng) bind 127.0.0.1 192.168.1.100 # 生產(chǎn)環(huán)境必須設(shè)密碼 requirepass yourstrongpassword # 內(nèi)存上限防止OOM把整個(gè)機(jī)器拖死 maxmemory 2gb maxmemory-policy allkeys-lru # RDB AOF 雙開(kāi)注意性能和安全的取舍 appendonly yes appendfsync everysecbind只允許本機(jī)和內(nèi)網(wǎng)IP訪問(wèn)是防止緩存被外部掃描的第一道門(mén)。requirepass不設(shè)的話Redis基本等于裸奔。maxmemory設(shè)成物理內(nèi)存的一半左右避免Redis吃滿內(nèi)存后觸發(fā)系統(tǒng)OOM Killer。appendfsync everysec是性能和安全的中間值always太慢no容易丟數(shù)據(jù)。排查數(shù)據(jù)寫(xiě)沒(méi)寫(xiě)進(jìn)去時(shí)不一定非開(kāi)可視化工具。我習(xí)慣先用redis-cli直接敲命令驗(yàn)證redis-cli -a $REDIS_PWD GET product:1001。要看某個(gè)key多久過(guò)期用TTL product:1001要看哪些key占內(nèi)存大用redis-cli --bigkeys??梢暬ぞ哂脕?lái)觀察整體結(jié)構(gòu)更直觀Redis Desktop Manager和Another Redis Desktop Manager都可以我一般拿它看key前綴分布和過(guò)期情況不會(huì)拿它做線上寫(xiě)操作。2.2 用Spring Boot寫(xiě)最小緩存讀寫(xiě)String、Hash還是對(duì)象序列化后端整合Redis常見(jiàn)做法是用Spring Boot的spring-boot-starter-data-redis。先配置連接池和序列化方式spring: data: redis: host: 127.0.0.1 port: 6379 password: ${REDIS_PWD} timeout: 3s lettuce: pool: max-active: 50 max-idle: 20 min-idle: 5 max-wait: 300ms連接池參數(shù)里max-active是核心。50個(gè)連接應(yīng)對(duì)單機(jī)壓測(cè)夠用但注意這只是上限不是初始值。min-idle設(shè)5避免流量突增時(shí)臨時(shí)創(chuàng)建連接產(chǎn)生延遲。timeout設(shè)3秒防止Redis阻塞時(shí)客戶端無(wú)限等待。讀寫(xiě)代碼我傾向于用StringRedisTemplate而不是RedisTemplate。RedisTemplate默認(rèn)的JDK序列化會(huì)把key和value都變成一串\xAC\xED開(kāi)頭的亂碼調(diào)試和排查都很難受。StringRedisTemplate把一切當(dāng)字符串處理配合JSON做序列化最直接Service public class ProductCacheService { private final StringRedisTemplate stringRedisTemplate; private final ObjectMapper objectMapper new ObjectMapper(); public Product getProduct(Long id) throws JsonProcessingException { String key product:detail: id; String json stringRedisTemplate.opsForValue().get(key); if (json ! null) { return objectMapper.readValue(json, Product.class); } // 未命中緩存回源數(shù)據(jù)庫(kù) Product product loadFromDb(id); if (product ! null) { stringRedisTemplate.opsForValue().set(key, objectMapper.writeValueAsString(product), Duration.ofMinutes(30)); } return product; } }這里set操作帶了Duration等于同時(shí)把TTL設(shè)好比先set再expire少一次網(wǎng)絡(luò)往返。為什么用String因?yàn)镴SON可讀、跨語(yǔ)言、方便排查線上出問(wèn)題能用肉眼看出value格式對(duì)不對(duì)。Hash則更適合熱更新場(chǎng)景比如商品詳情只改價(jià)格字段時(shí)用Hash的HSET product:hash:1001 price 99.9只寫(xiě)一個(gè)字段而不是把整個(gè)JSON拿出來(lái)反序列化再寫(xiě)回去。數(shù)據(jù)類型選擇原則很簡(jiǎn)單讀多寫(xiě)少用String字段級(jí)更新頻繁用Hash計(jì)數(shù)場(chǎng)景用String加INCR命令。2.3 緩存過(guò)期與淘汰策略參數(shù)怎么定才不被流量打穿每個(gè)key設(shè)多長(zhǎng)TTL是高并發(fā)緩存項(xiàng)目里最考經(jīng)驗(yàn)的地方。太短緩存形同虛設(shè)太長(zhǎng)數(shù)據(jù)不新鮮。我一般按業(yè)務(wù)容忍度分四類業(yè)務(wù)場(chǎng)景TTL建議說(shuō)明熱點(diǎn)商品詳情30分鐘到2小時(shí)容忍短暫不新鮮驗(yàn)證碼5分鐘必須嚴(yán)格過(guò)期庫(kù)存計(jì)數(shù)不設(shè)TTL或30秒配合分布式鎖更新用戶會(huì)話信息2小時(shí)有活動(dòng)時(shí)滑動(dòng)續(xù)期注意TTL不能全員寫(xiě)死。一個(gè)商品詳情頁(yè)在零點(diǎn)整同時(shí)過(guò)期會(huì)引發(fā)一次微型雪崩。解決辦法是加隨機(jī)偏移我習(xí)慣在固定TTL基礎(chǔ)上加0到60秒的隨機(jī)值Duration ttl Duration.ofMinutes(30) .plus(Duration.ofMillis( ThreadLocalRandom.current().nextLong(0, 60_000)));maxmemory-policy決定內(nèi)存滿了之后誰(shuí)被淘汰。默認(rèn)noeviction在寫(xiě)新key時(shí)會(huì)直接報(bào)錯(cuò)絕對(duì)不能用在生產(chǎn)。我線上常用allkeys-lru讓Redis按最近最少使用淘汰對(duì)熱點(diǎn)讀場(chǎng)景最省心。volatile-lru只淘汰設(shè)置了TTL的key適合緩存和永久數(shù)據(jù)混用的實(shí)例。如果業(yè)務(wù)數(shù)據(jù)有明顯冷熱區(qū)分又不想手動(dòng)管理allkeys-lru是最省事的選擇。3. 真正扛高并發(fā)的關(guān)鍵分布式鎖與緩存穿透/擊穿/雪崩治理單機(jī)緩存跑通只是起點(diǎn)。真正讓高并發(fā)緩存項(xiàng)目值錢(qián)的是并發(fā)場(chǎng)景下的鎖和三類經(jīng)典問(wèn)題緩存穿透、緩存擊穿、緩存雪崩。這三個(gè)詞面試必問(wèn)線上也必踩我一個(gè)個(gè)拆開(kāi)講。3.1 用SETNX到Redisson改造分布式鎖三個(gè)參數(shù)定生死緩存重建場(chǎng)景里如果熱點(diǎn)key失效幾十個(gè)線程同時(shí)回源數(shù)據(jù)庫(kù)MySQL會(huì)瞬間被打滿。常見(jiàn)做法是給緩存重建加分布式鎖只允許一個(gè)線程回源其余線程等待后復(fù)用第一個(gè)線程寫(xiě)的緩存。先看Redis原生命令版本。Redis從2.6.12開(kāi)始SET命令可以把加鎖和過(guò)期一次完成# 返回OK代表?yè)屾i成功返回nil代表鎖已被占用 SET lock:product:1001 8f3b2c9e NX EX 30NX表示只有key不存在時(shí)才寫(xiě)入EX 30表示鎖自動(dòng)過(guò)期30秒。value一定不能寫(xiě)死要寫(xiě)一個(gè)隨機(jī)UUID這樣釋放鎖時(shí)能確認(rèn)是自己的鎖。釋放鎖不能直接DEL否則可能把別人剛搶到的鎖刪掉。要保證原子性用一段Lua腳本if redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end這段Lua先校驗(yàn)value是否對(duì)得上對(duì)得上才刪這是分布式鎖最基本的安全底線。但原生SETNX有個(gè)隱患如果業(yè)務(wù)執(zhí)行超過(guò)30秒鎖自己過(guò)期了第二個(gè)線程進(jìn)來(lái)第一個(gè)線程還沒(méi)執(zhí)行完鎖就形同虛設(shè)。我線上更推薦用Redisson它提供的watchdog機(jī)制會(huì)自動(dòng)續(xù)期默認(rèn)每10秒檢測(cè)一次鎖是否仍持有自動(dòng)把鎖有效期延長(zhǎng)到業(yè)務(wù)結(jié)束RLock lock redissonClient.getLock(lock:product:1001); boolean locked lock.tryLock(0, 30, TimeUnit.SECONDS); if (!locked) { throw new BizException(排隊(duì)中請(qǐng)稍后重試); } try { // 只允許一個(gè)線程回源重建緩存 Product product loadFromDb(id); stringRedisTemplate.opsForValue().set(key, productJson, Duration.ofMinutes(30)); } finally { if (lock.isHeldByCurrentThread()) { lock.unlock(); } }tryLock三個(gè)參數(shù)分別是最長(zhǎng)等待時(shí)間、鎖租約時(shí)間、時(shí)間單位。最長(zhǎng)時(shí)間設(shè)0表示搶不到就立刻返回適合秒殺場(chǎng)景讓用戶排隊(duì)重試。租約時(shí)間設(shè)30秒業(yè)務(wù)超過(guò)這個(gè)時(shí)間鎖會(huì)釋放防止持有鎖的節(jié)點(diǎn)宕機(jī)后鎖和業(yè)務(wù)一起掛掉。用Redisson時(shí)注意加鎖操作本身也可能拋異常要放在try外面否則鎖初始化失敗會(huì)被當(dāng)成業(yè)務(wù)異常吞掉。3.2 緩存穿透、擊穿、雪崩的治理空緩存、互斥重建與隨機(jī)TTL緩存穿透是查詢一個(gè)根本不存在的數(shù)據(jù)比如惡意請(qǐng)求商品ID為-1的接口。緩存里沒(méi)有數(shù)據(jù)庫(kù)里也沒(méi)有每次請(qǐng)求都回源數(shù)據(jù)庫(kù)壓力直接爆表。解決思路是給不存在的key也寫(xiě)一個(gè)空緩存TTL設(shè)短一點(diǎn)比如30秒Product product loadFromDb(id); if (product null) { // 空緩存兜底防止穿透 stringRedisTemplate.opsForValue().set( product:detail: id, EMPTY, Duration.ofSeconds(30)); return null; }更徹底的做法是前置布隆過(guò)濾器把存在的ID放在過(guò)濾器里請(qǐng)求先過(guò)過(guò)濾器不在直接返回。布隆過(guò)濾器有誤判率參數(shù)一般設(shè)1%以內(nèi)就夠用。它的缺點(diǎn)是維護(hù)成本高新增商品要同步更新位圖適合ID范圍穩(wěn)定的場(chǎng)景。緩存擊穿是熱點(diǎn)key剛好過(guò)期大量請(qǐng)求同時(shí)打進(jìn)來(lái)。穿透是查不存在的數(shù)據(jù)擊穿是查存在但緩存剛好失效的數(shù)據(jù)。擊穿的標(biāo)準(zhǔn)解法是互斥鎖只有搶到鎖的線程回源其余線程短暫等待后重查緩存。我常用SET key value NX EX做輕量鎖比Redisson更輕適合單機(jī)壓測(cè)練手String lockKey lock:product:detail: id; Boolean ok stringRedisTemplate.opsForValue() .setIfAbsent(lockKey, 1, Duration.ofSeconds(5)); if (Boolean.TRUE.equals(ok)) { try { Product product loadFromDb(id); stringRedisTemplate.opsForValue().set(cacheKey, json, Duration.ofMinutes(30)); } finally { stringRedisTemplate.delete(lockKey); } } else { // 沒(méi)搶到鎖的線程等50ms后重查緩存 Thread.sleep(50); return getProduct(id); }這個(gè)是遞歸重查緩存剛被重建第二次查詢就能命中。注意Thread.sleep時(shí)間不要超過(guò)鎖的過(guò)期時(shí)間否則緩存還沒(méi)建好鎖就沒(méi)了后續(xù)請(qǐng)求還是會(huì)回源。緩存雪崩比擊穿更廣是大批量key同時(shí)過(guò)期或Redis節(jié)點(diǎn)宕機(jī)。解決思路分散化TTL加隨機(jī)偏移應(yīng)對(duì)批量過(guò)期主從哨兵應(yīng)對(duì)單點(diǎn)故障服務(wù)端做多級(jí)緩存兜底本地進(jìn)程內(nèi)緩存扛第一波Redis扛第二波數(shù)據(jù)庫(kù)只接收穿透下來(lái)的請(qǐng)求。3.3 緩存與數(shù)據(jù)庫(kù)一致性先更新庫(kù)還是先刪緩存緩存項(xiàng)目繞不開(kāi)一致性。常見(jiàn)做法是Cache Aside旁路緩存讀的時(shí)候先讀緩存未命中回源數(shù)據(jù)庫(kù)再寫(xiě)緩存寫(xiě)的時(shí)候先更新數(shù)據(jù)庫(kù)再刪除緩存。刪除緩存而不是更新緩存原因有兩個(gè)。第一更新緩存意味著每次寫(xiě)請(qǐng)求都要寫(xiě)Redis如果數(shù)據(jù)庫(kù)更新頻率高緩存會(huì)被頻繁重寫(xiě)白白浪費(fèi)性能。第二并發(fā)更新同一個(gè)key后寫(xiě)的值可能覆蓋先寫(xiě)的緩存里存的東西和數(shù)據(jù)庫(kù)不一致。刪除緩存則讓下次讀請(qǐng)求自然回源重建收斂到正確值。那為什么不是先刪緩存再更新數(shù)據(jù)庫(kù)因?yàn)閮蓚€(gè)操作之間有一個(gè)時(shí)間窗口。線程A先刪緩存線程B讀到緩存為空回源剛好數(shù)據(jù)庫(kù)還是舊值把舊值寫(xiě)回緩存之后線程A才把新值更新到數(shù)據(jù)庫(kù)緩存就永久是臟的了。先更新數(shù)據(jù)庫(kù)再刪緩存雖然刪緩存前有一小段時(shí)間緩存是舊值但最終會(huì)被一次刪除糾正收斂速度快得多。這個(gè)方案并非完全沒(méi)有坑。如果刪除緩存失敗比如Redis命令超時(shí)緩存里還是舊值。線上通用做法是延遲雙刪更新數(shù)據(jù)庫(kù)后刪除緩存隔幾百毫秒再刪一次即使第一次刪除失敗還有第二次兜底。實(shí)際項(xiàng)目里我更建議把刪除緩存動(dòng)作做成可靠消息或本地任務(wù)表異步重試幾次。對(duì)一致性要求極高的賬務(wù)類數(shù)據(jù)不要走緩存直接走數(shù)據(jù)庫(kù)強(qiáng)一致緩存只服務(wù)讀多寫(xiě)少的數(shù)據(jù)。4. 用壓測(cè)把高并發(fā)緩存項(xiàng)目跑穿JMeter、Redis監(jiān)控與集群選型寫(xiě)代碼誰(shuí)都會(huì)但高并發(fā)項(xiàng)目跑不跑得住必須壓測(cè)說(shuō)了算。壓測(cè)不是簡(jiǎn)單開(kāi)幾個(gè)線程打一打要看緩存命中率、TPS拐點(diǎn)和慢日志變化。這一章講我把單機(jī)緩存項(xiàng)目驗(yàn)證到能上線的三板斧。4.1 用JMeter打高并發(fā)壓測(cè)線程組、聚合報(bào)告與三個(gè)必調(diào)參數(shù)JMeter是壓測(cè)高并發(fā)緩存項(xiàng)目的標(biāo)準(zhǔn)工具。常見(jiàn)做法是先用GUI把測(cè)試計(jì)劃配好再命令行跑回歸。線程組是最核心的組件參數(shù)直接影響壓測(cè)結(jié)果參數(shù)建議值作用線程數(shù)200到1000模擬并發(fā)用戶數(shù)Ramp-up30到60秒讓壓力緩慢爬升不要瞬間壓垮循環(huán)次數(shù)100到500保證每個(gè)線程有足夠請(qǐng)求量壓測(cè)需要把Redis緩存先預(yù)熱還是先清空看目標(biāo)而定。測(cè)緩存穿透我用redis-cli把相關(guān)key清空再打測(cè)綜合性能先灌一批熱點(diǎn)數(shù)據(jù)再打。JMeter加HTTP請(qǐng)求采樣器配置里把連接超時(shí)設(shè)為1000ms、響應(yīng)超時(shí)設(shè)為3000ms超過(guò)就當(dāng)成失敗這樣能暴露Redis慢命令的問(wèn)題。命令行跑壓測(cè)是上線前的固定動(dòng)作jmeter -n -t high-concurrency.jmx -l result.jtl -e -o report/跑完后重點(diǎn)看聚合報(bào)告里的三個(gè)數(shù)字吞吐量、90%響應(yīng)時(shí)間和異常率。吞吐量就是每秒能處理多少請(qǐng)求90%響應(yīng)時(shí)間反映用戶體驗(yàn)異常率超過(guò)0.1%就必須查日志。第一次壓測(cè)我一般只開(kāi)200并發(fā)觀察數(shù)據(jù)庫(kù)連接池和Redis內(nèi)存變化再逐步加到500、1000找到TPS拐點(diǎn)。4.2 Redis慢日志與INFO命令壓測(cè)時(shí)的三個(gè)監(jiān)控手段壓測(cè)過(guò)程中不能只盯著JMeterRedis側(cè)的監(jiān)控才決定瓶頸分析方向。我會(huì)同時(shí)開(kāi)三個(gè)終端分別跑慢日志、INFO統(tǒng)計(jì)和bigkeys掃描# 查看最近10條慢日志 redis-cli -h 127.0.0.1 -p 6379 -a $REDIS_PWD slowlog get 10 # 緩存命中率核心指標(biāo) redis-cli info stats | grep -E keyspace_hits|keyspace_misses # 各命令調(diào)用次數(shù)統(tǒng)計(jì)找出熱點(diǎn)命令 redis-cli info commandstats | head -30慢日志默認(rèn)閾值是10000微秒也就是10毫秒。壓測(cè)時(shí)如果發(fā)現(xiàn)大量命令超過(guò)這個(gè)閾值說(shuō)明Redis執(zhí)行被阻塞或key太大。INFO命令里keyspace_hits和keyspace_misses是緩存治理最核心的兩個(gè)數(shù)字命中率公式是hits除以hits加misses。線上運(yùn)營(yíng)正常時(shí)命中率低于80%就要警惕壓測(cè)時(shí)如果命中率驟降多半是緩存預(yù)熱不夠或者TTL設(shè)置不合理。--bigkeys掃描可以找出大key。一個(gè)value超過(guò)1MB的key在高并發(fā)下會(huì)成為熱點(diǎn)瓶頸讀寫(xiě)都慢。壓測(cè)前先跑一遍這個(gè)命令把大key拆掉或換數(shù)據(jù)結(jié)構(gòu)不然壓到一半Redis卡死會(huì)以為是代碼問(wèn)題。4.3 從單機(jī)到集群主從、哨兵和Cluster的邊界單機(jī)壓測(cè)通過(guò)后下一個(gè)問(wèn)題是走到哪一步要開(kāi)始上集群。常見(jiàn)做法分三檔。主從復(fù)制解決的是讀壓力。一臺(tái)master掛多臺(tái)slave讀流量分配到slavemaster只處理寫(xiě)。主從同步是異步的slave上可能有短暫數(shù)據(jù)延遲對(duì)一致性敏感的頁(yè)面不要走slave。哨兵模式解決的是高可用。master掛了哨兵自動(dòng)把slave提升為master應(yīng)用端通過(guò)哨兵感知新的master地址。但一臺(tái)master依然有內(nèi)存上限數(shù)據(jù)量超過(guò)單機(jī)內(nèi)存還是撐不住。Cluster模式解決的是容量和寫(xiě)擴(kuò)展。數(shù)據(jù)按slot均勻分布到多臺(tái)節(jié)點(diǎn)寫(xiě)入可以水平擴(kuò)展。Cluster的代價(jià)是客戶端復(fù)雜度高多key操作要確認(rèn)它們?cè)谕粋€(gè)slot事務(wù)能力也受限。我見(jiàn)過(guò)不少團(tuán)隊(duì)在數(shù)據(jù)量不到5GB時(shí)就上了Cluster運(yùn)維把slot遷移和reshard折騰得苦不堪言。我的建議是先壓測(cè)如果單機(jī)8GB內(nèi)存和哨兵模式能扛住未來(lái)一年的峰值就不要上Cluster。鎖和數(shù)據(jù)一致性復(fù)雜度不值得為不存在的高并發(fā)買(mǎi)單。5. 高并發(fā)緩存項(xiàng)目最容易翻車(chē)的5個(gè)坑現(xiàn)象、原因與解決高并發(fā)緩存項(xiàng)目做完壓測(cè)和上線過(guò)程會(huì)暴露一堆只靠讀文檔發(fā)現(xiàn)不了的問(wèn)題。下面這5條是我反復(fù)踩過(guò)、也幫別人排查過(guò)最多的坑每一條都按現(xiàn)象、原因、解決的順序拆開(kāi)講你可以直接對(duì)照自己的項(xiàng)目。5.1 并發(fā)一高數(shù)據(jù)庫(kù)連接池就報(bào)錯(cuò)緩存形同虛設(shè)現(xiàn)象壓測(cè)線程從200加到500時(shí)數(shù)據(jù)庫(kù)連接池開(kāi)始拋Connection is not available, request timed out但Redis的CPU和內(nèi)存都正常。原因查了下緩存的命中率發(fā)現(xiàn)大量請(qǐng)求在查一個(gè)不存在的ID比如商品ID為負(fù)數(shù)或者已被下架的數(shù)據(jù)。這些key緩存里沒(méi)有回源邏輯每次都查數(shù)據(jù)庫(kù)緩存完全沒(méi)有兜住。這是典型的緩存穿透惡意請(qǐng)求拿不存在的ID反復(fù)打接口時(shí)尤其嚴(yán)重。解決給查詢結(jié)果為空的情況寫(xiě)臨時(shí)緩存TTL設(shè)30秒同時(shí)在前置接口做參數(shù)校驗(yàn)負(fù)數(shù)ID直接返回異常。更穩(wěn)妥的方案是在緩存層加布隆過(guò)濾器ID不在集合里的請(qǐng)求直接丟棄不用碰數(shù)據(jù)庫(kù)。5.2 分布式鎖搶到了還是超賣(mài)庫(kù)存扣成負(fù)數(shù)現(xiàn)象壓測(cè)秒殺接口時(shí)庫(kù)存總數(shù)1000件實(shí)際賣(mài)出去1200件日志里每個(gè)線程都聲稱自己搶到了鎖。原因鎖沒(méi)搶到不等同于業(yè)務(wù)沒(méi)執(zhí)行。我把鎖的tryLock返回值當(dāng)成成功標(biāo)志但沒(méi)在失敗時(shí)終止流程線程繼續(xù)往下執(zhí)行扣庫(kù)存。另外一個(gè)更隱蔽的原因是鎖value寫(xiě)死了固定字符串線程A釋放鎖時(shí)把線程B的鎖也刪了。兩個(gè)線程同時(shí)持鎖超賣(mài)就必然發(fā)生。解決tryLock返回false必須直接拋異?;蚍祷亍皳屬?gòu)失敗”不能繼續(xù)往下走。釋放鎖改用Lua腳本比對(duì)value再刪除確保只能刪自己的鎖。用Redisson的話配置watchdog自動(dòng)續(xù)期避免業(yè)務(wù)執(zhí)行超過(guò)鎖租約時(shí)間。5.3 同期設(shè)置的緩存key在同一秒失效緩存命中率一夜回到解放前現(xiàn)象零點(diǎn)過(guò)后緩存命中率從95%暴跌到40%數(shù)據(jù)庫(kù)壓力暴漲持續(xù)一兩分鐘后才恢復(fù)??碦edis慢日志大批KEYS命令和同前綴的GET命令同時(shí)出現(xiàn)。原因所有商品詳情key都是寫(xiě)入時(shí)固定加30分鐘TTL同一批商品在同一時(shí)間失效形成批量緩存雪崩。雖然Redis還活著但數(shù)據(jù)庫(kù)被回源流量打蒙了接口響應(yīng)時(shí)間翻了十倍。解決TTL不再寫(xiě)死寫(xiě)入時(shí)加隨機(jī)偏移讓過(guò)期時(shí)間分散在前后一分鐘內(nèi)。同時(shí)給熱點(diǎn)商品加一個(gè)主動(dòng)續(xù)期邏輯訪問(wèn)時(shí)如果TTL低于閾值就把TTL續(xù)到30分鐘相當(dāng)于給熱點(diǎn)數(shù)據(jù)續(xù)命。5.4 Redis可視化工具里全是亂碼value長(zhǎng)這樣\xAC\xED\x00\x05t現(xiàn)象用Redis Desktop Manager打開(kāi)緩存實(shí)例key顯示成\xAC\xED\x00\x05tProductvalue也是\xAC\xED\x00\x05開(kāi)頭的一串亂碼命令行里卻能看到業(yè)務(wù)字符串。原因RedisTemplate默認(rèn)使用JdkSerializationRedisSerializerJava對(duì)象先被JDK序列化成二進(jìn)制再存進(jìn)Redis。JDK序列化后的數(shù)據(jù)帶類型簽名可讀性極差還會(huì)在value里附帶類路徑占空間。這不是Redis的問(wèn)題是客戶端序列化方式選錯(cuò)了。解決統(tǒng)一改用StringRedisTemplatekey和value都存字符串。對(duì)象先轉(zhuǎn)JSON字符串再寫(xiě)入讀取時(shí)再反序列化。如果必須用RedisTemplate把valueSerializer替換成GenericJackson2JsonRedisSerializerkey保持StringRedisSerializer。改完后可視化工具和命令行看到的內(nèi)容都應(yīng)該是可讀JSON。5.5 Redis command timed outLettuce連接池被打滿現(xiàn)象高并發(fā)壓測(cè)時(shí)應(yīng)用日志頻繁報(bào)Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException幾分鐘后接口大面積超時(shí)。原因Lettuce作為Spring Boot默認(rèn)客戶端是異步的但如果connection pool配置不對(duì)它會(huì)把請(qǐng)求阻塞在等待連接上。我遇到過(guò)把max-idle設(shè)成8、max-active設(shè)成16的小池子壓到200并發(fā)時(shí)所有連接都被占滿新請(qǐng)求全部超時(shí)。另外一個(gè)原因是Redis側(cè)有慢命令比如處理很大的Hash單個(gè)命令耗時(shí)超過(guò)客戶端的timeout閾值。解決先把max-active調(diào)到壓測(cè)并發(fā)數(shù)以上的值比如500并發(fā)配80個(gè)連接max-wait設(shè)300到500毫秒。然后查Redis慢日志找到耗時(shí)超過(guò)客戶端timeout的命令拆大key或換數(shù)據(jù)結(jié)構(gòu)。如果業(yè)務(wù)對(duì)單點(diǎn)延遲敏感客戶端timeout和Redis慢日志閾值要同步調(diào)讓超時(shí)先于隊(duì)列堆積出現(xiàn)便于提前發(fā)現(xiàn)瓶頸。6. 緩存Key命名與上線前的自查習(xí)慣高并發(fā)緩存項(xiàng)目收尾時(shí)我堅(jiān)持做三件事key命名統(tǒng)一、TTL隨機(jī)化、上線前壓測(cè)。key命名我最常用的是“業(yè)務(wù):場(chǎng)景:ID:版本”格式比如mall:product:detail:1001:v2。業(yè)務(wù)前綴方便按產(chǎn)品線隔離場(chǎng)景前綴方便定位用途ID是具體數(shù)據(jù)版本號(hào)是給緩存結(jié)構(gòu)升級(jí)留的后路。用冒號(hào)而不是下劃線因?yàn)镽edis Desktop Manager和另一個(gè)可視化工具會(huì)把冒號(hào)自動(dòng)折疊成目錄樹(shù)排查效率高很多。上線前我有個(gè)固定checklist抽查高流量緩存key是不是都帶了隨機(jī)TTL偏移用redis-cli --bigkeys確認(rèn)沒(méi)有超過(guò)1MB的大key跑一次200并發(fā)的壓測(cè)看緩存命中率和慢日志有沒(méi)有異常確認(rèn)Redis可視化工具里能看到正常JSON而不是JDK序列化的亂碼。這套動(dòng)作看起來(lái)瑣碎但每次都能攔住至少一個(gè)上線事故。我的個(gè)人習(xí)慣是把線上緩存問(wèn)題當(dāng)成黑匣子來(lái)記錄什么時(shí)間點(diǎn)命中率下降、當(dāng)時(shí)連著做了多少次回源、Redis慢日志里是哪類命令記多了會(huì)發(fā)現(xiàn)大多數(shù)緩存事故的根源就那幾個(gè)。高并發(fā)緩存項(xiàng)目最大的價(jià)值不是把Redis用熟而是學(xué)會(huì)在數(shù)據(jù)庫(kù)被打爆之前靠監(jiān)控?cái)?shù)據(jù)把痛點(diǎn)定位出來(lái)。希望這些參數(shù)和踩坑記錄能幫你少走一段彎路希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美色图成人网一区二区 | 九九热在线精品视频| 97这里只有精品| 欧美一二级| 国产精品91ai| 亚洲av在线免费观看| 最好看的中文字幕在线2018| 久九九九九九九热| 国产女人91精品嗷嗷嗷嗷| 91精品操美女| 日日日骚女人精品| 少妇蹲下买菜露大唇0| 91狠狠综合久久久久久| 91一起操| www网站黄| jk白丝没脱就开始啪啪| 天天日天天干天天操| 九九九九免费视频| 国产女同性恋视频| 欧美九九99久久精品| 亚洲AV无码黄色强奸| 国产一级舔足在线观看| 囯产精品久久久久久久久久二区三区| 色图四区| 国产性感骚丝袜在线| 久久成人精品| 无码99| 蜜桃臀 后入 一区 二区 三区 在线| 成人性爱视频在线看| 人妻少妇久久中文字幕一区二区 麻豆 | 亚洲国产一级精品毛一级精品看免费视频| 操国产高清| 久草综合网| 九热超碰| 国产91丝袜在线播放蜜月| 国产一区麻豆免费观看| 自拍盗摄一区| 欧美国产一区二区三区麻豆传媒| 青青草国产盗摄一二三区| 九九九久千久久激情蜜桃在线看 | 欧亚在线视频| 99久久综合网| 91日本在线观看| 被体育老师抱着c到高潮| 成人午夜视频免费播放| 亚州伊人色综台| 五月天综合| 精品妇女一区二区三区| www老逼91| 嗯嗯嗯啊啊啊操的我好爽 | 97国产精品一区| 亚洲欧美91| 国产精品在线免费| 天天躁日日躁成人字幕aⅴ| 国产av尤物| 色五月综合网| 欧美精品偷拍| 青青草好吊| 老熟乱一区二区三区四区| 中文字幕AV中出| 麻豆 美女 丝袜 人妻 中文| www.亚洲黄色| 亚洲精品日日夜夜52| 在线国产探花| 欧美天天谢综合网| 天天干1区2区在线| 国内外内射高清视频| 欧美在线55555| 天天爱综合网| 九色 蝌蚪 熟女自 | 青草一区二区| 一级日本牲交大片好爽在线看| 久久riav中文精品| 色五月激情网| 超碰综合色| 神马久久网| 女人喷水视频在线观看| 日本操逼视频导航| 美女性91| 操曰本熟女| 强奸国产在线| 天天干天天爽| 久久骚| 一区二区三区一亚洲中文字幕、综合区灬 | 免费无码国产精品v片在线观看| 欧美经典一区二区三区| 色婷婷综合久久久久中文一区二区| 超碰人妻97| 人妻夜夜爽天天爽三区麻豆AV网站| 丰满美女一级毛片在线播放| 欧美久热| 婷婷色综合| 99热99色| 欧美精品日韩久久久九| 久久久精品国产亚洲伊人| 国产中文字幕在线| 18禁免费视频| 爱干爱射网啊啊啊| 欧美成人精品欧美一级乱黄一区二…| 色综合色欲色综合色综合色综合| 大香蕉免费3| 无遮挡h肉动漫在线观看| 97硬碰| 亚洲天天更新| 大香蕉五月天| 国产强奸无码乱伦| 男人的天堂网免费| av橘色网站| 日韩国产欧美伦理在线| 国产夜夜艹| 亚洲黄色电影| 韩国一级做A片免费的| 诱惑人妻欧美一区在线播放| 3PAV乱伦视频| 男人天堂久久精品| 东京热男人天堂| 欧美一级黄片免费播放| 少妇淫妇久久久久久久| 99热在线播放| 男人a天堂手机在线版| 天天综合~91入口| 麻豆色约约| 26uuu国产成人综合| 一区,二区,三区视频| 欧美性爱综合,免费| 熟女精品一区二区三区| 日韩精品一区二区人人人| www成人啪啪18秘 免费| 久久精品国产97欧美精品亚洲| 国产一区二区精品久久99| 综合网久久| 国产又猛又粗又爽又黄| 天天射夜夜操| 天天激清| 青青草精玖玖69精品| 黄色AV免费| 亚洲码和欧洲精品激情系列| 一区二区三区黄色片a| 美美91成人国产精品欧美精品久久久久久久| 久久大黄片| 国产少妇与亚洲av| 性爱视频免费网址| 玖玖资源视频一区二区三区| 久操操| 性天堂| 亚洲吊色| 国产福利av精彩对白| 青青草原伊人网| 99色色网| 青娱乐福利99| 久久人体一区二区| 亚洲不卡不卡中文字幕不卡| 欧美aaaaaaa| 亚洲成人久久一区二区| 欧美九九九| 欧美久久草熟女| 亚洲国产成人精品999| 精品成人女人久久| 国产女人高潮视频| 日韩欧美tv一区二区在线观看| 黑丝少妇在线观看| 骚逼自拍99| 一级A啪啪啪啪| 青草综合| 中文字幕免费在线观看| 亚洲人在线| 干婷婷综合网| 9久在线视频只有精品| 色色综合97| 午夜一区| 性色生活片久久毛片婬片免费放女人一级毛片| 日日干日日摸| 国产美女激情| julia在线观看久久| 台湾成人无码AV| 人人妻人人澡人人爽人人精品浪潮| 欧美三级免费伊人| 成人精品在线| 蜜乳AV色欲AVAV无码| 九九九精品成人免费视频小说| 加勒比东京热五月天天堂网| 久久久999日本大片| 国产精品亚洲无码| 亚洲精品国产精品成人| 免费国产视频| 97综合国产| 18禁久久| 99后入| 97鸡把在线视频| 欧美精品丝袜久久久中文字幕| 亚洲图片偷拍视频区| 国产最火爆久久国产网站网站| 亚洲狠狠入| 国产第11页| 欧美日韩国产电影| 久草资源欧美在线视频| 精品妇女一区二区三区| 亚洲天堂区| 精品国产肉丝袜在线拍国语| 加勒比久久综合网高清| 亚洲精品三| 日韩不卡a级视频专区| 99re久久| 亚洲欧美色图片| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 国内精品a| 91精品国产91熟女| 色九色久| 91热| 欧美日韩狠狠爱| 亚洲国产福利视频| 精品夜夜澡人妻无码AV| 欧美日本不卡在线| 97亚洲色图| 亚洲黄色电影| 91视频精品| 日本一区二区亚洲综合| 日韩一区二区精彩视频| wwwxxx日本爽| 强奸乱伦Av网| 人人爱操| www.97在线| 澳门人妻久久| 国产亚洲性生活视频播放| 中文字幕99999| 久久久偷拍| 午夜精品久久99蜜桃的功能章节| 免费国产电影一区二区| 99久久精品无码一区二区| 图片区小说区| 欧美毛片在线网| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 青青草色插素人| 黄色片G G G| 欧美小说区视频区| 久久久97| av无码精品久久久久| 乱伦熟女区| 97超碰jingpin| 人人爽夜夜操| 天天操熟妇| 欧美色999| 欧美日韩亚洲一区二区在线观看| 国产久久一区二区午夜| 伊人久久久日韩一区| 亚洲AV在线资源| 熟女熟妇一区二区三四区| 亚洲精品97| 午夜视频久久久久一区| 在线观看日韩av不卡| 97精品综合| 青青草国产亚洲精品久久| 亚洲色香| 亚洲欧美天堂| 极品白嫩美女白浆成人福利在线看| 六月丁香网| 男人的天堂VA在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 99丝袜福利在线播放| 熟妇一区二区三区| 伊人国产AV| 亚洲人妻中文在线视频| 偷窥自拍亚洲天堂网爆| 男生女生啊啊啊啊| 视频不卡中文字幕| 校园春色之综合网| 日韩综合色图| 在线 制服丝袜中出 人妻| 久9爱经典视频| 思思热在线视频精品| 97超碰色色| 国产aⅴ无码片毛片一级网站| 香蕉久久国产AV一区二区| 熟妇一区二区三区| 四方色播| 91久久久久久久久18| 欧洲亚洲人妻无码中字久久三区四区 | 人人妻人人操人人乐| 操少妞在线视频| 污色区网站| 婷婷五月天福利| 囯产精品强| AV天堂国产| 蜜桃色色网站视频三区| 精品视频久久| 日韩有码一区三区| 超碰美国| 射丝袜高跟鞋99| 97视频免费播放| 色综合久久久久| 欧美九一精品久久久熟妇| 国产乱码久久| www.男人的天堂| 一级啊性爱在线视频| 欧美色日| 动漫爆乳3D奶水一区在线观看| 裸体1区| 国产传媒午夜理伦精品| 欧美亚洲宗合色性图| 操婢日韩| 青青草大香蕉视频| 婷婷九月| 欧洲精品一级二级精品综合视频综合 | 亚洲免费精品一区| 欧洲黄色网| 国产SV一线| 欧美亚洲国产91在线| 免费人人搞97| 操逼不卡中文字幕| 青青久草| 综合网欧美在线| av激情亚洲五月天| 一区二区三区四区久久视1| 国产一区二区成人av在线播放| 日日夜夜国产综合| 九月丁香综合网| 亚洲天堂日本| wwwss在线观看| 超碰免费97| 99热在线不卡| 国产激情av女片自拍| 久草成人影片| 中文字幕啊啊啊在线观看视频| 夫妻天天操岛国视频| 欧美中文字幕男人天堂久久精品| 欧美一区二区日韩三区| 九九久精品| 日本幼女18+| 国产高清1234区| 国产v片在线免费观看| 色www精品视频在线观看| 欧美一级做a爰片免费视频| 成人青青草原伊人| 欧洲精品欧洲精品| 少妇蜜汁| 欧美久久伊人| 蜜乳AV.COM| 美女黄页网站| 亚州男人的天堂| 欧美做爰无码A片视频| 国产区日韩区在线观看| 色欧美在线| 亚洲天堂自拍| 人妻少妇视频在线播放| 天天谢天天干| 久久久久久九九九| 亚洲欧美内射| 97一区二压| 开心五月婷婷| 日韩人成网站在线播放| 婷婷丁香九月| 亚洲春色欧美激情自拍| 变态综合色| 婷婷久草| 亚洲区限制级| n1038 一二三区| 色情综合| 图片区小说区| 日韩欧美俄罗斯A片| 蜜臀久久99精品久久久久| 久久久九九| 久久大香蕉手机高清视频| 美国一区二区免费视频| 九九精品99| www.婷婷六月天| 婷婷综合| 人妻乱仑一区二区三区| 欧美亚洲自拍另类人妻| 伊人影院日本| 超碰人妻久久| 熟人人妻少妇精品久久| 中文字幕免费在线观看| 另类老少妇| 国产91丝袜在线播放蜜月| 99九九久久| 老熟女熟妇| 青青草吊丝| 精品无码一区二区| 亚洲欧洲美腿丝袜| 久久九七| 天天舔九色婷婷| 78p欧美| 99热99re超碰精品| 亚洲综合另类欧美久久久| 久久本道| 曰本熟女视频| 中国黑人三级片网站上区| 亚洲影院小综合| 国产精品网站免费| 大香蕉青青9| 99日免费视频中文字幕| 91制服丝袜| 欧美激情区| 日韩视频中文字幕| 人人玩人人添人人澡免费| 岛国激情视频在线观看| 成人性爱美曰韩| 日本三级R| 久久98| 日本人体九九九九九九| 91国产丝袜足交精品视频| 特级大荫道BBwBBwBBW| 国产综合久久久鬼色| 欧美97日韩精品| 天操天操夜操夜月月年年操操| 一本大道久| 亚洲激情视频| 亚洲精品国产熟女| 制服乱伦| 美女淫穴| 久久久久96| 最近二区三区视频大全| 老熟女搡BBBB搡BBBB视频| 亚洲天堂7777| 久久久工口| 99re在线视频国产| 人人操,人人液| 日韩欧美午夜视频在线| 麻豆60秒| 少妇高潮喷水无套久久久久久| 亚州性色| 色九九九综合| 欧美久久人体| 波多野42部激情无码喷潮| 艹少妇网站| 亚洲午夜免费狠狠干| 久草在| 亚洲天天操| 无码人妻丰满热妇又大又粗| 色综合潮| 久久黄人人爽视频| 久久精视频美日韩在线视频| 肥臀熟女福利视频一区二区| 我爱操| 欧美18 在线观看| 丁香婷婷大香蕉| 国产精品熟女九九九| 少妇精品久久| 色婷婷六月| 2017超碰| 成人a级高清视频在线观看| 精品色色| 国产91美女视频| 成人a大片在线观看| 婷婷国产精品九区| 亚洲乱妇p22| 国产精品自在自拍视频| 黄资源| 欧美18老人禁| 啊好大好舒服| 在线视频免费观看午夜| 91在线页| 少妇无码999| 亚欧韩av| 疯操AV| 亚洲天堂人妻熟妇视频| 999 久久久| 国产精品爱欲| 91超碰碰在线| 日日操丁香五月天| 一二三四视频在线社区中文字幕| 在线观看高清AV| 久久av色| 午夜精品久久久久久久久久蜜桃 | 久热99999| 国产又大又粗又长视频在线| 亚洲图片另类| 九九久久久久久爱| 超碰免费人妻人人| 国产五码丝袜屁眼| 亚洲中文字幕久久人妻| 老女人老91妇女老热女| 欧美日韩香蕉| 美女上床网站| 色色五月天激情| 欧美热图99| 色婷婷电影网| 婷婷超| 精品国产99| 日日日日做夜夜夜夜无码| 男人 天堂 日 亚洲| 欧美日韩另类在线播放| 91少妇香蕉久久精品| 探花熟女,姿勢到位,體驗感也到位| 久久9免费视频| 亚洲。天堂。日本在线观看| 欧美精品久久久久久久久88| 嗯嗯啊啊啊好爽| 国产精品交换一区二区| 国产精品女aA片爽爽视频| 男人下部插入女人下部| 国产女人高潮嗷嗷嗷叫小说 | 色97干| 啊啊啊啊啊操我视频| 在线看的av| 欧美精品欧美精品系列| 小少妇| 99re免费视频精品全部| 中文无线日韩一区| 熟女日韩| 久久久久久日韩| 色悠悠伊人网五月天| 欧美制服网站美腿丝袜| av在线观看不卡网站| 好一吊区二区| 精品v1区| 婷婷久久五月| 国产91av在线播放| 超碰色图| 亚洲男人的天堂网| 精品少妇后入一区二区三区四区人妻巨乳| 久久性爱视频免费看| 精品9999| 日韩国产乱子伦App| 久久久久久九九九九九| 欧美韩国你懂得在线 | 欧美精品99久久久**| 色偷偷综合91久久噜噜| 天天操女人| 国产 三级自拍| 亚洲无码偷拍| 狠狠躁伊人中文字幕| 欧日韩在线观看| 男女打扑克高清网站| 日韩卡一卡二卡三在线| 东京热男人的天堂| 国产精选视频| 中文字幕精品亚洲熟女| 屌妞视频久久久久久久久久久久| 中文字幕一区av| 亚洲少妇中文字幕网址| 久久这里是精品| 99久久久无码国产精品性啊聊 | 久久激情五月| 一级黄色性爱A级片| 无码人妻精品酒店| 国产乱子伦久久精品综合一区二区三| 精品无码产区一区二| 亚州色站 日韩电影| 欧美成人精品A片免费一区99| 国产大学生口爆吞精合集| 狠狠操,使劲操| 青青在线视频日韩欧美| 国产精选视频| 淫淫综合网| 99精品九九九九九九| 夜夜操夜夜高潮夜夜爽国产精品区| 亚州再线| 九九热超碰97亚洲最新香蕉| 欧美亚洲国产自久久| 亚洲情色五月天 | 超碰 另类 欧美 | A级在线视频| 亚洲毛片基地专区| 中文字幕一二三| 伊人网高清| 日本黄色精品| 精品一区二区三区麻豆| 国产97在线 | 亚洲| 久操国产在线| 久久久蜜桃臀无码视频| 三上悠亚在线毛片91| 国产精品 视频| 97操| 欧美亚洲一级在线观看| 国产精品无码av| 黄色av片三级三级三级免费看| 黄色网址在线免费观看| 欧美人人AAA| 亚洲五月婷婷| 五月天黄色av| 日韩精品电影| 青青草原伊人网| 日韩性爱高清免费视频| 欧美激色| 自慰白浆在线观看| 熟女被操视频网址| 久久一二三四五六七八九区区区| 蜜桃久久综合视频| 久久做97| 九九九只有精品| 97超碰超| 老司机深夜18禁污污网站| 日本免费一级AAA大片器| 操逼操网| 台湾佬激情综合| 日本欧美色| 丝袜美腿91| 国产无码精品久久久久久| 日韩黄片视频试看| 91丨九色丨43老版熟女| 黑丝91视频| 亚州大图综合色图| 国产品精品自在在线午夜免费| 日韩综合成人免费视频| 操一区| 欧美一二三区四五区| 国产日产欧产美韩系列麻豆免费| 久久久九九九| 视频分类 国内精品| 一牛影视久久久一区二区三区| 天天日天天屌天天操| 狠狠躁伊人中文字幕| 伊人丁香五月婷婷| 91一区二区| 欧美成人一区二区| 中文操逼字幕| 亚洲av无码成人精品国产| 后入人妻一区| 久久岛国| 天天干天天狼在线视频| 97色欧州| 啊啊啊啊网站| 99在线观看| 亚洲欲| 天天夜躁日日躁狠狠2002| 五月丁香六月婷综合成人综合| 欧洲乱码视频| 中文一区二区三区影院| 国产免费一区在线观看| 狠狠2050在线观看| 国产拍偷精品网站| 欧美色棕合| 国产白丝网站| 激情干在线| 女人的天堂大香蕉网| 亚洲伊人久久综合97| 狠狠综合网| 在线观看啊啊啊啊啊| 国产高清26uuu| 97精品视频免费| 91久久久亚洲| 久无码| 蜜臀久久99精品久久久久久无删减| 丰满人妻av一区二区三区| 久久亚洲色图中文字幕| 很黄很色的视频在线观看| 老熟女熟妇| 国产黄色视频久久| 爱爱动态试试看6 0秒| 欧美乱伦专区| 嫩草 人人网精品| 夜夜草天天| 精品一区96| 欧州一区二区三区四区| 欧美日韩资源在线| 热无码中文亚洲H一道本一区二区| 日韩情色视频| 五月天我淫我色av| 国产中文福利| 日逼国产| 欧美午夜熟妇黑人精品91| 欧美综合区| 欧美 亚洲精品首页| 日本大片日本一区二区免费高清| 久久精品超碰| 久久久久无码| 国产一区自拍欧美日韩| 欧美 亚洲 91| 91操人视频| 97超碰超碰| 九九九九日本| 日本欧美亚洲高清在线看| 亚州精品人妻一二三区| 99这里有精品| 粉嫩av平台| 东京热熟女亚洲视频网站| 凸凹视频在线观看| 美女久久久久久久久久久| 69人妻人人揉人人躁人人精品| 国产精品 视频| 97AV在线免费观看| 亚洲综合色婷婷| 女人天堂av在线播放| 嗯嗯,好大,好爽,好骚| 亚洲超碰AV| 日日摸天天爽夜夜欢| 色噜噜人妻丝袜AV资源| 小情侣高清国产在线视频| 性91| 嗯嗯啊啊好大好爽| 天天综合精品| 国产精品久久久久久久AV大片| 9997se| 久热伊人99re| 亚洲精品一区二区三区在线播放| 78操B| 天天插夜夜爽| 久久极品伊人| 顶级丝袜熟女一区二区三区| 蜜臀久久99精品久久久久久婷婷| 国产天天看| 五月婷婷综合在线| 亚一综合久久久久久久久久| 亚洲日韩美女丝袜美腿人妻视频| 欧美韩国你懂得在线| 亚洲精品视频在线| 亚洲成人日韩小说| 黄片www视频免费| 欧美人妻一区二区| 樱花草社区www中国| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 久久久99999久网站| 五月丁香狠狠爱| 自拍视频一区在线观看| 日本影视久久免费| 天天操妹子| 大屁股国产在线视频| 欲色影视综合吧| 伊人五月天| 日韩在线观看字幕精品| 国产精品久久久久久久久久梁医生| 91N综合网| 亚洲一二三四区在线免费看视频| 99热aaa| 久久免费中文字幕在线观看| 91操碰| 色欲日韩欧美在线一区| 一线黄色免费性爱片| 色综合国产在线观看| 超碰九7免费| 深夜激情| 久久伊人东京热| 五月天亚洲网| 亚洲熟妇综合久久久久久| 久久伊人青青草| 91色噜噜狠狠| 亚洲色图欧美色图制服丝袜| 超碰公开久久网| 草草影院在线视频| 久久极品一区二区| 亚洲精品成人激情在线| 97超久碰| 九九玖玖精品| 婷婷色一区| 九九九网页| 特级大荫道BBwBBwBBW| 天天做日日爱夜夜爽| 久久久久921| 性色av一区二区| 午夜精品久久久久| 伊人伊人LD| 久久精品夜色国产亚洲AV| 最新av在线| 日韩精品人妻中文字有码在线 | 伦理日韩国产久久| 亚洲熟女偷拍在线观看| 很狠操| 色综九九九一区| 校园春色AV天堂| 试看60秒 爽| 国产综合色精品在线观看| 囯产精品久久久久久久久久梁医生| 国产呦精品系列在线观看| 中文一区二区三区影院| 超碰在线人妻中文字幕| 在线观看免费视频国产| 熟女色综合久久| 啊v视频在线观看| 久久久无码国精品无码三区三区| 操穴国产| 久神马| 久久黄黄黄| 色99999| 精品人妻av在线播放| 亚洲福利中文字幕在线| 亚码激情| 久久综合超碰| 久久久久白虎| 国产最火爆久久国产网站网站| 色呦呦呦在线观看视频| 九九热在线视频| 麻豆天美传媒在线视频天堂| 综合天天。| 97视频在线播放| 香蕉久久AⅤ...| 婷婷五月天小说| 国产美女激情| 中文字幕精品码亚洲| 亚洲无码太久| 亚州国产精品乱| 亚洲 欧美 另类 日韩 人妻一区| 黑丝制服中文字幕| 久久久久久亚洲Av无码精| 人人插人人搞人人操| 国产极品999| 蜜桃午夜视频一区二区 | av影片在线观看不卡| 国产51色综合久久免费| 国产精品一区二区在钱播放| 超碰九九| 成年人性爱日韩| 久久久久国产| 精品v日韩欧美国产| 97资源制服丝袜| 久色99999| 国产乱子伦一区二区三区在线观看| 91丨九色丨国产丨人妻在线| 91久久久久久久久18| 少妇三P| 欧亚日韩中文在线| 欧美久久伊人| 试看福利| 另类图片欧美激情综合| 六月丁香啪啪| 久久r精品| 欧美激情另类一区二区| 在线女人91| 国产精品不卡少妇白| 成人乱码一区二区三少妇| 9热9热综合网| 69一区二区三区| 99热9| 一本色道久久综合亚洲二区三区| 日本一区视频在线观看| 国产精品对白内射| 91综合网站| 六月激情网| 自拍啪啪视频| 欧美精品久久久久久久久88| 加勒比av中文| 亚洲无码成人精品| 欧美色图偷拍另类| 日本人妻最新在线中| 青青草日韩无码| 久久人妻熟女一区二区 | 欧美在线l亚洲| 综合伊人激情| 殴美日韩m| 国产又黄又粗又猛大片| 十八禁网站在线| 国产91精品在线免费| 人妻啊啊人妻啊啊| 精品福利| 天天透伊人| 激情综合网激情综合| 亚洲18禁| 99婷婷一区二区| 国产AV天美| 情趣丝袜无码操逼视频| 粉嫩AV一区夜夜嗨| 一起草日韩| 日本精品一区二区三| 天天草天天干天天日| 九九九只有精品| 操逼操操操91| 超碰97综合| 亚洲精品久久久久久久久豆丁网| 亚洲欧美999| 曰本精品久久久| 人人操人人摸人人看人人插| 亚洲综合贴图91| 国产超碰人人爽人人做| 成人性交免费视屏| 国产suv精品一区二区四| 人妻精品免费一二三区| 福利天堂| 欧美性爱另类综合| 性爱乱伦网址| 91丝袜视频在线观看| 天天欧美| 久99在线免费观看视频| 色五月网址| 日本淫乱女一区二区三区视频| 日韩人妻网站| 亚洲精品啪视频| 综合五月天| 亚洲欧美天堂在线| 久久社区一区二区三区| 欧美色91| 五月天伊人| 国产精品久久伊人| 久久男人的天堂| 日本久久综合| 日本三级韩国三级99| 日韩字幕一区| 日日躁狠狠躁天天躁精品| 旡码电影特区| 岛国艾薇凹凸视频天堂| 无码人妻1727| 久久久精品中文字幕麻豆| 色九九九九久| 99热99在线播放激情| 青娱乐91| 丰满人妻一区| 手机不卡视频不卡在线一二三区| 近亲乱伦一区二区| 国产精品com| 天天天做天天天爱天天天爽| 精品99999久久久久久| 亚洲国产麻豆一区二区三区| 亚洲影视综合| 欧美综合传媒| 少妇毛片久久| 色色色99| 国产传媒操逼视频| 日本综合色图| 免费97视频| 欧美永久激情一区二区| 狠狠狠狠狠干| 五月天婷精品激情| 五月天久久综合网| 日韩97P| 后入式五六区| 青青草男人天堂| 蜜桃中文字日产乱幕4区| 色综合久| 久草福利在线资源站| 国产久久成人| 亚洲男人综合| 91在线欧美| 91啪9色| 免费αⅴ在线观看| 蜜桃丰满熟妇av无码区不卡| 国产精品久久久 | 操逼视频亚洲| 99久久国产精品免费高潮| 久久久78| 久久久久幕乱码| 狠狠操使劲操| 国产精品一级特黄aaa大片在线观看| 亚洲午夜精品久久久中文影院| 日本999精品| 艾草av| 91九色丨国产丨爆乳| 亚洲图片欧美91N| 97电影院超碰| 67914亚洲精品| 亚洲AV高潮| 黑人天8A∨高清网站| 91N欧美| 日日夜夜天天| 丁香久久| 国产按摩一区二区三区| 精品久热| 超碰人人妻| 狠狠穞A片一區二區三區| 中文激情网| 隔壁邻居波多野结衣中文字幕| 亚欧精品久久久久久久久久久| 极品欧美一区二区三区| 日韩啊V| 自拍偷拍草一草| 久久精品久久久久久久久| 日本成人免费一区二区三区| 成人小说另类在线| 国产美女自拍AV| 先锋色眉乱伦资源| 亚洲二区精品在线观看| 最新国产亚洲精品精品国产亚洲综合 | 99国产在线 精品 视频| 日韩久久.一级黄色片| 高清无码 国产精品| 欧美综合区| 首页亚洲国产高跟丝袜诱惑视频| 亚洲最大91网| 色 婷97| 秋霞鲁丝午夜无码一区二区三| 久久人人爽av亚洲精品天堂桃色 | 老司机射| 色婷婷丁香五月| 少妇免费视频| 新精精品久久精品| 亚洲少妇视频| 日本羞羞的视频在线播放| 欧美精品一区二区少妇免费A片| 一级黄色性爱A级片| 欧美操人| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 97鸡把在线视频| 大学生美女口爆| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 福利社区午夜一区二区| 中文字幕一区二区日韩网| 操逼1区| 夜夜肏2021| 啊啊啊不要啊啊受不了了视频在线 | 欧美男人亚洲天堂| 日日夜夜骑| 天天懆天天日| 五月丁香综合激情| 91色黑人少妇| avav青青草久久夜| 国产精品无码成人精品| 在线观看黄色电话| 久热久一区二区三区| 青青草无码视频| 91亚州| 人、人、摸,人、人、草| 91逼逼女人91| 久久熟女嫩草成人片免费 | 好看的久久不射无码影视影院| 人妻少妇精品久久久久久| 亚洲宅男天堂| 天天综合网合集91| 岛国片在线视频网站| 天天爽天天干| 日韩精品影视| 男女做爰猛烈动高潮A片免费应用| 妺妺跟我一起洗澡没忍住| 久久久久一本一区二区青青蜜月| 久久久天堂| 操逼1区| 嫩草伊人久久精品| 啊啊啊网站| 综合激情五月天| 日韩国产九九精品一区二区三区毛片| 2021国产成人精品久久| 色9999日韩国产| 久久一区二区加油站| 欧美18 在线观看| 日韩AV电影网站| 青草伊人网| 伊人黄色视频免费观看| 密臀AV在线| 亚洲人妻中文在线视频| 亚洲欧美一区二区三区在钱蜜桃 | 欧美黄色大香蕉一区二区| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 99中出在线| 蜜臀久久99精品久久久久久-DVD| 丝袜美腿制服人妻二区中文字幕 | 一级乱伦网站| 97资源超碰| 屁股久久久久久久久久| 日韩成人电影AV| 久久成人东京热人妻| 国产一区二区在线电影| 久久久免费懂色| 日韩无码a片| 老鸭窝黄色视频网站| 欧美偷拍区| 高潮嗯啊性感美女久久久| 青娱乐二区免费| 嗯啊不要啊啊在线观看视频| 超碰97人妻| 丝袜制服字幕在线| 国产拍偷精品网站| 欧美性色综合网| 超碰精品日韩欧美国产| 9热9热综合网| 日本一区二区三区免费观看| 青春草A| 不卡av在线中文字幕| 蜜臀久久在线视频| 国产一区二区a毛片| 超碰98综合网| 日本一区二区成人在线| 亚洲精品久久久久久| 国产成人精品亚洲日本| 91痴汉| 淫妻综合网| 男女性无套 免费九一| 中文字幕在线观看第二页| 欧美传媒| 欧美 亚洲 91| 人人操人人狠狠操| 久久高潮妇女视频| 肉丝网站91| 国产精品美女在线一区| 夜夜操夜夜高潮夜夜爽国产精品区| 日韩黄色一区二区三区| 91中文字幕制服丝袜免费视频| 95精品在线| 三级激情网站| 蜜臀va69| 白丝1区2区3区| 日本免费专区| 欧美激情精品久久久久久| 人妻天天操天天爽视频免费| 亚洲性爱乱操x| 91色伦| 熟妇人妻精品一区二区视频色欲| 99婷婷一区二区| 人妻黑丝袜电影| 另类小说五月天| 日韩亚洲欧美中文字幕| 1二区9| 婷婷色婷婷| 免费看片黄| 白嫩91在线亚洲| 任我爽视频在线观看| 欧美日韩国产高清在线一二三区| 99精品无码| 黑人娇小av在线播放| 青青草在线视频欧美| 精品区国产区一区二区三区| 久久精品久久久久久久| 亚洲和欧美裸体美女双飞视频| 丁香九月激情啪| 久久午夜鲁丝片| 亚洲图片 欧美电影| 中文字日本乱码| 翔田千里av一区二区三区| 久久久精品电影| sewuyueav| 素颜老阿姨乱情色| 色综合91| 天堂8在线新版官网| 日韩综合无码一区久久92| 疯操AV| 熟女网站最新| 俺去久久| 日本三级日本三级99| 高清国产性猛交xxxx乱大交| 日本天天干天天操一区| 久久久精| 中文字幕人妻色偷偷久久皮 | 青青草日韩免费观看高清在线| 男人的天堂在线有码| 无遮挡h肉动漫在线观看| 1769国内精品视频| 人人妻人人玩人人澡人人爽| 熟妇高潮二区三区| 中文幕97| 欧美日日夜夜| 欧美午夜精品久久久久久3D| 国模少妇一区二区三区| 在线无码网站| 激情黄色片在线观看| 9118禁| 啊啊啊水好多| 91精品操美女| 999熟女精品| 97爱b| 蜜臀久久在线视频| 亚洲天堂AV在线播放| 欧美狠狠| 久久久无码视频| 九九九九精品精| 加勒比99999| 国产伊人精品在线| 校园春色美腿丝袜| 日本在线15p| 欧洲一区二区三区四区在线观看| 老司机免费视频在线91| 熟女欧美日韩综合婷婷| 熟女色图在线| 97天天做| 青青草手机在线免费观看| 国产白嫩精品久久| 亚洲一二三精品久久网| 久久熟女人| 日韩熟女精品无码专区一区二区| 亚洲天堂性爱| 淫色网综合| 日韩 欧美 校园一区| 懂色AV中文| 中文幕97| AV色五月天| 91麻豆天美国产欧美高潮| 骚日日av| 另类小说欧美激情校园春色| 加勒比99999| 夜夜欢天天干| 青娱乐淫乱1314| 91人妻最真实刺激绿帽| 欧美丰满少妇xx高潮| 92人人操人人| 天天操夜夜操|