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

ARTICLE DETAIL

資訊詳情

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

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

基于Redis的高并發(fā)緩存實(shí)戰(zhàn):分布式鎖與穿透擊穿雪崩治理 簡介面向畢業(yè)設(shè)計(jì)與高并發(fā)緩存實(shí)戰(zhàn)的完整Redis項(xiàng)目資源適合希望深入掌握Redis核心原理、緩存策略與高并發(fā)場景落地的開發(fā)者。壓縮包共79個(gè)文件以72個(gè)Java源碼類文件為主同時(shí)包含XML配置文件、Lua腳本、YAML配置與SQL初始化腳本整體體積僅93KB結(jié)構(gòu)緊湊、模塊邊界清晰。項(xiàng)目內(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)到壓測驗(yàn)證的完整閉環(huán)。通過該項(xiàng)目可掌握高并發(fā)環(huán)境下的緩存讀寫優(yōu)化、數(shù)據(jù)庫壓力緩解和系統(tǒng)橫向擴(kuò)容方法為畢業(yè)設(shè)計(jì)或工程實(shí)踐提供可直接參考的完整樣例。目前已有48人學(xué)習(xí)適合正在準(zhǔn)備課設(shè)、畢設(shè)或面試的開發(fā)者系統(tǒng)學(xué)習(xí)。1. 基于Redis實(shí)戰(zhàn)的高并發(fā)緩存項(xiàng)目在解決什么問題不是把數(shù)據(jù)放進(jìn)內(nèi)存就完事秒殺剛開始的一瞬間幾萬個(gè)請求同時(shí)打向商品詳情頁如果每次都回源數(shù)據(jù)庫連接池幾秒就會被榨干接口延遲從幾十毫秒一路退化成超時(shí)?;赗edis實(shí)戰(zhàn)的高并發(fā)緩存項(xiàng)目練的就是這件事把熱點(diǎn)讀的壓力擋在數(shù)據(jù)庫前面同時(shí)保證緩存與數(shù)據(jù)庫最終一致。它把一條完整落地鏈路拆成可執(zhí)行步驟——Redis安裝與配置、數(shù)據(jù)類型選型、過期淘汰策略、分布式鎖、緩存穿透/擊穿/雪崩治理再到JMeter壓測和集群選型。適合正在準(zhǔn)備后端面試的Java工程師也適合在業(yè)務(wù)里被緩存一致性和緩存失效問題追著跑的人。照著復(fù)現(xiàn)一遍等于提前踩完了高并發(fā)緩存最常見的坑。2. 先搭起高并發(fā)緩存的最小骨架環(huán)境、數(shù)據(jù)類型與過期機(jī)制高并發(fā)緩存項(xiàng)目不能一上來就上集群先把單機(jī)跑順。我一般先把本機(jī)或一臺測試機(jī)的Redis拉起來把讀寫鏈路跑通再去談分布式鎖和緩存治理。不在單機(jī)階段把數(shù)據(jù)類型、過期策略和序列化方式定好后面壓測一打全是臟數(shù)據(jù)排錯成本極高。2.1 本地快速拉起一個(gè)Redis安裝命令、核心配置與可視化工具常見做法是在Linux服務(wù)器上裝Redis。測試環(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編譯通過后先前臺啟動一次確認(rèn)沒有報(bào)錯再轉(zhuǎn)后臺redis-server。生產(chǎn)習(xí)慣是用配置方式啟動redis-server /etc/redis/redis.conf。源碼編譯的Redis默認(rèn)不帶systemd腳本我用nohup redis-server 起測試實(shí)例線上則用systemd或容器托管。拿到一個(gè)能跑的Redis后先改四個(gè)參數(shù)避免后患。打開redis.conf把監(jiān)聽地址、密碼、內(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 雙開注意性能和安全的取舍 appendonly yes appendfsync everysecbind只允許本機(jī)和內(nèi)網(wǎng)IP訪問是防止緩存被外部掃描的第一道門。requirepass不設(shè)的話Redis基本等于裸奔。maxmemory設(shè)成物理內(nèi)存的一半左右避免Redis吃滿內(nèi)存后觸發(fā)系統(tǒng)OOM Killer。appendfsync everysec是性能和安全的中間值always太慢no容易丟數(shù)據(jù)。排查數(shù)據(jù)寫沒寫進(jìn)去時(shí)不一定非開可視化工具。我習(xí)慣先用redis-cli直接敲命令驗(yàn)證redis-cli -a $REDIS_PWD GET product:1001。要看某個(gè)key多久過期用TTL product:1001要看哪些key占內(nèi)存大用redis-cli --bigkeys??梢暬ぞ哂脕碛^察整體結(jié)構(gòu)更直觀Redis Desktop Manager和Another Redis Desktop Manager都可以我一般拿它看key前綴分布和過期情況不會拿它做線上寫操作。2.2 用Spring Boot寫最小緩存讀寫String、Hash還是對象序列化后端整合Redis常見做法是用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)對單機(jī)壓測夠用但注意這只是上限不是初始值。min-idle設(shè)5避免流量突增時(shí)臨時(shí)創(chuàng)建連接產(chǎn)生延遲。timeout設(shè)3秒防止Redis阻塞時(shí)客戶端無限等待。讀寫代碼我傾向于用StringRedisTemplate而不是RedisTemplate。RedisTemplate默認(rèn)的JDK序列化會把key和value都變成一串\xAC\xED開頭的亂碼調(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ù)庫 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可讀、跨語言、方便排查線上出問題能用肉眼看出value格式對不對。Hash則更適合熱更新場景比如商品詳情只改價(jià)格字段時(shí)用Hash的HSET product:hash:1001 price 99.9只寫一個(gè)字段而不是把整個(gè)JSON拿出來反序列化再寫回去。數(shù)據(jù)類型選擇原則很簡單讀多寫少用String字段級更新頻繁用Hash計(jì)數(shù)場景用String加INCR命令。2.3 緩存過期與淘汰策略參數(shù)怎么定才不被流量打穿每個(gè)key設(shè)多長TTL是高并發(fā)緩存項(xiàng)目里最考經(jīng)驗(yàn)的地方。太短緩存形同虛設(shè)太長數(shù)據(jù)不新鮮。我一般按業(yè)務(wù)容忍度分四類業(yè)務(wù)場景TTL建議說明熱點(diǎn)商品詳情30分鐘到2小時(shí)容忍短暫不新鮮驗(yàn)證碼5分鐘必須嚴(yán)格過期庫存計(jì)數(shù)不設(shè)TTL或30秒配合分布式鎖更新用戶會話信息2小時(shí)有活動時(shí)滑動續(xù)期注意TTL不能全員寫死。一個(gè)商品詳情頁在零點(diǎn)整同時(shí)過期會引發(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)存滿了之后誰被淘汰。默認(rèn)noeviction在寫新key時(shí)會直接報(bào)錯絕對不能用在生產(chǎn)。我線上常用allkeys-lru讓Redis按最近最少使用淘汰對熱點(diǎn)讀場景最省心。volatile-lru只淘汰設(shè)置了TTL的key適合緩存和永久數(shù)據(jù)混用的實(shí)例。如果業(yè)務(wù)數(shù)據(jù)有明顯冷熱區(qū)分又不想手動管理allkeys-lru是最省事的選擇。3. 真正扛高并發(fā)的關(guān)鍵分布式鎖與緩存穿透/擊穿/雪崩治理單機(jī)緩存跑通只是起點(diǎn)。真正讓高并發(fā)緩存項(xiàng)目值錢的是并發(fā)場景下的鎖和三類經(jīng)典問題緩存穿透、緩存擊穿、緩存雪崩。這三個(gè)詞面試必問線上也必踩我一個(gè)個(gè)拆開講。3.1 用SETNX到Redisson改造分布式鎖三個(gè)參數(shù)定生死緩存重建場景里如果熱點(diǎn)key失效幾十個(gè)線程同時(shí)回源數(shù)據(jù)庫MySQL會瞬間被打滿。常見做法是給緩存重建加分布式鎖只允許一個(gè)線程回源其余線程等待后復(fù)用第一個(gè)線程寫的緩存。先看Redis原生命令版本。Redis從2.6.12開始SET命令可以把加鎖和過期一次完成# 返回OK代表搶鎖成功返回nil代表鎖已被占用 SET lock:product:1001 8f3b2c9e NX EX 30NX表示只有key不存在時(shí)才寫入EX 30表示鎖自動過期30秒。value一定不能寫死要寫一個(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是否對得上對得上才刪這是分布式鎖最基本的安全底線。但原生SETNX有個(gè)隱患如果業(yè)務(wù)執(zhí)行超過30秒鎖自己過期了第二個(gè)線程進(jìn)來第一個(gè)線程還沒執(zhí)行完鎖就形同虛設(shè)。我線上更推薦用Redisson它提供的watchdog機(jī)制會自動續(xù)期默認(rèn)每10秒檢測一次鎖是否仍持有自動把鎖有效期延長到業(yè)務(wù)結(jié)束RLock lock redissonClient.getLock(lock:product:1001); boolean locked lock.tryLock(0, 30, TimeUnit.SECONDS); if (!locked) { throw new BizException(排隊(duì)中請稍后重試); } try { // 只允許一個(gè)線程回源重建緩存 Product product loadFromDb(id); stringRedisTemplate.opsForValue().set(key, productJson, Duration.ofMinutes(30)); } finally { if (lock.isHeldByCurrentThread()) { lock.unlock(); } }tryLock三個(gè)參數(shù)分別是最長等待時(shí)間、鎖租約時(shí)間、時(shí)間單位。最長時(shí)間設(shè)0表示搶不到就立刻返回適合秒殺場景讓用戶排隊(duì)重試。租約時(shí)間設(shè)30秒業(yè)務(wù)超過這個(gè)時(shí)間鎖會釋放防止持有鎖的節(jié)點(diǎn)宕機(jī)后鎖和業(yè)務(wù)一起掛掉。用Redisson時(shí)注意加鎖操作本身也可能拋異常要放在try外面否則鎖初始化失敗會被當(dāng)成業(yè)務(wù)異常吞掉。3.2 緩存穿透、擊穿、雪崩的治理空緩存、互斥重建與隨機(jī)TTL緩存穿透是查詢一個(gè)根本不存在的數(shù)據(jù)比如惡意請求商品ID為-1的接口。緩存里沒有數(shù)據(jù)庫里也沒有每次請求都回源數(shù)據(jù)庫壓力直接爆表。解決思路是給不存在的key也寫一個(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; }更徹底的做法是前置布隆過濾器把存在的ID放在過濾器里請求先過過濾器不在直接返回。布隆過濾器有誤判率參數(shù)一般設(shè)1%以內(nèi)就夠用。它的缺點(diǎn)是維護(hù)成本高新增商品要同步更新位圖適合ID范圍穩(wěn)定的場景。緩存擊穿是熱點(diǎn)key剛好過期大量請求同時(shí)打進(jìn)來。穿透是查不存在的數(shù)據(jù)擊穿是查存在但緩存剛好失效的數(shù)據(jù)。擊穿的標(biāo)準(zhǔn)解法是互斥鎖只有搶到鎖的線程回源其余線程短暫等待后重查緩存。我常用SET key value NX EX做輕量鎖比Redisson更輕適合單機(jī)壓測練手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 { // 沒搶到鎖的線程等50ms后重查緩存 Thread.sleep(50); return getProduct(id); }這個(gè)是遞歸重查緩存剛被重建第二次查詢就能命中。注意Thread.sleep時(shí)間不要超過鎖的過期時(shí)間否則緩存還沒建好鎖就沒了后續(xù)請求還是會回源。緩存雪崩比擊穿更廣是大批量key同時(shí)過期或Redis節(jié)點(diǎn)宕機(jī)。解決思路分散化TTL加隨機(jī)偏移應(yīng)對批量過期主從哨兵應(yīng)對單點(diǎn)故障服務(wù)端做多級緩存兜底本地進(jìn)程內(nèi)緩存扛第一波Redis扛第二波數(shù)據(jù)庫只接收穿透下來的請求。3.3 緩存與數(shù)據(jù)庫一致性先更新庫還是先刪緩存緩存項(xiàng)目繞不開一致性。常見做法是Cache Aside旁路緩存讀的時(shí)候先讀緩存未命中回源數(shù)據(jù)庫再寫緩存寫的時(shí)候先更新數(shù)據(jù)庫再刪除緩存。刪除緩存而不是更新緩存原因有兩個(gè)。第一更新緩存意味著每次寫請求都要寫Redis如果數(shù)據(jù)庫更新頻率高緩存會被頻繁重寫白白浪費(fèi)性能。第二并發(fā)更新同一個(gè)key后寫的值可能覆蓋先寫的緩存里存的東西和數(shù)據(jù)庫不一致。刪除緩存則讓下次讀請求自然回源重建收斂到正確值。那為什么不是先刪緩存再更新數(shù)據(jù)庫因?yàn)閮蓚€(gè)操作之間有一個(gè)時(shí)間窗口。線程A先刪緩存線程B讀到緩存為空回源剛好數(shù)據(jù)庫還是舊值把舊值寫回緩存之后線程A才把新值更新到數(shù)據(jù)庫緩存就永久是臟的了。先更新數(shù)據(jù)庫再刪緩存雖然刪緩存前有一小段時(shí)間緩存是舊值但最終會被一次刪除糾正收斂速度快得多。這個(gè)方案并非完全沒有坑。如果刪除緩存失敗比如Redis命令超時(shí)緩存里還是舊值。線上通用做法是延遲雙刪更新數(shù)據(jù)庫后刪除緩存隔幾百毫秒再刪一次即使第一次刪除失敗還有第二次兜底。實(shí)際項(xiàng)目里我更建議把刪除緩存動作做成可靠消息或本地任務(wù)表異步重試幾次。對一致性要求極高的賬務(wù)類數(shù)據(jù)不要走緩存直接走數(shù)據(jù)庫強(qiáng)一致緩存只服務(wù)讀多寫少的數(shù)據(jù)。4. 用壓測把高并發(fā)緩存項(xiàng)目跑穿JMeter、Redis監(jiān)控與集群選型寫代碼誰都會但高并發(fā)項(xiàng)目跑不跑得住必須壓測說了算。壓測不是簡單開幾個(gè)線程打一打要看緩存命中率、TPS拐點(diǎn)和慢日志變化。這一章講我把單機(jī)緩存項(xiàng)目驗(yàn)證到能上線的三板斧。4.1 用JMeter打高并發(fā)壓測線程組、聚合報(bào)告與三個(gè)必調(diào)參數(shù)JMeter是壓測高并發(fā)緩存項(xiàng)目的標(biāo)準(zhǔn)工具。常見做法是先用GUI把測試計(jì)劃配好再命令行跑回歸。線程組是最核心的組件參數(shù)直接影響壓測結(jié)果參數(shù)建議值作用線程數(shù)200到1000模擬并發(fā)用戶數(shù)Ramp-up30到60秒讓壓力緩慢爬升不要瞬間壓垮循環(huán)次數(shù)100到500保證每個(gè)線程有足夠請求量壓測需要把Redis緩存先預(yù)熱還是先清空看目標(biāo)而定。測緩存穿透我用redis-cli把相關(guān)key清空再打測綜合性能先灌一批熱點(diǎn)數(shù)據(jù)再打。JMeter加HTTP請求采樣器配置里把連接超時(shí)設(shè)為1000ms、響應(yīng)超時(shí)設(shè)為3000ms超過就當(dāng)成失敗這樣能暴露Redis慢命令的問題。命令行跑壓測是上線前的固定動作jmeter -n -t high-concurrency.jmx -l result.jtl -e -o report/跑完后重點(diǎn)看聚合報(bào)告里的三個(gè)數(shù)字吞吐量、90%響應(yīng)時(shí)間和異常率。吞吐量就是每秒能處理多少請求90%響應(yīng)時(shí)間反映用戶體驗(yàn)異常率超過0.1%就必須查日志。第一次壓測我一般只開200并發(fā)觀察數(shù)據(jù)庫連接池和Redis內(nèi)存變化再逐步加到500、1000找到TPS拐點(diǎn)。4.2 Redis慢日志與INFO命令壓測時(shí)的三個(gè)監(jiān)控手段壓測過程中不能只盯著JMeterRedis側(cè)的監(jiān)控才決定瓶頸分析方向。我會同時(shí)開三個(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毫秒。壓測時(shí)如果發(fā)現(xiàn)大量命令超過這個(gè)閾值說明Redis執(zhí)行被阻塞或key太大。INFO命令里keyspace_hits和keyspace_misses是緩存治理最核心的兩個(gè)數(shù)字命中率公式是hits除以hits加misses。線上運(yùn)營正常時(shí)命中率低于80%就要警惕壓測時(shí)如果命中率驟降多半是緩存預(yù)熱不夠或者TTL設(shè)置不合理。--bigkeys掃描可以找出大key。一個(gè)value超過1MB的key在高并發(fā)下會成為熱點(diǎn)瓶頸讀寫都慢。壓測前先跑一遍這個(gè)命令把大key拆掉或換數(shù)據(jù)結(jié)構(gòu)不然壓到一半Redis卡死會以為是代碼問題。4.3 從單機(jī)到集群主從、哨兵和Cluster的邊界單機(jī)壓測通過后下一個(gè)問題是走到哪一步要開始上集群。常見做法分三檔。主從復(fù)制解決的是讀壓力。一臺master掛多臺slave讀流量分配到slavemaster只處理寫。主從同步是異步的slave上可能有短暫數(shù)據(jù)延遲對一致性敏感的頁面不要走slave。哨兵模式解決的是高可用。master掛了哨兵自動把slave提升為master應(yīng)用端通過哨兵感知新的master地址。但一臺master依然有內(nèi)存上限數(shù)據(jù)量超過單機(jī)內(nèi)存還是撐不住。Cluster模式解決的是容量和寫擴(kuò)展。數(shù)據(jù)按slot均勻分布到多臺節(jié)點(diǎn)寫入可以水平擴(kuò)展。Cluster的代價(jià)是客戶端復(fù)雜度高多key操作要確認(rèn)它們在同一個(gè)slot事務(wù)能力也受限。我見過不少團(tuán)隊(duì)在數(shù)據(jù)量不到5GB時(shí)就上了Cluster運(yùn)維把slot遷移和reshard折騰得苦不堪言。我的建議是先壓測如果單機(jī)8GB內(nèi)存和哨兵模式能扛住未來一年的峰值就不要上Cluster。鎖和數(shù)據(jù)一致性復(fù)雜度不值得為不存在的高并發(fā)買單。5. 高并發(fā)緩存項(xiàng)目最容易翻車的5個(gè)坑現(xiàn)象、原因與解決高并發(fā)緩存項(xiàng)目做完壓測和上線過程會暴露一堆只靠讀文檔發(fā)現(xiàn)不了的問題。下面這5條是我反復(fù)踩過、也幫別人排查過最多的坑每一條都按現(xiàn)象、原因、解決的順序拆開講你可以直接對照自己的項(xiàng)目。5.1 并發(fā)一高數(shù)據(jù)庫連接池就報(bào)錯緩存形同虛設(shè)現(xiàn)象壓測線程從200加到500時(shí)數(shù)據(jù)庫連接池開始拋Connection is not available, request timed out但Redis的CPU和內(nèi)存都正常。原因查了下緩存的命中率發(fā)現(xiàn)大量請求在查一個(gè)不存在的ID比如商品ID為負(fù)數(shù)或者已被下架的數(shù)據(jù)。這些key緩存里沒有回源邏輯每次都查數(shù)據(jù)庫緩存完全沒有兜住。這是典型的緩存穿透惡意請求拿不存在的ID反復(fù)打接口時(shí)尤其嚴(yán)重。解決給查詢結(jié)果為空的情況寫臨時(shí)緩存TTL設(shè)30秒同時(shí)在前置接口做參數(shù)校驗(yàn)負(fù)數(shù)ID直接返回異常。更穩(wěn)妥的方案是在緩存層加布隆過濾器ID不在集合里的請求直接丟棄不用碰數(shù)據(jù)庫。5.2 分布式鎖搶到了還是超賣庫存扣成負(fù)數(shù)現(xiàn)象壓測秒殺接口時(shí)庫存總數(shù)1000件實(shí)際賣出去1200件日志里每個(gè)線程都聲稱自己搶到了鎖。原因鎖沒搶到不等同于業(yè)務(wù)沒執(zhí)行。我把鎖的tryLock返回值當(dāng)成成功標(biāo)志但沒在失敗時(shí)終止流程線程繼續(xù)往下執(zhí)行扣庫存。另外一個(gè)更隱蔽的原因是鎖value寫死了固定字符串線程A釋放鎖時(shí)把線程B的鎖也刪了。兩個(gè)線程同時(shí)持鎖超賣就必然發(fā)生。解決tryLock返回false必須直接拋異常或返回“搶購失敗”不能繼續(xù)往下走。釋放鎖改用Lua腳本比對value再刪除確保只能刪自己的鎖。用Redisson的話配置watchdog自動續(xù)期避免業(yè)務(wù)執(zhí)行超過鎖租約時(shí)間。5.3 同期設(shè)置的緩存key在同一秒失效緩存命中率一夜回到解放前現(xiàn)象零點(diǎn)過后緩存命中率從95%暴跌到40%數(shù)據(jù)庫壓力暴漲持續(xù)一兩分鐘后才恢復(fù)??碦edis慢日志大批KEYS命令和同前綴的GET命令同時(shí)出現(xiàn)。原因所有商品詳情key都是寫入時(shí)固定加30分鐘TTL同一批商品在同一時(shí)間失效形成批量緩存雪崩。雖然Redis還活著但數(shù)據(jù)庫被回源流量打蒙了接口響應(yīng)時(shí)間翻了十倍。解決TTL不再寫死寫入時(shí)加隨機(jī)偏移讓過期時(shí)間分散在前后一分鐘內(nèi)。同時(shí)給熱點(diǎn)商品加一個(gè)主動續(xù)期邏輯訪問時(shí)如果TTL低于閾值就把TTL續(xù)到30分鐘相當(dāng)于給熱點(diǎn)數(shù)據(jù)續(xù)命。5.4 Redis可視化工具里全是亂碼value長這樣\xAC\xED\x00\x05t現(xiàn)象用Redis Desktop Manager打開緩存實(shí)例key顯示成\xAC\xED\x00\x05tProductvalue也是\xAC\xED\x00\x05開頭的一串亂碼命令行里卻能看到業(yè)務(wù)字符串。原因RedisTemplate默認(rèn)使用JdkSerializationRedisSerializerJava對象先被JDK序列化成二進(jìn)制再存進(jìn)Redis。JDK序列化后的數(shù)據(jù)帶類型簽名可讀性極差還會在value里附帶類路徑占空間。這不是Redis的問題是客戶端序列化方式選錯了。解決統(tǒng)一改用StringRedisTemplatekey和value都存字符串。對象先轉(zhuǎn)JSON字符串再寫入讀取時(shí)再反序列化。如果必須用RedisTemplate把valueSerializer替換成GenericJackson2JsonRedisSerializerkey保持StringRedisSerializer。改完后可視化工具和命令行看到的內(nèi)容都應(yīng)該是可讀JSON。5.5 Redis command timed outLettuce連接池被打滿現(xiàn)象高并發(fā)壓測時(shí)應(yīng)用日志頻繁報(bào)Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException幾分鐘后接口大面積超時(shí)。原因Lettuce作為Spring Boot默認(rèn)客戶端是異步的但如果connection pool配置不對它會把請求阻塞在等待連接上。我遇到過把max-idle設(shè)成8、max-active設(shè)成16的小池子壓到200并發(fā)時(shí)所有連接都被占滿新請求全部超時(shí)。另外一個(gè)原因是Redis側(cè)有慢命令比如處理很大的Hash單個(gè)命令耗時(shí)超過客戶端的timeout閾值。解決先把max-active調(diào)到壓測并發(fā)數(shù)以上的值比如500并發(fā)配80個(gè)連接max-wait設(shè)300到500毫秒。然后查Redis慢日志找到耗時(shí)超過客戶端timeout的命令拆大key或換數(shù)據(jù)結(jié)構(gòu)。如果業(yè)務(wù)對單點(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ī)化、上線前壓測。key命名我最常用的是“業(yè)務(wù):場景:ID:版本”格式比如mall:product:detail:1001:v2。業(yè)務(wù)前綴方便按產(chǎn)品線隔離場景前綴方便定位用途ID是具體數(shù)據(jù)版本號是給緩存結(jié)構(gòu)升級留的后路。用冒號而不是下劃線因?yàn)镽edis Desktop Manager和另一個(gè)可視化工具會把冒號自動折疊成目錄樹排查效率高很多。上線前我有個(gè)固定checklist抽查高流量緩存key是不是都帶了隨機(jī)TTL偏移用redis-cli --bigkeys確認(rèn)沒有超過1MB的大key跑一次200并發(fā)的壓測看緩存命中率和慢日志有沒有異常確認(rèn)Redis可視化工具里能看到正常JSON而不是JDK序列化的亂碼。這套動作看起來瑣碎但每次都能攔住至少一個(gè)上線事故。我的個(gè)人習(xí)慣是把線上緩存問題當(dāng)成黑匣子來記錄什么時(shí)間點(diǎn)命中率下降、當(dāng)時(shí)連著做了多少次回源、Redis慢日志里是哪類命令記多了會發(fā)現(xiàn)大多數(shù)緩存事故的根源就那幾個(gè)。高并發(fā)緩存項(xiàng)目最大的價(jià)值不是把Redis用熟而是學(xué)會在數(shù)據(jù)庫被打爆之前靠監(jiān)控?cái)?shù)據(jù)把痛點(diǎn)定位出來。希望這些參數(shù)和踩坑記錄能幫你少走一段彎路希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91亚洲网站| 日本精品成人无码| 伊人精品国产| 日韩伦理久 久久 清纯| 黑人嘿嘿嘿超爽免费视频| 少妇久久久久久久久| 激情视频一二三| 五月婷婷综合网| 人人操肉肉| 亚洲精品久久久久毛片A片拉屎 | 日韩欧美aⅴ综合网站发布| 99日视频在线免费| 97就爱干| 丰满人妻一区二区三区免费 | 后入式视频国产自| 中文字幕91综合| 超碰99在线| 乱伦Av网| 亚洲图片偷拍视频区| 亚洲本色精品一区二区久久| 国产美女自拍视频| 欧美91变态| 亚洲激情天堂网| 久久男人| 1二区9| 色婷婷色99国产综合精品| 亚洲欧美一区二区网址| 天天射日日干| 人妻精品一区二区三区| 蜜臀AV一区二区三区| 午夜综合在线| 国产精品一区二区麻豆| 插插综合网天天影视网| 超碰在线综合97| av线电影| 中文字幕伊人| 骚熟女AV网| 久久久无码精品人妻二区 | 九99久久| 超碰在线成人电影| 97爱爱官网| 亚洲AV色图一区| 二三四区精品| 国产精品成人AV片免费看网站| 日韩小电影| 亚洲天堂欧美| 亚欧无码线免费观看视频| 日韩成人私密一级精品av| 2017亚洲天堂| 久久成人国产精品| 国产精品女久久久久av爽| 99操视频| 成人老鸭窝人人在线视频| 欧美第一页性| 91爱欧美| 蜜臀99久久精品久久久懂爱| 狠狠中文字幕| 婷婷四五区| 96AV久久久| 麻豆AV短剧| 久久综合久色欧美综合狠狠| 国产在线播放成人免费| 日日噜噜夜夜狠狠视频无| 日本熟女中文字幕一区| 色情五月综合婷婷| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 婷婷色香| 人伦四五区| 亚洲一区二区在线观看91| 国产综合在线视频网站| 精品一区二区亚洲国产| 午夜欧美神马久久久久| 中文字幕一二三av| 三男一女不戴套的A片| 成人亚欧免费视频| 日日夜夜干| 欧美另类自拍| 久久少妇| 亚洲少妇色| 欧美色图下一页| 亚洲少妇视频| 国产一区二区a毛片| 牛黄色久午久| 色偷综合| 亚洲国产成人精品999| 福利在线黄片| 97国产精品一区| 乳欲人妻办公室奶水| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 老司机天天操| 国产女人高潮视频| 亚洲成人AB| 性色av大全| 99久久九九| 在线观看视频91| 乱欲视频| 大香樵伊人网| 99精品在线| 伊人精品久久网站| 欧美一区二区在线资源| AAAAAAAAA黄片| 天天做日日做天天欢。| 中文字幕乱碼在线| 绯色一区二区三区不卡少妇 | 欧美激情综合色综合啪啪五月| 亚洲永久永久永久永久一级一级一级精品 | 粉嫩国产精品久久粉嫩| 亚洲综合91| 麻豆啪啪啪视频| 久啪| 日韩成人免费电影| 日日骚av| 97色婷婷| 91欧美网| 97在线欧洲| 国产a片操逼| 中文字幕精品三级久久久| 曰韩人妻中文字幕在线| 久久久久国产亚洲一区欧美色图日韩| 91久| 91精品综合久久久久久五月丁香| 九九久久国产精品怡红院| 亚洲国产婷婷在线播放| 大屁股国产在线视频| 日本不卡高清视频| 啊啊啊啊啊舒服| 久久av成人无码免费| 国产免费久久精品99re韩国| 操逼操网| 2017天天插| 五月丁香激情综合| 清纯唯美亚洲综合| 色月天AV导航| 日本免费人成视频播放120秒| 一道本东京热加勒比一区二区三区| 91欧美经典| 五月丁香婷婷色| 婷婷精品久久av影视| 黑人无码一区二区| 国产农村妇女毛片精品久久| 日韩另类色图| 亚洲精品免费中文字幕| 人人爽夜夜玩视频| 99re6国产精品99re在线| 大肥女高潮bbwbbwhd视频| 18一区二区三区| 啪啪啪东京| 欧美夜夜骑视频| 中国探花熟女| 草莓精品视频在线免费观看| 99re这里只有精品2| 先锋精品av色鲁| 日韩在线国产字幕| 中文精品少妇天堂| 久久大线蕉一区| 中文字幕亚洲永久精品| 亚洲天堂男人的天堂| 欧美日本久久精品一区| 日亚韩精品视频二区三| 精品国产乱码久久| 国产风韵犹存熟妇三区| 大香蕉伊人一区在线观看| 国产一区二区三区白丝| 啊啊啊啊好疼| 国产第二页| 日本色色色| 人人妻人人爽 97人人看碰人免费公开视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美超碰人妻97| 大香蕉伊人网WWWn0n| 久久青青草原免费视频| 风月影院十八禁| 夜精品久无码| 97 九色| 亚洲系列第一页| 久久久999国产精品| 九一综合精品视品av| 丁香五月综合| 13小男生GAY自慰脱裤子| 亚洲激情深爱文学小说网站| 欧美久久婷婷| 99色悠悠| 在线 制服丝袜中出 人妻| 国产AV色黄看到爽| 九九九久久久| 人妻天堂三区| 欧美色图自拍| 校园春色亚洲无码| 99精品网站| 欧美熟女少妇| 国产成人网址| 亚洲日本成人动漫| 在线只有精品| 丁香六月激情| 欧美成人性爱视频大全| 免费a在线播放v| 台湾成人无码AV| 国产狂喷潮在线精品| 人人操人人摸超碰| 精品女同一区二区三区| 热热色综合网| AV在线播放网址| 97视频在线免费播放| 激情终合网| 精品久久久久久久久久久久| 一区麻豆 高清中文字幕| 五月婷婷激情| 激情四射婷婷四五月天| 少妇同性| 制服丝袜第二页| 2017超碰| 天天影视之亚洲综合网| 精品女同一区二区三区| 90后后入| 测评在线观看AV| 小说区 图片区色 综合区| 啊啊啊在线观看| 啊啊啊在线观看| 囯产精品久久久久久久久久梁医生 | 欧美亚州色的图| 久久大陆| 丝袜美腿91| 日韩三级av片| 中国操逼无码| 免费看黄视频亚洲网站| 婷婷色综合| 天天天天天超碰| 亚洲欧美综合网| 美女爽到高潮91| 啪啪自拍九九综合| 在线观看高清AV| 金莲网址| 人妻AV在线| 96精品在线| 午夜久久一区二区无码中出| 久久久久78| 性高潮久久久久久久久久久| 欧美一区二区三区不卡高清视频| 亚洲欧美日韩免费电影| 91久久久久久久| 丰满欧美少妇| 亚洲情色综合网| 精品一级| 青椒国产97在线熟女| 9久久精品| 91九九九逼| 蜜臀久久99精品久久久久电影| 亚洲不雅视频1区二区| 免费AV中文网在线观看| 日本亚洲熟女视频| 草久久久| 国产午夜精品一区二区三区牛牛| 久久精品福利影院| 激情五月天丁香| 色哟哟-国产专区| 日韩欧美蜜桃精品久久中文字幕久久| 啊啊啊好想要| 欧美疯狂做爰xxxx| 神马久久啊啊| 欧美性爱精品七区| 久久小视频| 97在线无精品| 激情小说在线视频| 国产自产22区| 欧美不卡五十路| 激情专区综合| 999 久久久| 97操| 小泽玛利亚一二三| 午夜福利 成人 91| 青青操综合网| 青青操少妇| 99色综合| 中文字幕国产精品1区| 大香网伊人久久综合网eew| 精品人妻一区二区蜜桃视频| 免费国产电影一区二区| 亚洲色图久久精品蜜| 制服丝袜第二页| 一区二区三区美女超清| 精品一区二区三区蜜桃臀赵总 | 久久久工口| 国产丝袜啪啪| 99这里有精品视频| 欧美性爱一区二区三区| 日本日皮视频逼| 欧美亚州色的图| 1级午夜影院费免区| 久久久不能久久久久| 国产人妻久久精品一区二区三区| 桃色五月天| 亚洲欧美校园| 激情五月天丁香| 久久精品国产97欧美精品亚洲| 欧美一级黄色18片免费看| 欧美天堂亚洲电影院一区在线播放| 98人妻精品一区二区色欲| 欧美综合传媒| 国产 无码 一区二区| 久久国语| 久久久国产成人一区二区三区在线 | 777超碰| 91狠狠色丁香婷婷综合久久| 2023天天操夜夜操| 伊人aaa| 久草视频在线视频在线视频在线观看| 啊啊啊啊啊啊啊网址在线观看| 国产中文字幕曰本毛片| 香蕉精品二区二区| 人妻天天夜夜爽一区二区| 欧美性夜| 欧美伦乱爱| 丰满人妻大屁一区二区| 熟女人妻精品一区二区视频 | 啊啊啊爽爽| 有码免费观看| 九月丁香综合网| 97视频在线免费| 国产无马av| 97天天| 天天综合网国产| 一本色道无码DVD中文字幕| 99xav| 国产精品探花视频| 99re这里只有| baiduhicn.com。| 国产一区二区欧美日本| 亚洲欧美电影| 亚洲国产中文字幕| 欧美亚洲国产自久久| 一级片在线观看高清无码| 后入福利视频| 色婷婷aV一区二区三区麻豆综合| 午夜精品五区| 99热自拍| 亚洲精品一二牛牛| 亚洲国产中文字幕| 91黑丝少妇| 国产 三级自拍| 2023天天操夜夜操| 性欧美91| 男人的天堂三级| 精品熟女一区=区三区| 99国产精品视频尤物| 国产一二三在线视频五十路| 在线情色电影 91大| 日产狠狠干| 日本黄色大片一级视频免费麻豆| 日本不卡在线二区三区| 超碰69| 国产九九久久久精品| 日本污ww视频网站| 国产精品人人爽人人做可爱福利| 无码粉嫩白虎一线天b区| 日韩78m视频| 色av中文字| 免费观看啪视频| 日韩欧美tv一区二区在线观看| 大香蕉综合网| 亚洲一区二区AV| 国产女主播视频在线观看| 91欧美长吊| 天天摸天天插天天日| 激情视频网址| 激情综合五月| 天天干,天天日| 加勒比久久综合网高清| 十八禁av无码免费网站APP| 老鸭窝成人免费毛片视频| 国产91丝袜在线播放蜜月| 91在线色| 中文字幕-区二区三区四区视频中国| 激情五月激情综合网| 无码少妇精品一区二区60岁老人| 中国女人内射6XXXXX| 影视综合无码少妇| 国产成人99久久亚洲综合| 91东北熟女| 亚州男人天堂| 久久97超碰| 中文字幕99999| 97在线视频免费| 精品一级| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产精品久久妻无码网站| 日韩一级二级三级免费看完整版| 天美传媒AV在线播放| 96超碰网| 亚洲美女AV无码| 亚洲黑人在线| 国产精品成人AV片免费看网站| 另类图片天天影视| 久久精品国产Aⅴ| 2017av无码免费无线播| 久久黄色视频一区二区三区 | 麻豆天美久久91| 久久久久成人蜜桃精品| www.高清无码诱惑一区.com| 无码九九| 骚女天天综合网| 极品国产内射| 欧美少妇性爱网站| 5月婷婷6月六月丁香| 五月天伊人| 精品熟女一区=区三区| 免费久久9999| 亚洲天堂久| av中亚| 肏逼福利网站| 国产高清免费不卡av| 久草免费福利在线播放| 激情五月天婷婷| 国产乱婷婷精品二区三区| av麻豆啪啪| 国产午夜福利合集| 东京热一区二区中文字幕| 2017人人操,人人摸| 日本色色色视频| renqi久久久久久久久久久久| 欧美日日夜夜| 黑人精品欧美一区二区蜜桃| 男女一进一出视频久久| 亚洲精品一区二区三区在线播放| 美女露胸露奶头| 国产精品午夜福利视频| 97综合在线| 国产精品呦一区二区三区| AV九九| 歐美性天天| 风韵犹存大大大大香蕉| 超碰久在线天天做| 东方亚洲在线操逼天堂| 亚洲se91| 东北丰满熟女国产一区| 蜜臀久久99精品久久久久久久久| 九九九九精品一区| 日韩啊V| 亚洲av无线观看| 99青草| 久久机热| 中国一级特黄大片护士| 偷拍 精品另类 凸凹了四区| 日韩成人人妻网站| 欧美性爱中文字幕无线码| 天天干天天爽| 国内一级精品| 日本肉体xxxx裸交| 亚州熟妇精品| 亚洲日本激情| 高树玛利亚无码流出| 国产免费小视频| 日韩激情中文字幕有码| 新精精品久久精品| 欧美日韩黄片精品在线| 性色avv| JuliaAnn丝袜熟女系列| av国产无码| 91亚洲欧美综合高清在线| 久久欲| 国产免费大片| 一级性爱网| 一区二区三区精品黑丝白丝酒店对鸡| 亚洲欧美校园| 成人午夜无码视频| 抽插一区二区视频| 大香网伊人久久综合| 九久久精品| 国产精品岛国片在线观看| 中文字幕超碰CAO| 亚洲色图尤物视频| 亚洲人妖网| 一级二级三级黑人无码| 欧美曰韩国产精品| 91人妻最真实刺激绿帽| 日韩不卡一二三四| 欧美三级中文字幕hd| 日本一久是| 亚洲欧美在线观看免费| 综合97久久| 国产女性无套 免费观看| 性感美女啊啊啊在线| 日韩成人大片在线观看| 嗯嗯啊啊啊好爽| 久久草草欧美精品| 日韩欧美操逼xxx| 欧美韩国你懂得在线 | 久久在肏| 91蜜臀在线久久久久| 美女被啪到深处抽搐视频| 中文字幕视频在线观看一区二区| 亚洲春色欧美激情自拍| 亚洲诱惑| 日韩精品99999| 国产精品久久久 | 欧美精品欧美精品系列| 9久久美女首页| 国产中文字幕在线| 亚洲日韩国产精品| 欧亚不卡| 久久极品一区二区| 蜜区区视频79 | 亚洲蜜桃V妇女| 午夜福利 成人 91| 亚洲影院小综合| 无码日韩人妻av一| 91精品人妻一区二区三区蜜臀| 国产免费一区二区三区最新不卡| 日韩av免费一级电影| 在线情色电影 91大 | henhen91| 久久伦理视频久久大香蕉视频| 黄片无码在线制服| 日本精品999| 亚洲人91| 欧美另类色图片| 免费福利视频中文字幕| 天天操妹子| 九九九九九九九九九五码| 2020国产精品| 久操网无码在线| 性欧美91| 久久久久久久9最新免费视频观看| 色婷婷综合网站| 操逼片国产| 91bbb| 久久久久久久六六| 麻豆AV一区二区| 国产亚洲精品玖玖玖在线观看| 大香蕉中文| 99re在线视频| 色欲人妻一区二区在线| 偷拍欧美综合| 中文字幕一区日韩精| 亚洲无码国产精品久久| 国产性爱强奸乱伦大全| 97Ai亚洲| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 色五月首页| 搡老女人老妇女AAA一VU麻豆| 亚洲色电影在线| 偷拍在线观看视频| 宗合情欲网| 国产少妇与亚洲av| 性爱久久| 超碰人人妻| 免费看日本操逼视频| 再深点灬舒服灬太大了添视频 | 曰本91情色| 欧美狠狠弄| www.狠狠干.coom| 亚洲久热| 五月天激情小说| 欧美在线干| 欧美v亚洲v日韩v最新在线二区 | 久久久久久久久久黄色网| 91人人看| 亚洲人在线| 亚洲。日韩。欧美| 97超碰无码网| 中文字幕天天操| 久久綜合很很很| 有码色中文字幕在线观看| 99国产精品在线观看| 久久久久久性爱片| 自拍盗摄一区| 欧美老妇女内射网址| 综合网~91综合网| 久久久久亚洲精品| 人妻五十路在线| 豆1无夜无码| 97中文字幕一区| 清纯唯美综合| 久久久久亚洲| 欧美一区二区福利在线| 探花在线免费观看视频国产一区| 玖玖资源综合在线视频| 免费观看啪视频| 久久,精品一二三| 毛片17S| 99热这里只有是精品10| 日韩特一级久久| 欧美色97| 100啪啪视频大全| 黄色电影观看久久9| 国产精品爽爽va在线观看98| 亚洲激情四射| 精品亚洲俞拍视频一区| 亚洲影视第一页| 人妻少妇精品视频一区二区三区| 中文AV制服乱伦| a级成人毛片免费视频高清| 操美女高潮抽搐白浆| 丰满人妻一区二区三区免费,| 91日日| 蜜臀av网址| 99re这里只有精品9| 亚洲国产欧美一区二区潘金莲| 欧美一区二区观看在线| 九九热精品免费视频| 久久鲁夜| 日韩大香蕉| 亚洲成人日韩小说| 射 色综合| 国桃视频产巨乳精品一区二区在线| 中文字幕精品三级久久久| 天天操夜夜操| 国产亚州精品美女久久久免费| 国产久久一区二区午夜| 久久久久网站-538在线视频-欧美永久乱码| 欧美亚洲韩国视频十五区| 久久久亚洲| 自拍偷拍 高清无码| 999日韩中文精品观看视频。| 无码人妻精品一区二区三区九九| 日韩射精| 爱我干综合| 和协影院中文字幕三区| 亚洲情欲| 日本一级一级一级一级| 欧美在线视频观看一二三四区高清| 97超碰超| 岛国片在线观看视频亚洲| 亚洲天堂情色| 男女啪啪啪18禁网站| 日本综合久久| 99最新日韩偷拍视频| 欧美性爱18观看| 日韩在线76| 久久久青青草| 日亚韩精品视频二区三| 青草视频人妻在线观看| 国产多人在线观看视频| 富二代亚洲精品99| 亚洲天堂男人的天堂| 最新国产精品久久精品| 99re综合伊人| 天天视频黄网站| 超碰夫妻97| 蜜臀AV秘一区翔田千里| 欧美日韩免费专区在线| av影片在线观看不卡| 中文字幕 人妻不满 在线视频| 9九九国产| 国产成人精品日本视频| 99热日| 天天搞在线综合网| 日本中文字幕一区| 在线欧美69V免费观看视频| 青娱乐大香蕉| 亚洲成人av电影在线| 国产熟女| 影音先锋乱| 亚洲九九视频| 夜夜操狠狠操| 69精品| 欧美色图亚洲色图成人在在线| 婷婷久久五月综合激情| 青青草久久一区网| 日韩美女啪啪一区| 久久精品国产久精国产| 性爱av在线免费观看| 超碰色美女| 亚洲欧美精品一区天堂久久 | 人妻夜夜爽天天爽麻豆三区网站| 超碰午夜| 一区二区视频你懂的| 亚洲精品影视老司机| 人乳av| 乱人伦 国语对白:视频直接看| 好吊色综合| 国精品一区二区三| 老熟女乱子伦中文字幕一区二区| 亚洲 无码 有码 中文字幕| 国产精品久久久三级无码| 96国产精品| 人妻日日夜夜精品| 香蕉久久AⅤ...| 日韩特一级久久| 校园春色 男人天堂| 久久国产熟女影院| 欧美色图在线视频少妇| 男人夜色天堂ss| 免费1级a做爰片观看| 四虎影视 亚洲无码| 深夜操逼网| 国产日韩在线播放av| 黑人精品欧美一区二区蜜桃| 99999久久久久9国产精品| 亚洲精品官网在线观看| 青草成人免费视频一COm| 夜夜骑天天燥| 99热综合| 亚洲av综合色| 亚洲情欲| 欧美在线干| 日日日啊啊啊| 99视频自拍区| 啊啊啊用力在线观看| 中文字幕AV乱伦| 久操视频在线| 97超碰无码网| 99碰碰| 精品九九国产无码| 天天操天天舔| 亚洲天堂美臀在线| 久久久啊啊| 一区三区啪啪| 新久久AV| 丰满人妻aA一区二区三区| 精品人妻伦一区二区三区久久| 久草精品热视| 丁香五月性爱| 蜜乳AV一区| a片偷拍视频| 97天天| 中文字幕午夜精品久久久| 青青操少妇| 狼人综合婷婷激情四射 | 国产毛片久久久久久久| 啊啊啊无码| 国产精品午夜福利| 日本性一区| 国产人妻一区二区三区欧美毛片| 久久黄色网址| 日本大片日本一区二区免费高清| 欧美性爱十八禁| 久操com| 久久久久久久久久久免费精品| 国产精品播放| 久久久啊啊啊| 97视频播放| 夜夜国自区| 97欧美色综合| 操逼无毒无码免费视频| 龙兴卡官方查询| 亚洲精品一区二区免费在线观看| 大香蕉在线视频重口味毛片在线| 亚州成人A√| 国产人伦精品一区二区三区| 亚州操操穴网| 久久精品视频久久久| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 国产精品扒开腿做爽爽爽视频| 久久精品导航| 91狠狠综合久久| 久久久久久999| 97在线免费看视频| 国产精品福利视频| 在线视频 亚洲精品| 水多多映视AV| 国产兽交视频在线播放| 国内精品a| 亚洲囯产精品女人久久久| 香蕉久久AⅤ...| 户外裸露刺激视频第一区| 人看人人摸人人操| 四色永久成人网站| 欧美天天插| 欧美色图片91| 夜夜操中文字幕| 色偷偷2020免费视频播放| 99热婷婷一区二区三| 999精品乱码| 强奸抽插av| 日韩精品人妻一| 激情五月天丁香社区| 天天日天天爽| 宗合情欲网| 熟妇激情| 91亚洲欧洲| 日日操免费视频| 懂色AV蜜臀无码精品APP| 国产超碰在线| 久久的网站啊啊啊啊啊| 韩日巨乳美女免费视频在线观看| 成人资源中文字幕在线观看| 好属操| 欧美色视频在线| 国产67194| 夜夜狼人妻| 中文字幕免费看| 亚洲色人| 中文字幕狠狠玩| 九九毛片这里只有精品| 成人精品一区二区三区| 91精品久久久久| 在线观看一级α片刺激高潮视频| 亚洲一卡2卡3卡4卡乱码网站| 91麻豆天美国产欧美| 女人的天堂大香蕉网| 偷拍盗拍亚洲色图图片 | 嗯~啊~快点 死我视频| 色阁阁AV综合网| 欧美狠狠干| 五月婷婷丁香中文字幕| 国产视频一区二区在线| 玖色av| 国产一级高跟丝袜| 国产女人高潮视频| 人妻喷水| 中国一级特黄大片护士| 久久久久久夜夜夜夜夜| 中文字幕精品三级久久久| 免费看片黄| 成人欧美一区二区三区黑人一| 日日干男人的天堂| 操逼操逼操| 国产成人网站在线观看| 久久99草| 丁香九月 婷婷| 色第一页| 欧洲小说色图视频另类| 欧洲精品二区| 精品中文字幕一区二区l - 百度| 青青11操操操操操操操操| 十八禁电影伊人网| 97在线视频观看网站| 久热色情精品| 精品无码少妇| 亚洲AV无码国产成人| 久久精品中文| 欧美一级A片不卡视频。| 欧美激情视频一区二区三区不卡| 婷婷激情四射| 99精品网| 九久久精| 丁香六月激情| 国语精品对白| 五月丁香色色网| 九九九成人| 国产精品老师| 90后后入| 六月丁香婷| 亚洲综合嫩| 久久思思热| 九九九国产| 五月丁香激情综合| 欧亚日韩中文在线| 猛交交| 91社区伊人| 美女啊啊啊啊pc| 3PAV乱伦视频| 天天日天天射天天干| 国产亚洲精品一区二区三区| 色诱中文字幕| 青娱乐欧美激情一区二区| 四虎免费看黄| av在线一区二区三区| 99福利社| 中文字幕一区av| 啊啊啊操死我| 青青草伊人久久| 性在久久久久久| 亚洲男人天堂2| 九月婷婷| 91肉片| 大乔未久88一区| 欧美一级做a爰片免费视频| 97操B| 欧美日韩免费专区在线| 久久欲| 啊啊啊在线看| 亚洲不卡AV在线| 亚洲日韩av专区无码| julia中文字幕在线观看| 欧美性爱一级操| 97资源站日韩| 撸撸成人在线视频| 日韩性爱电影一区| 超碰2017| 久久99草| 亚洲精品一区中文字幕乱码| 亚洲欧洲中文日韩女优乱码| 黄色不卡视频| 欧美色亚洲| 亚州色图狠狠干| 日本免费专区| 欧美熟妇色| 精品十三区| 国产免费一区在线观看| 青娱乐999| 蜜桃精品一区二区三区久在线| 99热久| 国产日韩精品suv| 青青操视频在线| 欧美性爱97超碰| 操逼逼中文字幕| 日韩97| 九9精品| 色女综合| 丁香六月婷| xxxx网站亚洲精品| 黄骗免费网站| 久久精品六区| 国产精品在线网站| 97人妻色| 视频分类 国内精品| 妇女性内射冈站HDWWWCOM| 蜜桃网熟妇| 欲香欲色天天天综合和网| 狠狠操夜夜操蜜桃视频三区| 日本视频在线观看污污污| 97超碰人人模人人拍人人| 夜夜国自区| 麻豆 亚洲 97| 蜜桃中文字日产乱幕4区| 色999亚洲人成色| 乱欲一区二区| 操www| 日本精品999| 美女黄页网站| 97资源站久久| 日韩欧美中文字| 操b网站亚洲无码| 日韩人体偷拍| 俺去也婷婷| 国产 日韩 另类 视频一区爱| 精品国产91av一区二区三区 | 国产女人和拘做爰视频| 日本影视久久免费| 午夜αv| 超碰色图| 欧美综合1性辶| 97超碰影音| 超碰在线1234区| 香蕉色网| 中文熟女五十乱码在线| 91美女視頻| 新视频sss国产| 欧美人妻中出| 青女在线| 亚州九九九精品视频| 性爱AV天堂| 99精品高潮| 91精品人妻啪啪间| 在线情色电影 91大| 久偷拍欧美日韩三区| 超碰天天操| 久久人妻无码毛片A片麻豆| 久久久∴| 日韩色图 一区二区| av网站在线看| 午夜精品久久一区二区| 一级二级在线观看| 久久超碰国产一区二区三区| 超碰在线人妻中文字幕| 视频国产欧美在线播放| 日本黄色精品专区网站| 伊人黄色片| 欧美成人AⅤ大片在线观看| 久久久国产亚洲精品系列| 每日更新AV| 日本岛国黄色网址 | 九九九网站| 屁股久久久久久| 中文字幕精品探花视频| 欧美18 在线观看| 久操网视频| 亚洲AV无码成人精品久久| 久色网| 无码一区二区三区四区五区六区七区八区九区十区视频 | 午夜久久一区二区无码中出| 亚洲综合另类欧美久久久| 神马午夜久久久| 综合性视频99| 九九九九AV| 91搞逼视频| AV免费在线播放一区| 天天天天操| 中文字幕片| 亚洲脚交| 精品久久久久久中文字幕视频免费| 久综合国内精品自在自线| 伊人久久大香大香线蕉中文 | 日韩欧无码一区二区三区免费不卡| 青青免费在线视频一区| 嫖老熟女A片一二三区| 99热免费| 天天舔天天日天天射| 人妻熟女一区二区三区视频| 韩国三级一线观看久| 亚洲精品啪视频| 蜜臀久久久久久999| 亚洲精品骚逼| 色欧美在线| 欧美亚洲素人制服精品| 婷婷丁香五月激情啪啪| 亚州综合电影| 亚洲在线A| 人人操人人色人人摸| 91人妻Pr| 香港日本韩国人妇99www.wccm20| 中文字幕第7页| 国产亚洲精品激情| 久久99热这里只频精品6学生| 97超碰久| 乱欲视频| 综合婷婷| 97爱碰| 久久久久久亚洲Av无码精| 色噜噜人妻丝袜a∨先锋影| 天堂av2019| 日本999精品视频| 久久宗合97| 亚洲高清无毛一区二区| 91精品丝袜在线观看| 神马午夜久久久| 97久久国产| 日韩av不卡在线观看| 色诱avtt| 男人天堂电影院| 桃花色涩综合影院| 欧美大片天天看| 中英熟女操女| julia中文字幕在线观看| 极品白嫩美少妇在地板上位骑射淫水泛滥| 囯产操逼片| 伊人青青草久久| 中文字幕精品探花视频| 色吧综合网| 亚洲久草AV色图| 美女午夜福利免费视频| 国产精品色哟哟| 色色色99| 蜜臀av一区二区三区免费观看| 日韩资源网| 成人小说视频在线精品欧美| 99热97| 东北女人操逼| 亚洲激情网一二三四区| 精产品久久| 色区久久| 欧美双插| 麻豆天美国美国产AV| 2020中文字幕在线观看| 国产激情久久久| 天天干嫩逼网| 99精品久久| 日韩有码专区| 色蜜AV| 99热| AV天堂电影网| 日日夜夜狠狠| 精品人妻久久久| 婷婷五月成人| 天天网综合| 18一区二区三区| 1000部熟女视频在线观看| 久久久999网站| 人人操人人干xxx| 国产精品欧美激在线| 国产成人精品必看| 后入式视频国产自| 女同性恋久久| 婷婷人妻激情| 97超碰国产精品| 久久国产AⅤ| 一本大道综合伊人精品热热| AA特级绝黄| 色亚洲欧美| caopeng97| 免费啪啪av| 中文字幕免费看| 亚洲色偷偷色噜噜狠狠99网| 人人么人人操| 新视频sss国产| www网站黄| 超碰色综合| 麻豆伊人网| 十八禁啪啦拍视频无遮挡| 亚洲小说视频| 伊人久久大香蕉线AV五月天| 免费看A片毛毛片在线播| 色亚洲欧美| 一区麻豆 高清中文字幕| 男人高清无码一区二区| 中国91AV| 日韩精品操少妇| 亚洲中文字幕av| 日韩欧美性爱电影在线观看| 都市激情人妻一区二区青青操视频| 国产美女高潮叫床视频| 91网站18| 亭亭在线资源| 国产久久一区二区午夜| 久久久久久69国产一区二区| 91制服丝袜| 国产成自自拍在线观看| 激情五月丁香五月| 在线有码中文字幕| 亚洲激情欧美色图| 色九月综合| 久久色情| 亚洲导航深夜福利| 国产精品96久久久久久| 91久久国外网| 中文字暮97| 无码日韩网站| 伊人丁香五月婷婷| 中文字幕激情小说| 日韩欧美中文字| 精品国产一区二区久久| 我要看免费韩日黄片| 日本1区2区不卡视频| 男人久久天堂| 精品人妻一二三四区视频| 伊人五月天青青草婷婷| 91精品免费| 久操99| 亚洲精品99| 女人双腿搬开让男人桶| 人人干黄色| 97碰| 国产三级片在线观看| av日韩中文字幕| 亚洲鸥美色图| 国产精品久久久久久久久久久久久久久久久久 | 中文字幕精品资源在线| 无码直播久久久| 国产捆绑一区| 久久精品国产亚洲粉嫩| 亚洲 欧美 综合 91| 嗯嗯啊好大| 亚洲国成人情色好看电影| 91大胆欧美| 99精品久久| 秋霞视频一区二区 | 午夜一区| 超碰吊日色| 99超碰网| 国产精品久久久午夜夜伦鲁鲁| 9999九九九久久久| 999综合色| 三级网站超变态精品| 中文字幕乱碼在线| juliaann精品熟女一区| 久久手机好看网站| 色综合91| 99re9在线| 欧美亚洲激情小说| 欧美天天拍| 禁止观看美女黄| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 精品久久久久黄少妇| 成人影 天天操 亚洲| 男人天堂婷婷五月天校园春色| 久久香蕉国产传媒一区剧情天美| 五月天激情小说| 日本超碰在线国产一区| 免费看毛片操穴| 一本一道人妻久久一区二区三区| 91蜜臀熟女| 欧美一区二区在线资源| 欧美第38页| 干B| 天天日美女的B| 亚洲综人| 色香欲影| 啪啪性爱免费视频| 国产精品熟女九色九色蜜臀|