欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

eladmin后臺系統(tǒng)Redis深度實踐:從緩存配置到分布式鎖與集群部署

eladmin后臺系統(tǒng)Redis深度實踐:從緩存配置到分布式鎖與集群部署 如果你問我后臺管理系統(tǒng)里最容易被低估的中間件是什么我會說Redis。很多團隊把Redis當(dāng)成一個“放Token的緩存庫”就完事了但實際上在eladmin這種基于Spring Boot的后臺管理系統(tǒng)里Redis能承擔(dān)的角色遠(yuǎn)比你想象得多。從用戶登錄態(tài)、驗證碼、在線用戶到字典緩存、分布式鎖、接口限流計數(shù)器再到集群部署后的Session協(xié)調(diào)它幾乎參與了業(yè)務(wù)鏈路的每一層。我最早接手團隊eladmin項目時Redis已經(jīng)配好了但一查監(jiān)控全是問題——key亂碼、緩存不生效、分布式鎖偶爾失效、主從切換后計數(shù)器歸零。這篇文章我把這幾輪踩坑和重構(gòu)的過程完整寫出來包含配置、序列化、緩存注解、分布式鎖、故障處理和部署升級路線適合正在用或準(zhǔn)備用eladmin做二次開發(fā)的朋友參考。先說個結(jié)論eladmin本身自帶一套緩存機制很多基礎(chǔ)代碼里也預(yù)留了Redis的入口但默認(rèn)狀態(tài)下的使用深度遠(yuǎn)遠(yuǎn)不夠。如果你只是把它當(dāng)成“驗證碼臨時存儲”那你既沒發(fā)揮Redis的價值也遲早會在高并發(fā)或集群場景下栽跟頭。接下來我按實際項目推進的順序來講。1. eladmin為什么需要Redis從登錄態(tài)到緩存的架構(gòu)動因1.1 eladmin原生架構(gòu)下的存儲瓶頸eladmin的默認(rèn)設(shè)計里用戶認(rèn)證走的是JWT也就是服務(wù)端簽發(fā)一個Token前端每次請求都帶上后端通過攔截器解析鑒權(quán)。好處是服務(wù)端無狀態(tài)但問題也很明顯Token一旦簽發(fā)服務(wù)端沒法主動讓它失效。你改了用戶權(quán)限、禁用了賬號、踢了下線只要Token沒到期用戶依然能訪問接口。這是我在實際項目里最痛苦的體驗之一。解決思路很簡單把Token的狀態(tài)存到Redis里。用戶登錄后生成一個會話KeyJWT信息、用戶基本信息、權(quán)限快照都放進去鑒權(quán)時先查Redis里的“會話是否還在”。這樣賬號禁用、權(quán)限變動、強制下線都能實時生效。eladmin的登錄邏輯本身是基于在線用戶管理的如果配合Redis做會話存儲整個認(rèn)證鏈路的可控性會提升一個檔次。1.2 Redis在eladmin里的四種典型角色我把Redis在一個成熟eladmin項目里承擔(dān)的工作分成四類緩存層字典數(shù)據(jù)、部門樹、角色權(quán)限、菜單、系統(tǒng)配置項這類讀多寫少的數(shù)據(jù)全部放進Redis降低數(shù)據(jù)庫壓力。會話與臨時數(shù)據(jù)登錄Token、驗證碼、短信驗證碼、文件上傳分片信息、導(dǎo)入導(dǎo)出的臨時文件索引。分布式協(xié)調(diào)定時任務(wù)防重執(zhí)行、庫存扣減、操作冪等、分布式鎖。計數(shù)器與限流登錄失敗次數(shù)統(tǒng)計、短信發(fā)送頻率控制、接口調(diào)用頻控依賴Redis的原子自增操作。這四類場景在eladmin里幾乎都能找到對應(yīng)的業(yè)務(wù)入口。你會發(fā)現(xiàn)Redis在后臺系統(tǒng)里不是“可選項”而是“基礎(chǔ)設(shè)施”。1.3 引入Redis前后的一次對比我團隊當(dāng)時做了一個很小的壓測同樣的字典查詢接口數(shù)據(jù)庫直連查詢平均12ms命中Redis緩存之后平均0.8msQPS從900左右升到接近7000。這個差距在單機環(huán)境不明顯但一旦上了集群、數(shù)據(jù)量上來緩存層的存在就是生死線。而且Redis本身是單線程模型IO多路復(fù)用性能非常穩(wěn)定配合Spring Boot Cache抽象層幾乎不用在業(yè)務(wù)代碼里寫很重的緩存邏輯。提示eladmin的依賴?yán)锲鋵嵰呀?jīng)引入了spring-boot-starter-data-redis但很多分支版本沒有把序列化器配好。第一步不是寫業(yè)務(wù)而是把RedisTemplate的序列化配置修正否則后面全是亂碼和ClassCastException。2. RedisTemplate序列化配置接入eladmin的第一個分水嶺2.1 默認(rèn)JDK序列化帶來的亂碼問題我見過太多eladmin項目Redis里長這樣一堆以\xAC\xED\x00\x05t...開頭的keyvalue用Redis Desktop Manager打開全是亂碼。這是因為Spring Boot默認(rèn)的RedisTemplate用的是JdkSerializationRedisSerializer它會把對象序列化成二進制字節(jié)不僅肉眼不可讀還會因為類結(jié)構(gòu)變化導(dǎo)致反序列化失敗。另外JDK序列化會附帶大量類元信息一條簡單的用戶緩存可能膨脹到幾KB內(nèi)存浪費嚴(yán)重。這在開發(fā)階段還能忍上了生產(chǎn)就是事故。比如你發(fā)版時改了實體類的字段舊緩存的二進制流反序列化直接拋異常緩存層級崩潰數(shù)據(jù)庫瞬間被打爆。2.2 用GenericJackson2JsonRedisSerializer做全局序列化eladmin的RedisConfig應(yīng)該重寫兩個BeanRedisTemplate和StringRedisTemplate。核心思路是key序列化用StringRedisSerializer保證可讀性。value序列化用GenericJackson2JsonRedisSerializer把對象轉(zhuǎn)成JSON字符串存儲兼容性好且能通過class字段保存類型信息反序列化時不丟類型。hash的key和value也分別指定序列化器。一個我實際在用的配置如下Configuration public class RedisConfig { Bean public RedisTemplateString, Object redisTemplate(RedisConnectionFactory factory) { RedisTemplateString, Object template new RedisTemplate(); template.setConnectionFactory(factory); // key 使用 String 序列化 StringRedisSerializer stringSerializer new StringRedisSerializer(); GenericJackson2JsonRedisSerializer jsonSerializer new GenericJackson2JsonRedisSerializer(); template.setKeySerializer(stringSerializer); template.setHashKeySerializer(stringSerializer); template.setValueSerializer(jsonSerializer); template.setHashValueSerializer(jsonSerializer); template.afterPropertiesSet(); return template; } }這里有個細(xì)節(jié)GenericJackson2JsonRedisSerializer默認(rèn)會把類型信息寫在JSON的class字段里。如果你緩存的對象里有接口類型、父類引用或者泛型反序列化時這一手非常關(guān)鍵。但它也不是萬能的遇到LocalDateTime這類Java 8時間類型時容易出問題一個常見的坑是序列化后變成數(shù)組格式。我在eladmin里處理這種場景時會在ObjectMapper里注冊JavaTimeModule并調(diào)整日期序列化的格式避免前后端解析不一致。2.3 緩存key的設(shè)計規(guī)范序列化只是第一步key的命名同樣重要。Redis是鍵值存儲沒有表結(jié)構(gòu)約束key設(shè)計是否規(guī)范直接決定后續(xù)運維的體驗。我在eladmin里定的規(guī)范是業(yè)務(wù)域:模塊:唯一標(biāo)識例如auth:token:{userId}用戶會話sys:dict:{dictName}字典緩存sys:dept:tree部門樹緩存lock:task:{taskName}定時任務(wù)的分布式鎖這樣用Redis Desktop Manager或者命令行SCAN匹配前綴時非常清晰也能通過命名空間做批量清理。另外key盡量短一些能用ID就不拼長字符串節(jié)省內(nèi)存也提高查詢效率。2.4 配置完成后的最小驗證配置改完后不要急著寫業(yè)務(wù)先做一個最小驗證SpringBootTest public class RedisTest { Resource private RedisTemplateString, Object redisTemplate; Test public void test() { redisTemplate.opsForValue().set(auth:token:1, hello-redis); Object value redisTemplate.opsForValue().get(auth:token:1); System.out.println(value); } }跑通這一步再去Redis客戶端看key是否可讀、value是不是JSON字符串。如果看到類似hello-redis的文本內(nèi)容就說明序列化配置生效了。提示不要用RedisTemplate直接存泛型對象比如ListUser如果JSON里只存了class到List內(nèi)部元素類型容易丟失。穩(wěn)妥做法是自定義一個帶類型包裝的DTO或者用redisTemplate.opsForValue().set(key, JSON.toJSONString(list))配合反序列化手動指定類型。3. 緩存注解和RedisUtils兩種緩存方式的邊界3.1 Cacheable適合哪些業(yè)務(wù)eladmin里大量使用Spring Cache的注解緩存比如Cacheable、CacheEvict。注解方式的好處是侵入性小業(yè)務(wù)代碼里不用手寫存取邏輯。適合以下幾類字典類型列表按類型名緩存。部門樹、菜單樹按用戶ID緩存。系統(tǒng)配置項按配置鍵緩存。角色權(quán)限集合按角色ID緩存。一個典型例子Cacheable(value sys:dict, key #type, unless #result null) public ListDictDetail getDictDetails(String type) { // 數(shù)據(jù)庫查詢 }這樣第一次查詢后結(jié)果進入Redis后續(xù)請求直接命中緩存。但注解緩存有幾個隱藏問題我后面還會講失效時間不好精細(xì)控制、緩存擊穿場景下注解幫不上忙、更新時機容易亂。3.2 eladmin里的RedisUtils手動緩存eladmin原生的RedisUtils工具類是非常實用的封裝它把常用的set、get、delete、exists、expire都包了一遍并在設(shè)置值時自動指定過期時間。對于簡單的數(shù)據(jù)我建議直接用這個工具類而不是每個地方都寫redisTemplate.opsForValue().xxx()。手動緩存適合以下場景數(shù)據(jù)短生命周期比如登錄驗證碼5分鐘有效。需要精細(xì)控制過期時間。緩存數(shù)據(jù)需要在業(yè)務(wù)中頻繁更新比如在線用戶狀態(tài)。數(shù)據(jù)緩存與數(shù)據(jù)庫更新之間需要手動維護一致性注解方式很難表達“先改庫再刪緩存”的順序。舉個eladmin里的實際例子登錄成功之后把用戶信息塞進Redis設(shè)置30分鐘過期每次請求時刷新過期時間實現(xiàn)“滑動續(xù)期”。這個需求用Cacheable做不到因為注解緩存不支持動態(tài)刷新TTL但RedisUtils可以輕松完成。3.3 緩存更新機制優(yōu)先刪而不是更新這是我吃了虧才明白的道理。很多人寫完緩存后想當(dāng)然地認(rèn)為數(shù)據(jù)庫更新后把Redis值也更新就好了。但緩存更新的路數(shù)很多組合方式容易出錯。比如先更新數(shù)據(jù)庫還是先更新緩存、失敗了怎么辦、并發(fā)下會不會讀到舊值。eladmin業(yè)務(wù)里我統(tǒng)一采用“先更新數(shù)據(jù)庫再刪除緩存”的策略。下一請求發(fā)現(xiàn)緩存未命中再回源數(shù)據(jù)庫重建緩存。這個策略在大多數(shù)讀多寫少的后臺系統(tǒng)里足夠用而且天然避免了“寫緩存失敗導(dǎo)致數(shù)據(jù)不一致”的問題。刪除緩存這個動作本身也是冪等的就算刪晚了也只是多一次數(shù)據(jù)庫查詢。3.4 字典緩存的完整案例以eladmin的字典模塊為例它的查詢頻率很高但字典數(shù)據(jù)基本穩(wěn)定。如果每次查字典都走數(shù)據(jù)庫查詢接口響應(yīng)會受DB性能影響。我的處理方式啟動時預(yù)熱項目啟動后調(diào)用一次字典查詢接口把常用字典寫進Redis。查詢時先查緩存命中直接返回。后臺編輯字典后調(diào)用刪除緩存接口保證下次查詢回源。這里有一個細(xì)節(jié)分頁查詢的字典列表不適合直接整體緩存因為分頁排序條件太多緩存命中率低還會造成緩存key爆炸。我只對“按字典名稱查詢所有明細(xì)”這種固定場景做緩存列表頁不緩存Excel導(dǎo)出也不緩存。緩存不是越多越好命中率低的緩存不僅浪費內(nèi)存還增加了維護成本。4. 分布式鎖從緩存組件到協(xié)調(diào)組件4.1 為什么單機鎖不夠eladmin里的定時任務(wù)、庫存扣減類操作在單機部署時用Synchronized或ReentrantLock沒問題。但項目上了集群同樣的定時任務(wù)會在每個節(jié)點各執(zhí)行一遍造成重復(fù)數(shù)據(jù)。比如定時同步訂單狀態(tài)如果兩臺機器同時跑數(shù)據(jù)庫可能被更新兩次產(chǎn)生臟數(shù)據(jù)。單機鎖只對本進程生效這時就需要一個跨進程的鎖分布式鎖。Redis實現(xiàn)分布式鎖是最常見的方案因為它本身是共享存儲所有節(jié)點都能訪問且提供了原子操作。4.2 用Redis手寫一個可用的分布式鎖最簡單可靠的方案就是基于SET key value NX EX seconds這個命令能同時保證“key不存在才設(shè)置”和“過期時間自動設(shè)置”。用RedisTemplate實現(xiàn)如下public boolean tryLock(String key, String requestId, long expireSeconds) { // NX: 不存在才設(shè)置 EX: 設(shè)置過期時間 // 注意 SET_IF_ABSENT NX, SET_ABSENT_TIME EX Boolean result redisTemplate.opsForValue() .setIfAbsent(key, requestId, Duration.ofSeconds(expireSeconds)); return Boolean.TRUE.equals(result); } public boolean releaseLock(String key, String requestId) { // 使用Lua腳本保證“校驗持有者再刪除”是原子操作 String script if redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end; DefaultRedisScriptLong redisScript new DefaultRedisScript(script, Long.class); Long result redisTemplate.execute(redisScript, List.of(key), requestId); return Long.valueOf(1).equals(result); }這里有兩個關(guān)鍵點requestId可以是UUID是鎖持有者的唯一標(biāo)識。釋放鎖時必須校驗這個標(biāo)識防止“自己不持有的鎖被自己刪掉”。用Lua腳本包裹“檢查-刪除”操作保證原子性。如果拆成兩步可能在GET之后、DEL之前鎖到期被另一個線程搶走然后你把別人的鎖刪了。4.3 鎖的續(xù)期問題和Redisson選擇手寫鎖有個麻煩業(yè)務(wù)執(zhí)行時間超過鎖的過期時間怎么辦比如加鎖時設(shè)了30秒但業(yè)務(wù)跑了40秒鎖自動釋放另一個線程進來了。解決思路是續(xù)期——在鎖即將到期但業(yè)務(wù)還沒結(jié)束時自動延長過期時間。這個邏輯很煩不建議手寫。我在這塊直接引入了Redisson它內(nèi)置了看門狗機制默認(rèn)鎖續(xù)期到30秒每10秒檢查一次業(yè)務(wù)沒結(jié)束就自動續(xù)期業(yè)務(wù)結(jié)束就釋放鎖。代碼反而簡單很多RLock lock redissonClient.getLock(lock:task:syncOrder); boolean isLocked lock.tryLock(3, 10, TimeUnit.SECONDS); if (isLocked) { try { // 業(yè)務(wù)邏輯 } finally { lock.unlock(); } }引入Redisson的代價是加一個依賴和一點內(nèi)存但省去了自己處理續(xù)期、重入、異常釋放的雜活。eladmin里如果已經(jīng)有Redisson依賴優(yōu)先用它的tryLock如果沒有手寫一個簡單的也夠用。提示手寫鎖務(wù)必設(shè)置過期時間絕不能只用setIfAbsent(key, value)不帶過期時間。一旦分布式鎖的key沒有過期時間而持有鎖的服務(wù)宕機這個鎖就永遠(yuǎn)解不開了下游業(yè)務(wù)全部卡死。4.4 鎖定在eladmin里的實際場景我在eladmin里落地分布式鎖最多的場景是定時任務(wù)。eladmin有定時任務(wù)管理模塊可以動態(tài)啟停任務(wù)但任務(wù)本身可能被多個節(jié)點同時觸發(fā)。處理方式任務(wù)執(zhí)行入口先嘗試獲取鎖。搶到鎖的節(jié)點執(zhí)行任務(wù)沒搶到的節(jié)點直接跳過。執(zhí)行完成后主動釋放鎖。另外批量導(dǎo)入導(dǎo)出、文件分片合并、訂單狀態(tài)機轉(zhuǎn)換這類場景也需要鎖。核心思路是凡是“多實例下同一時間只允許一個執(zhí)行”的操作都值得用分布式鎖。5. 緩存三大故障現(xiàn)場穿透、擊穿、雪崩的解決實錄5.1 緩存穿透不存在的key瘋狂打庫eladmin里權(quán)限校驗接口如果被惡意刷每次都會攜帶一個不存在的用戶ID查數(shù)據(jù)庫Redis里始終沒有緩存數(shù)據(jù)庫壓力直線上升。這種查詢一個“必然不存在的數(shù)據(jù)”的現(xiàn)象就是緩存穿透。最常用的兩個辦法緩存空值查詢結(jié)果為空也寫緩存設(shè)置一個較短的過期時間比如60秒這樣后續(xù)相同Key不會打到DB。但要注意空值過多會占用內(nèi)存需要設(shè)置過期時間。布隆過濾器把所有合法的用戶ID加載到布隆過濾器查詢前先判斷ID是否存在不存在直接返回。適用于ID集合較小且相對固定的場景。我在eladmin里處理驗證碼校驗接口時用的就是緩存空值方案驗證碼錯誤就緩存一個錯誤標(biāo)記過期時間比驗證碼本身還短。這樣既保護了數(shù)據(jù)庫又不會影響正常用戶的重新發(fā)送。5.2 緩存擊穿熱點key瞬間過期打崩DB緩存擊穿和穿透容易混淆擊穿指的是某個熱點key在過期瞬間大量并發(fā)請求同時回源數(shù)據(jù)庫。比如eladmin的系統(tǒng)配置緩存如果剛好在零點過期所有請求都去查數(shù)據(jù)庫一次就夠數(shù)據(jù)庫喝一壺。解決手段通常有兩種互斥重建用分布式鎖包住回源邏輯只允許一個線程回源數(shù)據(jù)庫寫緩存其他線程等待緩存重建完成。缺點是鎖等待會增加接口耗時。邏輯過期緩存中不設(shè)置物理過期時間而是存一個邏輯過期戳。查詢時發(fā)現(xiàn)戳已經(jīng)過期就異步重建。優(yōu)點是接口永遠(yuǎn)有數(shù)據(jù)可返回但實現(xiàn)稍復(fù)雜。在eladmin的字典緩存里我采用的是折中方案熱點key的物理過期時間拉長到小時級后端修改字典后通過ActiveMQ或者直接調(diào)用刪除緩存接口來維護一致性避免“自然過期”引發(fā)擊穿。這個方案簡單但依賴“刪除操作必須可靠”。5.3 緩存雪崩大量key同一時刻失效雪崩和擊穿的區(qū)別在于影響范圍。雪崩是大批key在同一時間過期或者Redis服務(wù)整體不可用導(dǎo)致數(shù)據(jù)庫瞬間被沖垮。解決辦法我總結(jié)三條過期時間加隨機抖動比如基礎(chǔ)過期時間300秒實際設(shè)置時加一個0到60秒的隨機數(shù)避免同一秒集體失效。eladmin里的緩存工具類我已經(jīng)統(tǒng)一封裝了這個邏輯。多級緩存配合Redis之上加一層本地緩存Caffeine本地緩存失效再查RedisRedis失效再查DB。這樣即使Redis短時間不可用本地緩存還能扛一部分。Redis高可用部署主從加哨兵或者Redis Cluster避免單點故障。這個我放在第6節(jié)詳細(xì)講。5.4 曾經(jīng)踩過的坑INCR在分布式環(huán)境下的“不準(zhǔn)”熱詞里有一條“redis incr不準(zhǔn)”我在eladmin里也遇到過。場景是短信驗證碼發(fā)送頻率限制Long count redisTemplate.opsForValue().increment(limit:sms: phone); redisTemplate.expire(limit:sms: phone, 60, TimeUnit.SECONDS);這段代碼在單機Redis下沒有問題。但在主從架構(gòu)下主機自增后同步給從機如果主機宕機、從機頂上自增的值可能丟失或重復(fù)導(dǎo)致計數(shù)不準(zhǔn)。解決方案有幾個使用Redis Cluster的單一分片鎖住key的哈希槽保證只有一臺機器處理該key。頻率限制場景可以接受誤差時改成SETNX 過期時間判斷邏輯?;蛘咴赗edis事務(wù)Pipeline中執(zhí)行減少錯誤概率。另外INCR和EXPIRE是兩個獨立命令如果想讓key自動過期最好用Lua腳本把兩個操作包起來保證原子性否則極端情況下可能key永不過期計數(shù)累加超過預(yù)期。提示eladmin的接口限流功能如果用了IP計數(shù)千萬不要用get再set的復(fù)合操作必須用原生INCR。兩步操作在并發(fā)下會丟失增量計數(shù)這是非常隱蔽的一類bug。6. 從單機到集群eladmin上線后的Redis部署升級路線6.1 單機版夠用嗎開發(fā)環(huán)境和日活幾千的小項目單機Redis完全夠用。eladmin這種后臺系統(tǒng)數(shù)據(jù)庫字段多、接口讀寫比例高單臺8G內(nèi)存的Redis實例支撐幾百個并發(fā)是沒問題的。但是單機的問題在于故障域。Redis宕機所有緩存全部失效數(shù)據(jù)庫被瞬時打滿整個系統(tǒng)雪崩。而且一臺機器上Redis進程如果OOMRedis會直接拒絕寫入進而影響所有依賴Redis的業(yè)務(wù)。因此正規(guī)一點的項目都會考慮主從。6.2 主從加哨兵怎么配更穩(wěn)主從模式解決的是“單點故障”哨兵解決的是“自動故障轉(zhuǎn)移”。我在eladmin生產(chǎn)環(huán)境用的一主二從加三哨兵架構(gòu)主節(jié)點負(fù)責(zé)讀寫。從節(jié)點負(fù)責(zé)讀擴展和備份。哨兵監(jiān)控主從狀態(tài)主節(jié)點宕機后自動從從節(jié)點選舉出一個新主節(jié)點修改客戶端配置的地址指向新主節(jié)點。Spring Boot里配置Sentinel模式的地址很簡單spring: data: redis: sentinel: master: mymaster nodes: - 192.168.1.10:26379 - 192.168.1.11:26379 - 192.168.1.12:26379注意哨兵模式下應(yīng)用連接的是哨兵地址而不是Redis節(jié)點地址。哨兵會告訴你當(dāng)前可寫的主節(jié)點是誰。這塊如果配錯應(yīng)用會一直連不上Redis日志里反復(fù)報Connection refused。主從復(fù)制還有一個核心點需要注意replica-read-only建議設(shè)置為yes。從節(jié)點只做讀寫操作全部走主節(jié)點否則可能會發(fā)生數(shù)據(jù)不一致。6.3 什么時候值得上ClusterRedis Sentinel解決的是“故障轉(zhuǎn)移”但單節(jié)點的內(nèi)存容量上限還在。當(dāng)緩存數(shù)據(jù)量大到單節(jié)點內(nèi)存裝不下或者寫入并發(fā)超過單實例上限時就該考慮Redis Cluster。Cluster采用分片存儲每個key根據(jù)CRC16算法映射到16384個哈希槽中的某一個然后哈希槽分配給不同節(jié)點。好處是容量和性能都線性擴展壞處是配置復(fù)雜、客戶端要支持Cluster模式且Redis Cluster不支持多key操作除非這些key在同一個Hash標(biāo)簽下。eladmin項目的緩存體量通常到不了Cluster的規(guī)模但如果未來做多租戶、數(shù)據(jù)量暴漲可以提前把key的Hash Tag設(shè)計好比如把所有需要一起操作的key都加上{user:1}這樣的Hash前綴確保它們落在同一個槽里。這個設(shè)計越早做越省事。6.4 Docker部署Redis時的常見錯誤很多團隊用Docker部署Redis熱詞里提到的“docker search redis request returned 500 internal server error”我碰到過多次。這個報錯通常是Docker Desktop的引擎沒起來或者API版本不兼容解決辦法是重啟Docker Desktop或者檢查Docker引擎的版本。真正進入docker pull redis階段之后還需要注意掛載持久化目錄比如/data防止容器重啟后數(shù)據(jù)丟失。指定Redis密碼和配置文件不要用默認(rèn)無密碼的配置。如果宿主機和Redis容器不在同一網(wǎng)絡(luò)需要注意防火墻和端口映射。用Docker Compose部署一主二從加哨兵集群是本地復(fù)現(xiàn)和學(xué)習(xí)的好方式比手動敲命令省心很多。但這個更多是運維話題本文就不展開了。7. 體檢清單慢查詢、大key和熱點key的排查手段7.1 Redis慢查詢?nèi)罩驹趺纯碦edis的慢查詢?nèi)罩竞蚆ySQL的slow query log思路類似。配置項slowlog-log-slower-than設(shè)置超時閾值單位微秒slowlog-max-len設(shè)置日志條數(shù)。執(zhí)行SLOWLOG GET可以查看最近慢查詢命令。eladmin的緩存基本都是小Key很少有長命令但如果有KEYS *這類命令出現(xiàn)在慢查詢里基本可以斷定代碼有問題。Redis是單線程的一個耗時的KEYS命令會阻塞所有客戶端響應(yīng)線上絕不能執(zhí)行。我見過有人用KEYS auth:token:*來批量清理用戶會話導(dǎo)致Redis卡了幾秒所有依賴緩存的接口全部超時。正確做法是用SCAN游標(biāo)遍歷分批次刪除。7.2 大key是隱藏的內(nèi)存炸彈大key通常指value特別大的key比如一個Hash里塞了幾十萬個字段或者一個String存了幾MB的數(shù)據(jù)。大key會導(dǎo)致Redis內(nèi)存碎片增加、刪除/序列化耗時變長還會在主從復(fù)制時造成網(wǎng)絡(luò)帶寬壓力。在eladmin里最常見的兩個大key場景緩存的用戶權(quán)限集合沒有控制大小一個超管用戶的權(quán)限菜單串成一個大JSON。字典緩存把所有數(shù)據(jù)一股腦塞進一個key而不是按類型拆分。排查手段用redis-cli --bigkeys它會掃描找出大key并給出類型和建議。治理方式很直接大key拆小key、續(xù)期策略調(diào)整、數(shù)據(jù)結(jié)構(gòu)優(yōu)化。比如權(quán)限集合按角色拆分字典按類型拆分。7.3 內(nèi)存淘汰策略的選擇Redis內(nèi)存寫滿后怎么辦配置maxmemory-policy決定了淘汰策略。后臺管理系統(tǒng)里我推薦volatile-lru只在設(shè)置了過期時間的key里淘汰最近最少使用的數(shù)據(jù)。這樣業(yè)務(wù)緩存是“可淘汰”的但正在使用的會話數(shù)據(jù)不會被強制清掉。相比之下allkeys-lru會對所有key做淘汰包括你不想丟的業(yè)務(wù)緩存可能導(dǎo)致關(guān)鍵數(shù)據(jù)意外消失。還有一點maxmemory不要設(shè)成Redis所在服務(wù)器的全部內(nèi)存要留出一部分給操作系統(tǒng)、其他進程防止Redis OOM把整臺服務(wù)器壓垮。我一般給Redis分配機器內(nèi)存的60%-70%左右。7.4 可視化工具和日常巡檢建議命令行工具就是redis-cli圖形化工具我常用Another Redis Desktop Manager和Redis Insight。選工具主要看是否支持連接哨兵、Cluster、SSH隧道。日常巡檢建議做成定時腳本每天掃一遍INFO memory查看內(nèi)存使用率。INFO replication查看主從復(fù)制狀態(tài)確認(rèn)沒有斷連。INFO stats看連接數(shù)和命中率。SLOWLOG GET 50檢查慢命令。這些指標(biāo)配合Prometheus和Grafana可以做到很完善的監(jiān)控但哪怕沒有專業(yè)監(jiān)控系統(tǒng)定時敲一下命令也比完全不看強一百倍。Redis掛了不可怕可怕的是你不知道它什么時候開始變慢、內(nèi)存什么時候開始飆升。結(jié)尾經(jīng)驗這套東西從頭到尾梳理下來我覺得在eladmin里用好Redis的關(guān)鍵只有兩點一是序列化和key設(shè)計必須在一開始就定好規(guī)范這個決定后續(xù)所有緩存代碼的體驗二是把分布式鎖、緩存擊穿、集群部署這些“進階能力”當(dāng)作標(biāo)配去考慮而不是等出了事故再補。我經(jīng)歷過Redis配置亂碼導(dǎo)致生產(chǎn)環(huán)境接口直接500的夜晚也經(jīng)歷過分布式鎖誤刪把定時任務(wù)數(shù)據(jù)弄亂的尷尬。現(xiàn)在已經(jīng)養(yǎng)成的習(xí)慣是任何redisTemplate的讀寫都先問自己“key規(guī)范嗎序列化對嗎過期時間設(shè)了嗎這行代碼在集群下還成立嗎”這四個問題能擋住絕大部分線上事故。希望這篇實踐對正在折騰eladmin的朋友有幫助。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色九九九综合| 99热精品观看| WWW.99热| 永久天堂日本| 激情五月天综合| 婷婷五月丁香成人网| 六月五月久久丁香| 色色综合网。| 天天肏天天肏天天肏| 97人人操人人操人人操人人| 婷婷丁香69精华| 综合久久9| 99九九在线精品热动漫| 五月丁香六月婷| 99热精品少| 色99色| 亚洲色9| 激情综合久久| 亚洲欧州色情在线观看| 9久久久| 五月丁香亭亭操逼| 日本特黄aaaaa| 色播jjjj| www.99热视频| 丁香五月网| 色五月激情五月开心五月| 色情五月天视频网| 婷婷干| 99九九精品| 综合网色综合| 香蕉久久国产AV一区二区| 99er这里只有精品视频| 2050人人操免费工开爱| 久久激情五月天| 色婷婷av在线观看| 超碰在线个人观看| 婷婷社区五月天| 人妻免费网站| 五月天久久网站| 啊v视频在线观看| 思思热在线观看| 深爱五月亚洲| 五月丁香色情| 亚洲中文字幕在线电影| 99这里只有精| 日韩AV大全| www,色婷婷| 五月丁香影院| 久久538| 五月天国产| 丁香狠狠| 99日本视频| 日本久久精品| 99热这里只有精品18| 日本久久人| 热久久精品视频网站| www.狠狠操| 五月天色婷婷激情综合| 丁香九色不卡aaa | 国产裸舞福利资源在线视频| 日韩成人综合| 人妻丰满精品一区二区A片| 色婷婷AⅤ| 色播丁香| 99综合网| 丁香激激情网| www,五月天com| 久久涩视频| 五月丁香大相交| 丁香五月天激情五月天激情五月天激情网 | www.韩日视频| 中文字幕在线免费看线人| 综合五月婷婷| 管管補管管紱| 久久9视频| 色九四色| 欧美日韩中文国产一区发布| 成片免费观看视频大全| 91大屁股精品| 激情内射p| 99国产小视频2013| 天天操天天日天天爱| 色色色热热热| 成 人 色 色| av九九| 色综啪啪| 亚洲日韩操B| 久99久视频| 淫水导航| 狠色狠色狠色狠色狠色网| 狠狠色网| 久久玖玖99| 色婷婷色99国产综合精品| 99热这里只有精品55| 久草五月天电影网| 久久婷婷成人视频| 国产韩日亚洲美州欧亚综合在线| 色五月激情五月开心五月| 亚洲视频色色| 五月丁香爱婷婷深深| 九伊人网| www.久久爱.c n| 日本人人超碰| 伊人高清无码| 蜜臀久久99精品久久久久久酒店| 免费看欧美成人A片无码| 69精品人人人人| 啪色综合| 天堂久久性| 五月丁香六月婷婷在线观看| 婷婷开心五月| 五月丁香婷婷综合网| 五月婷婷丁香在线视频| 久热精品视频| 五月天激情无码| 婷婷激情蜜桃玖玖丁香| 五月天影院婷婷在线观看| 婷婷色播婷婷| 五月丁香久人妻中文| 丁香婷婷五月色成人网站| 色综合五月| 国产肥白大熟妇BBBB视频| 99性视频| 婷婷五月开心中文字幕在线| 青青草蜜臀| 91精品熟女| 天天做天天要天天爱| 成人Av在线大片| 亚洲狠狠婷婷| 91九色在线视频| se.久久视频在线观看| www.色五月.com| 色色色网站| 69精品无码一区二区三区| 超碰狠狠操| 激情欧美丁香五月| 就爱日五月天| 亚洲精品激情| 狠狠 久久| 99热欧| 久9久9热久热| 日韩成人AV在线| 日日夜夜久| 亚洲日本韩国| 五月天婷婷青青| 99re思思久久| 激情五月天99色| 四色 爱 婷婷 精品 亚洲 五月天| 欧美色频| 色碰干| 丁香婷婷深情五月亚洲| 欧美操综合| 日日夜夜综合| 国产欧美大香蕉一区| 管管補管管紱| 91九色超碰| 99热无码精品| 国产精品扒开腿做爽爽爽A片唱戏| 91超碰九色| 狠狠操天天干| 久久伊人五月天| 婷婷综合五月| 九月婷婷久久久| 婷婷五月丁香啪啪| 99热大全在线观看| 久久久99精品免费观看| 激情九九综合网| 9国产在线视频| 欧美久热| 国产毛片精品一区二区色欲黄A片| 99在线观看视频免费| 亚洲无码播放| 色综合播放| 26uuu欧美| 色色综合成人网| 99这里有精品视频| 色 五月婷婷基地| 99燥99日| 九九精品热播| 99 热国产在| av色色国产| 五月婷婷xxx| 久久久这里有精品| 天天开心AV色综合婷婷五月天| 免费看欧美成人A片无码| 99久热这里有精品| 中文字幕成人日韩| 色播五月| 色爱亚洲| 久久视这里只有精品| 久久精品人妻| 久久免片| 秋霞三级色戒| 日韩操女| 熟女人妻一区二区三区免费看| 九九婷婷五月天影视| 九九大香视频| www.zbzhongsen.com| www.99精品视频| 激情5月婷婷| 欧美超级视频97| 人妻视频一区而且二区| 9久久久| 色色亚洲五月天| 九九视频精品在线免费| 婷婷五月草| 26uuu国产| 日逼影音先锋男人资源站| 97色在线观看视频| 婷婷五月天BBw| 五月天大香蕉| 男人天堂 久久| 丁香六月激| 丁香五月色欲| 亚洲国产精品VA在线看黑人| 91久操| 狠狠插狠狠操| 热久久999| 91色五月| 九九亚洲| 操碰99在线视频观看| 99色天堂| 五月丁香六月欧美综合| 天天久久狠狠色综合| 97在线观看| 日韩人妻在线观看| 婷婷免费视频| 久久久久久久久久久久久久久久久精典| 激情视频网址| 猫咪伊人久久| 亚洲色基地| 亚洲瑟瑟精品在线| 大香蕉啪啪啪| 久操b网| 免费97碰碰| 碰人人97| 狠狠干五码| 日日天天干| 五月婷婷日| 天天热夜夜操| 五月婷婷涩涩爱| 婷婷她六月天| 五月激情婷婷在线| 久婷婷婷| 久久狠狠干| 色九九九综合| 婷婷六月天亚州| 五月天丁香网| WWW、日本色丁香co m| 久久久99久久| 色v综合网| 天天综合网~91综合网| 无套内射极品大美女| 97很鲁在线视频| 九九热这里有精品视频| 激情综合久久| 久久久网站| 91青娱乐青青草| 丁香五月婷婷少妇| 婷婷五月天激情文学| 九九视频在线观看视频6| 5月婷婷6月丁香aV| 欧美日韩精品人妻狠狠躁免费视频| 久热这里只精品| 九九99免费理论| 久久久精品99| 亚洲色图五月丁香| 色婷婷丁香| 婷婷五月综合在线| 色色热99| 欧美成人猛片AAAAAAA| 成人羞羞啪啪 全 视频| 日本精品人妻无码77777| 欧美美女国产日韩一区二区久| 色五月天在线观看| 色情五月丁香婷婷网| 人妻久久久久久久 | 国产精品久久久爽爽爽麻豆色哟哟| 综合欧美五月婷婷| 五月色婷婷在线观看| 97 天堂| 99思思在线视频| 狠狠插狠狠操| 久色视频首页| 九九精品免费视频99| 欧美综合五月丁香五月天| 国产精品久久久久9999小说| 丁香五月另类小说| 九九人人自拍| 色九月婷婷综合| 色碰碰| 97干在线视频| 同性gv国产精品一区二区| 99热这里有精品| www.91.com处女在线直播| 久月婷婷| 五月天另类综合网| 青青操成人福利| 夜夜谢天天干| 另类视频一区| 亚洲激情四射色| 色五开心五月五月深深爱| 一区中文字幕电影| 热九九精品| 丁香五月影院| 琪琪色五月婷婷老师| 91精品久久久久久久久 | 欧美久久婷婷| 99婷婷国产最新视频| 五月婷婷片| 色五月天中文字幕| 狠狠久久婷婷| 久碰视频| 日韩色色视频| 精品久久婷婷五月天| 久99婷婷色综合| 日韩五月丁香| 亚洲色婷婷色| 月丁香久久久| 97色婷| 婷婷亚洲色| AV操逼网| 五月色综合| 996热re视频精品视频这里| 国产综合丁香五月天| 九九香蕉网| 久久婷婷五月综合色播| 丁香五月综合激情性爱| 精品国产一区二区三区四区阿崩| 五月激情影院| 婷婷香五月| 色婷婷影视| 中文字幕乱码亚洲精品一区| 俺也去在线视频| 99热这里只有精| 亚洲精色| 激情五月开心五月在线视频| 99热精品网| 激情av| 久久久五月婷婷| 色情婷婷。| 婷婷综合五月天| 天天爱天天做天天| 五月天性色| 99超级碰碰| 无码激情AAAAA片-区区| 天天天久久人人人合| 成人av免费观看| 亚洲成AV人片在线观看| 99精品视频在线观看| 成人五月天视频播放| 六月婷婷综合| 丁香五月天天| 任你爽在线视频| 日本一级一级一级一级| 五月天网站免费欧美| 六月丁婷婷| 97碰成超视频免费视频| 91久久久久| 思思热99热| 丁香成人五月天| www.日日日.com| 色月九九| 五月天婷婷激情网| 26uuu成人网| 人人澡玖玖一| 俺去也五月天| 日日夜夜狠狠干| 激情综合4月| 高清成人综合| 激情av网| www.夜夜爱.com| AV中文在线| 996er热| 亚洲色在线观看| 色高清无码视频| 成人做爰A片免费看网站找不到了| 久久九九爽| 99热这里只有精品66| 婷婷综合成人五月天| 激情五月天丁香| 第五婷婷伊人丁香| 任我肏视频精品| 一本大道伊人AV久久综合| 天天干电影| 五月婷婷激情视频| 五月婷婷综合精品| 天天天天色天天天天天干| 午夜理论片最新午夜理论剧 | 激情婷婷| 丁香五月天视频| 五月开心激情| 99re在线观看| 色婷婷五月综合| 九九热啪啪| 激情五月婷婷在线观看| 天天拍天天操| 五月天婷婷AV| 色婷婷五月中文字幕在线dvd| 色婷婷伦理| 深爱五月综合网| 久久狠狠欧美| 开心六月丁香五月婷婷| eeuus五月婷| 那里有AV网址| 五月丁香综合网色欲| 91精品久久久久| 婷婷五月天六点丁香五月| 日韩黄色电影| 五月久久噜噜| 日本一级特黄大片AAAAA级| 九九热青青草| 操比激情五月综合| 色婷婷免费视频| 激情五月天啪啪| 久久99久久99精品免观看粉嫩| 日本免费91| 久久综合伊人77777蜜臀| av无码电影| 黑人无码一区| 久99热在线观看| 任你日视频| 五月丁香激情四射综合| 日韩免费乱轮网站| 丁香五月六月婷婷自拍| 无码人妻一区二区三区免费九色| 久草热视频在线观看| www.天天日| 色五婷婷在线视频| 五月天成人免费视频| 99久超碰| 色5月婷婷| 国产人妻人伦精品一区二区| 成人AV在线中文版| 五月婷婷,六月婷婷| 97色操| 激情AV在线| 久久婷婷六月综合| 九九热这里只有国产精品| 综合五月激情网| 婷婷日日夜夜| 国产色网站| 夜夜躁狠狠| 激情www.98com| 久久九九大香蕉电院| 欧美黄色AA片哗啦啦啦| 天天爽天天摸人妻综合网| 99热这里只有精品9| 棕合影院色色| 中国女人做爰A片| 99视频热99| 一二区成人电影| 六月丁香深深爱综合网| 色久综合天天做视频| 丁香六月激情| 五月天婷婷成人网| 五月丁香婷婷激情四射迷人| 色欲丁香| 色播丁香婷婷五月激情| 9热视频在线观看| 国产成人网站在线观看| 丁香婷婷狠狠97| 精品一区二区三区三区| 99久热这里只有精品视频删减版| 婷婷香五月综合激情| 丁香五月婷婷亚洲色图| 精品一二三区久久AAA片| 精品一区二区三区三区| 久久网站免费亚洲| 色五月婷婷亚洲| 五月激情六月宗合| 婷婷五月天天激情| 激情com| 国产精品VA在线| 天天日天天插| 五月婷婷六月综合| 人人97操| 激情五月天综合图片小说网站| 婷婷五月花丁香| 丁香五月电影| 丁香九月综合在线| 678五月丁香亚洲综合| 色色色色色网| 成人无码髙潮喷水A片| 99久久五月丁香野外| 他改变了拜占庭| 六月婷婷七月丁香| 亚洲综合成人网| 碰99在线| 婷婷久久五月| Av九九| 超碰国产在线| 久久性刺激| 97久久久| 日本色综合| 搡BBBB搡BBB搡18| 91porn一起草| 99久久免费精品| 超碰99热| 9l视频自拍九色9l视频自拍九色9l社区| 丁香六月毛片| 激情五月婷婷综合| 9 99免费视频| 女高怪谈在线观看| 九九九激情综合| 五月婷俺去也| 991精品在线视频| 九久久九精品视频| 色欲日日躁| 大香蕉精品视频| 婷婷五月天大香蕉在线视频观看| 五月天丁香六月综合| www激情| 桃色五月婷婷| 亚洲无码成人网| 99er这里只有精品视频| 婷婷五月丁香六月| 久久一级片| 五月丁香婷婷三级| 琪琪布丁香社区激情五月天| 天天日夜夜高潮| 久久婷综合| 色播五月综合网| 六月婷婷在线| 亚洲传媒在线观看| 九九热区一区二区三区| 国产69久久久欧美黑人A片| 天天久久狠狠色综合| 伊人色综合网| 天天操五月天| 99无码精品| 久热在线观看视频9| 五月婷婷丁香在线视频| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 久色网址| 久9视频| 九九色色色| 另类激情综合| 丁香玖玖视频大全| 日韩黄色电影| 91九色中文字幕女在线观看| 色色五月天丁香婷婷| 久久99看免费| 夜夜大香蕉婷婷丁香| 色婷久| 亚洲第一综合| 在线视频99| 久99久在线| 婷婷五月AV| 九九这里是免费的视频5| 2020日日干| 午夜丁香综合婷婷| 色色五月天丁香| 丁香五月手机在线| 激情四射五月天| 久久久久久久8| 五月婷婷,六月丁香| 九九九九热99超碰| aaa日韩| 丰满少妇乱A片无码| 亚洲综合新99视频| 九九av| 成人色五月天| 久久九九热38| 激情综合色婷婷六月天| 亚洲色色五月天| 91丨九色丨白浆秘| 影音先锋四区| 91精品久久久久久77777| 婷婷五月综合婷婷| 久久激情中文| 九九热在线99| 无码人妻电影| 中文字幕欧美日韩VA免费视频| 五月在在观看| 五月天综合色| 婷婷久久久久| 日日干日日色| 亞洲自怕| 激情 婷婷| 97精品欧美91久久久久久久| 人人操av| 香蕉AV777XXX色综合一区| 婷婷五月天丁香成人社区| 久久伦乱| 五月人人丁香婷婷五月人人丁香| 久久99大| 日本一级特黄大片AAAAA级| 亚洲婷婷在线播放十月| 国产一区二区三区影院| 五月婷在线播放| 久99热在线观看| 26uuu成人网| 亚洲性爱日韩无码| 黄色精品五月婷婷| 久久99国产综合精品免费| 人人人操B超碰| 97偷拍在线视频| AAA久久| 六月天六月婷| www.91在线观看| 99无码视频| 婷婷综合五月天亚洲综合| 男人天堂99| 538在线精品| 欧美综合激情丁香五月六月婷| 九九五月天| 97精品人人A片免费看| 天天狠狠六月婷丁香影院| 成人婷99最新| 另类丁香五月天区图| 色综合中文| 亚洲开心激情网| av最新在线| 开心激情婷婷| 超碰国产在线观看| 婷婷五月天影视| 五月婷婷七月丁香| 97精品人人A片免费看| 99只有精品| 人人爱天天摸摸天天爱| 超级碰碰碰97免费| 99在线精品免费视频| 精品人妻伦一二三区久久| 草美女在线观看视频在线播放| 久久婷婷六月综合综合| 99热亚洲| 六月丁香av| 色人妻五月| WWW,色五月| 黄色91在线观看| 蜜桃人妻无码AV天堂三区| 亚洲色婷婷| 激情久久天天| WWW.天天日| 精品九九网| 亚洲视频一区| 99re思思热久久| 婷婷五月激情视频在线| 久久婷五月综合色| 99久久久久| 97超碰欧美中文字幕| 亚洲中文字幕在线观看| 91五月天| 91九色国产熟女| 婷婷十月丁香| 99热福利| 99热e| 999九九九久久久99HD| 亚洲V国产V欧美V久久久久久| 996热re视频精品视频| 婷婷夜夜操| 五月社区婷婷激情| 91九色视频| 东京热免费视频网站| 啪啪日热| 精品亚洲国产成AV人片传媒| 97在线精品| 91精品久久久久| 操骚货在线| 婷婷精品性性性性性性性| 婷婷的五月天另类视频| 99热大全在线观看| 丁香综合网| 精品综合爱| 亚洲成人丁香花| 亚洲成人影视在线| 强壮公让我夜夜高潮A片视频| 久久只有18视频| 99热主页日本| 日本99在线| 狠狠操天天干| 激情婷婷五月| 日日杆天天| 日韩视频99| va亚洲中文在线| 欧美日本一区二区三区| 免费国产VA国产免费| 丁香九月婷婷| 97色97干| 91seav| 色婷婷免费观看| 五月婷六月| 97黑人精品区| 五月丁香婷婷色色色| 五月久久婷婷丁香| 国产 亚洲 在线| 99ri精品视频在线观看| 色婷视频| 丁香六月天婷婷在线| 亚洲激情亚洲激情 | 五月色色色| 67194成I人在线观看线路1| 婷婷久久五月丁香| 五月婷婷六月丁香| 99热这只有| 99精品视频在线| 26uuu91| eeuss人妻| 亚洲av无码精品色午夜| 色五月AV| 色5月婷婷| 99这里都是精品6| 五月婷天天搞视频| 99看片| 天天久| 狠狠爱五月婷婷| 991国产精选视频在线播放下载| 五月天激情婷婷久久| 综合网五月| 成人电影在线免费试看| 97久久视频| 丁香在线视频| 疯狂做受XXXX高潮A片| 91操黄| 性爱七区| 六月丁香婷| 成人色站,在线视频,看片-SS1AV| 91人人爽人人操| 玖玖资源在线视频| 百度一下国产精品A| 色色色色色九九九九九| 在线观看亚洲AV| 99在线视频精品| 色色综合无码| 天天射夜夜骑| 99视频| 丁香六月啪| 性做爰1一7伦| 欧美人人超级碰| www,五月天激情| 色婷婷五月天激情| 久久精品66| 激情图片五月天| 99热这里有精力| 91操碰| 99色在线观看视频者| 成人啪啪色婷婷久| 色五月xxx| 五月婷婷我| 午夜激情综合| 亚洲精品又粗又大又爽A片| 欧美婷婷九月| 99免费热在线精品| 婷婷丁香人妻天天| 亚洲视频99| 超碰v| 婷婷久久影院| 综合色天天| 久热只有精品| 风流少妇A片一区二区蜜桃| 91精品丝袜久久久久久久久粉嫩| AV伊人青草丁香六月| 日屌日日操日日色| 激情五月久久| 久久182| 涩综合在线| 五月丁香婷婷六月| 狠狠干综合| 丁香六月婷| 婷婷丁香五月激情中文字幕版| 丁香五月影院| 99国产在线精品视频| 欧洲一区二区| 激情丁香五月婷婷啪啪| 色色亚洲无码| 激情综合色婷婷啪啪六月天| 亚洲精品又粗又大又爽A片| 97久久五月丁香婷婷| 春色激情第四色| 伊人婷婷大香蕉| 国产毛片操B| 五月丁香色色网| 激情综合色播| 国产FREESEXVIDEOS性中国| 九九视屏| 久久机热思思热| 极品人妻VideOssS人妻| 亚洲婷婷激情综合激情999精品| 五月婷婷少妇之| 91偷拍视频| 丁香婷婷老司机久操| 五月婷久久| 337p大胆噜噜噜噜噜91Av| 婷婷丁香五月天操逼| 五月丁香婷色| 99热免| 国产又爽又猛又粗的视频A片| 九九亚洲综合| 亚洲va在线∨a天堂va欧美va| 欧美性生交XXXXX无码小说| 五月天激情四射| 99综合网| 久久丁香网| 久婷婷久草| 亚洲热热视频| 激情99热| 新激情五月天天在线网| 国内一级片| 99丁香五月婷| 99久久婷婷| 五月婷婷六月综合| 亚洲丁香五月| 婷婷情色开心五月天99| 欧美日本综合网| 欧美色色色色色| 色一情一乱一乱一区9| 日日狠夜夜狠| 亚洲色无码A片一区二区麻豆| 婷婷色女| 天天插天天插天天插天天插 | 五月激情五月丁香| 狠狠色色| 激情五月婷婷丁香六月| 五月天激情图片| 99视频这里只有免费精品| 思思热精品在线视频| 五月天婷婷基地| 天天色宗合| 激情综合网丁香| 99爱精品| 婷婷五月天无码视频| 99热99色| 亭亭玉立国色天香| 99网| 婷婷激情五月天综合| 色五月色图| 4399在线观看免费高清黄色视频| 天天做天天爽| 六月婷婷最新网址| www久久99com| 九九色中文| 26UUU精品一区二区Com| 91日韩美女被插视频| 久久99久久久久久久噜噜| 91操片| 日操| 激情五月六月婷婷| 久热91| 天天色色天天| 久久婷婷一级片| 成人免费网站免费看| 久久久久久综合88| 亚洲激情视频网| 丁香婷婷五月天在线视频| 色色综合网站| 久在热99| 久久久999精品| 丁香五月天av| 一区二区乱码视频| 国产毛片精品一区二区色欲黄A片| 亚洲视频码| 久久九九综合| 天天综合社区| 天天日天天干天天操| 97超级碰人人| 91丨九色丨高潮丰满日本| 色婷五月丁香久亚洲| 五月丁香婷婷婷激情爱爱| 五月天婷婷AV| 亚洲春色奇米影视| 色天使色婷婷| 激情 婷婷 插| 婷婷五月综合在线| 婷婷日韩| 五月婷婷激情色情网| 超碰人人在线| 无码橾| 深夜A片| 免费观看全黄做爰的视频| 九月婷婷久久久| 天天干天天干天天操| 亚洲精品无AMM毛片| 丁香色婷婷| 欧美日韩成人在线网| 高清a片基地| 丁香桃色综合网| 五月婷av| 久久九九玖玖| 激情开心五月天| 91九九九九九九| www.五月天婷婷姐姐| 五月婷婷六月色| 九九99九九99偷拍视频免费看| 激情五月开心五月丁香五月| 丁香婷婷欧美综合| 五月综合激情图片| 欧洲色色| 99er日韩| 国产成人网址| 99ri国产在线| 婷婷欧美综合| 欧美色九| 玖玖婷婷色五月| 91啪啪啪啪| 国产婷婷五月在线视频| 99欧美精品99日本精品| 亚洲激情视频网| 中文字幕在线免费看线人| 丁香五月六月久久综合 | 久婷婷五月综合欧美| 思思久ren热| 亚洲视频色婷婷| 超碰99热在线观看| 久久日九九| 日日夜夜噜噜爽爽| 久久香蕉网| 免费视频在线观看的网站| Caoub青青超碰| 亚洲色综合性| 五月天丁香婷婷久久九| 久久在线人妻| 人碰人人人玩91| 婷婷五月伦理| 婷婷色狠狠| 这里只有精品2| 国产婷婷久久| 超碰在线综合| 婷婷中文无码| 婷婷色在线| 婷婷五月丁香av网站| 在线播放中文字幕| 婷婷五月成年人| 欧美丰满熟妇BBB久久久| 九九九成人在线视频| 激情五月丁香五月色| 亚洲激情网站| 97精品综合久久内射| 丁香激情五月天| 生活片五区| 婷婷五月天伊人在线| 无码99| 久久99热这里| 激情综合网激情五月婷婷| 丁香五月天天高清在线| 亚洲热久| 色欲av伊人久久大香线蕉影院| 少妇高潮一区二区三区99欧美| 亚洲色婷婷| 精品综合五月| AV在线二十六页| 99国产精品久久久久久久久久久| 久久性爱视频网站| 天天上天天爽| 久久大大香| A久久| 六月婷婷色综合| 一点色成人网| 99re热视频这里只精品| 91碰在线| 五月天亚洲色| 99综合久久| 天天天天操| 思思热久久爱| 香蕉视频91| 99热啪啪| 九九亚洲视频| 激情黄色小说色五月| 色99在线| 婷婷五月在线播放| 99久久婷婷| 91男女视频在线观看| 五月亭亭开心网| 九九熱最新視頻| 丁香五月伊人| 99自拍视频在线| 婷婷色色播五月天| 1024成人在线观看| 图片区 小说区 区 亚洲五月| 免费观看欧美成人AA片爱我多深 | 成人网在线视频| 婷婷五月综合婷婷| www.com在线操视频免费观看| www.婷婷| 色色欧美色色| 婷婷丁香五月亚洲欧美| www.久99| 人妻精品一区二区三区| 五月停停激情网| 色婷婷五月影视| 操操熟女| 99热思思| 成人精品人妻| 综合色色婷婷| 久久曰曰| 俺去婷婷 丁香| 六月丁香五月婷婷| 啪啪婷婷五月天激情| 亚洲另类婷婷五月综合| 国产综合色婷婷精品久久| seav天堂| 激情深爱综合| 亚洲九九婷婷| 久久艹 五月天| 精品久久艹| 五月亭亭直播| 天天爽曰日爽| 玖玖国产视频一区| 91视频久久久| 欧州婷婷五月天综合| 色情婷婷| 丁香六月婷婷久久综合| 开心五月综合激情综合五月| 亚洲综合婷婷| 97人操| 五月丁香色停停啪啪啪| 91热爆在线| 大天天伊人| 久久 视频这里只有精总| 久久在线视频只有这里有精品| 国内一级精品| 婷婷WWW久久| 亚洲视频一区| 成人在线视频网| 国产精品日日躁夜夜躁| www激情com| 先锋资源 996| 丁香婷婷精品视频| 五月丁香福利| 九九视屏| 国产亚洲成AV人片在线| 超碰色碰碰| 国产69久久久欧美黑人A片| 激情五月天综合图片小说网站| 丁香激情合作五月| 久久激情五月网| 色婷婷无吗| 五月婷婷很很色| 嫩BBB槡BBBB搡BBBB| 26UUU精品一区二区| 九九AV在线| 天天干天天拍| 久久丁香五月天| 婷婷日日夜夜| 婷婷开心六月| 五月丁香人人婷婷在线观看| 91操色| 激情五月天婷婷久久久久久久久久久| caop在线| 久热人妻| 91viP在线看| 91视频一起草| 五月婷激情影院| 五月丁香少妇| 婷婷色五月大香蕉在线观看| 伊人五月综合网| 精品九九网| 久久婷婷亚洲无码一起| 艹天天射| 国产免费av在线| 五月天婷综合| 色色色婷婷五月| 日本系列_4页_777FP| 97色片| 久操婷婷| 久久这里只精品66| 亚洲成人色五月天| 九九热在视频| 婷婷激情区| 色五月婷激情| 婷婷五月天堂一本在线| 久久人妻视步| 2025天天日爽| 美女激情综合| 丁香五月综合久久八| 情婷婷五月天在线| www.五月天。com| 天天爽天天做| 天天日天天干天天爽| 久久视频婷婷| 欧美99热| 99综合| 九九爱激情| 久久一操| 97热这里精品在线视频| 99精品久久| www.国产亚洲69ty.久久久久久久久久久久| 99色看这里只有精品| 色五月天成人在线| 五月婷婷开心丁香| 久久玖玖综合| 色五月婷婷久久| 午夜69成人做爰视频| 九九婷婷热| 色涩影院六月丁香| 91啪啪视频| 黄色99网| 婷婷五月天小说网| 无码人妻激情| 婷香五月网在线| 婷婷欧美激情| 日韩久久系列| 久久久婷婷婷| 九月婷婷久久久| 高清无码视频网址| 五月丁香亭亭天天舔| 久去色色| 99热大香蕉| 九九人人看| 麻豆忘忧草午夜| 成人国产欧美大片一区| 久热大香蕉| 五月亭亭开心网| 色五月亚洲开心网| 午夜丁香六月婷| 五月婷五月婷伊人伊人五月婷| 91精产一区三区免费观看| 无毒黄色网址| 精品人妻在线免费观看| 开心激情婷婷| 五月婷婷五月| 日本精品99| 五月丁香六月婷婷久久肏| 色五月女| 色色 9| 日日做夜夜爱| 婷婷激情五月天亚洲综合| 99色啊| 久久久久亚洲A∨成人乱码电影| 久操婷婷| 99在线精品观看99| 亚洲色综合| 九九99精品| 人妻中文在线| 婷婷精品视频| 九九色影院| 91干| 婷婷五月丁香综合亚洲| 99色色爰| 国产1区2区3区在线观| WWW,色五月| 久久婷婷六月天| 色五月丁香五月五月婷婷| 国产亚洲精品人人| 精品九九在线观看| 美女婷婷六月色| 激情婷婷人妻| 五月婷婷中文网| 天天色官网| 免费不卡狠操美女视频网| 色五婷婷开心缴| 狠狠干在线| 玖玖无码中文| 九九精品热| 五月丁香六月激情综合| 天堂成人A片永久免费网站| 日本黄 色 片| 9久热视频| 成人AV中文字幕| 久久综合干| 美女天天艹人人爽| 色综合久久伊伊婷婷五月| 亚洲综合狠狠艹| 五月激情小说网| 日韩色久| 丁香婷婷激情| 五月Huangsewang| 丁香97综合| 9久久久久久久久久久| 色婷婷影视| 天天爽日日搞| 日日操夜夜骑| 欧美综合五月丁香六月婷| 五月丁香色婷婷| 久久综合婷婷激情| 91丨九色熟女丨首页| 99热99在线| 国产综合激情五月久久| 激情综合丁香五月| 激情婷婷五月色| 激情超碰网| www.9797国产| 欧美大奶熟女噜噜噜噜| 天天狠狠色| 91九色在线视频| 色五月成人| 久9热插入| 狠狠色噜噜狠狠狠狠综合| 欧美精品久久久久久视频观看| 99热中文字幕久久| 免费观看亚洲AV片| 成人亚洲精品久久久久| 亚洲无码www| 色五月丁香五月五月婷婷| 婷婷射婷婷舔| 日本五月婷| 婷婷五月综合基地| 色色99| 丁香六月婷婷综合啪啪| 九久9精品| 99热九九九九| 九九这里只有精品在线视频| 天天干天天叉| 激情www| 中文字幕欧美精品久久| 久久99热这里只有精品首| 婷婷六月情| 97碰在线视频| 視频福利乱色| 五月婷婷香蕉| 人人操AV| 亚洲国产网址| 天天摸天天舔天天爽| 日日干日日| www.丁香黄色五月天人与| 99久久9| 无套内射极品大美女| 亚洲第一成人无码A片| 五月丁香福利| 桃色激情网| 99久久九九视频| 在线播放成人网站| 综合久久99| 亚洲综合网在线| 丁香五月,开心五月,成人婷婷| 丁香婷婷深情五月亚洲| www久视频com| 欧美欧盟性爱网| www.五月婷婷.com| 天天肏天天肏| 激情开心五月亚洲| 色五月av| 久久久人妻久久久| 中文字幕AV网址| 九九精品碰| 婷婷色Av| 国产偷人爽久久久久久老妇APP | 99这里精品| 99精品热| 日本免费91| 九九热精品视频| 日韩精品呦呦va| 色播五月丁香综合| 色五月网址| 丁香六月婷婷综合色| 亚洲综合色婷婷| 婷婷内射视频在线| 丁香五月婷婷五月天| 综合久久六月| 日本操B视频| 九九久久偷拍| 久久久久思思热| 影音先锋一区二区资源站| 伊人丁香婷婷东京| 欧美色综合天天久久综合精品| 婷婷五月中文在线| 丁香婷婷影院| 日本在线视频www色| 色综合久久44| 婷婷丁香97| 色色五月天激情| 色五月91| 另类视频在线| 激情婷婷丁香五月天小说| se99视频| 成人va在线观看视频| 超碰91在线| 亚洲在线激情婷婷五月| 婷婷五月天激情网| 五月婷婷和六月| 亚洲熟妇AV乱码在线观看| 99在线看片| 天天干天天av天天射| 日屌日日操日日色| 二级黄色毛片| 91热爆在线|