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

ARTICLE DETAIL

資訊詳情

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

若依分離版去除Redis改造:用內(nèi)存緩存替代Redis的完整實踐

若依分離版去除Redis改造:用內(nèi)存緩存替代Redis的完整實踐 最近在給客戶做若依分離版項目的交付客戶現(xiàn)場是嚴格的內(nèi)網(wǎng)環(huán)境安全審計那邊明確說了除了業(yè)務數(shù)據(jù)庫之外不允許再單獨部署 Redis 這類中間件。結(jié)果一上來就遇到個尷尬場面登錄頁驗證碼轉(zhuǎn)圈后臺日志刷屏“Unable to connect to Redis”。因為這版項目用的是若依分離版RuoYi-Vue默認把驗證碼、登錄 Token 這些關鍵數(shù)據(jù)都存在 Redis 里一旦 Redis 沒起來別說業(yè)務接口連登錄門都進不去。既然環(huán)境不讓用 Redis我干脆研究了一下怎么把這套分離版里的 Redis 徹底摘掉讓應用只依賴 MySQL 也能正常跑。這篇文章把整個改造過程完整記錄一下。核心思路其實很簡單若依的業(yè)務代碼并不直接操作 RedisTemplate而是通過一個叫 RedisCache 的工具類訪問緩存。我把這個工具類保留下來類名包名都不動把底層改成基于 ConcurrentHashMap 的本地內(nèi)存緩存這樣驗證碼、登錄會話、在線用戶這些功能都能繼續(xù)工作業(yè)務代碼幾乎零改動。下面的內(nèi)容會從原理到實操一步步來適合單機部署、演示環(huán)境、內(nèi)網(wǎng)交付的場景想給若依減負的可以照著做。1. 為什么若依分離版離不開 Redis1.1 若依把 Redis 用在了哪幾個關鍵位置先弄清楚 Redis 在若依分離版里到底承擔了什么不然改造的時候容易漏。我將 RuoYi-VueVue2/Vue3 分支邏輯基本一致依次檢查代碼定位到這幾個核心使用點登錄驗證碼獲取驗證碼圖片時生成一個 uuid把驗證碼答案存到 Redis提交登錄時再根據(jù) uuid 從 Redis 讀出答案校驗校驗成功后立即刪掉保證驗證碼一次性有效。登錄用戶會話登錄成功之后后端創(chuàng)建一個 uuid 作為 token把這個 token 作為 key把封裝好的 LoginUser 對象作為 value 存到 Redis前端每次請求攜帶 token后端通過 JWT 過濾器解析出這個 uuid再從 Redis 拉取 LoginUser 完成認證。會話滑動續(xù)期若依對登錄會話默認有 30 分鐘有效期但并不是固定 30 分鐘打死不變而是每次請求都刷新過期時間這也就是常說的滑動過期。這個刷新動作同樣操作 Redis 的過期時間。在線用戶管理管理端的在線用戶列表、強退用戶功能本質(zhì)上是掃描 Redis 里所有 login_tokens: 前綴的 key再把對應的 LoginUser 還原出來展示。除了這四處不同版本可能還有字典緩存、參數(shù)配置緩存、定時任務分布式鎖等二次封裝但最核心、繞不開的就是驗證碼和登錄會話。你可以在 IDEA 里直接全局搜索redisCache.把當前分支下所有調(diào)用點列出來心里先有個底。搞清楚這些之后你會發(fā)現(xiàn)若依的 Redis 依賴其實非常集中。它不像有些項目把一堆業(yè)務數(shù)據(jù)都往 Redis 里塞而是只處理“會話相關”和“校驗相關”的臨時數(shù)據(jù)。這個特點決定了我們后續(xù)用內(nèi)存緩存替換是可行的因為這些數(shù)據(jù)本來就不需要長期持久化重啟丟了也沒關系用戶重新登錄一次就好。1.2 去 Redis 適合什么場景不適合什么場景把 Redis 去掉不是所有情況下都合理先說清楚邊界免得你改完上線后發(fā)現(xiàn)問題又回不來。適合的場景有這么幾類第一類是單節(jié)點部署或者場景上本來就是單機演示、驗收環(huán)境不需要多個應用實例共享會話狀態(tài)第二類是客戶內(nèi)網(wǎng)環(huán)境安全要求嚴格不允許安裝保留無關中間件第三類是部署機器資源緊張希望簡化運維應用啟動后只依賴一個 MySQL第四類是本地開發(fā)調(diào)試不想每次先折騰 Redis 環(huán)境。不適合的場景也很明確多實例部署時內(nèi)存緩存只在單實例內(nèi)有效用戶第一次請求落在實例 A第二次落到實例 BToken 就找不到了會話直接斷掉已有在線用戶統(tǒng)計、強制踢人、多端登錄互斥等依賴 Redis 全局查詢和刪除功能的重度需求簡單替換會破壞這些能力微服務版本RuoYi-Cloud / RuoYi-Cloud-Plus里的 Redis 還承載著服務間緩存、分布式鎖、認證中心數(shù)據(jù)簡單替換會連累一堆功能Plus 系列版本對 Redis 的依賴更深比如 Sa-Token 會話集成、參數(shù)配置實時緩存等也不推薦按本文方式處理。一句話總結(jié)這個方案是給“單機輕量交付”準備的不是給所有若依項目一刀切用的。你只需要根據(jù)自己手上的部署形態(tài)做判斷。我這次客戶是兩臺服務器但只跑一個應用加一個 MySQL完全滿足條件。2. 動手改造前先摸清 Redis 在項目里的落腳點2.1 找到依賴和配置大多數(shù)若依分離版項目里Redis 的接入位置很固定。pom.xml 里有一個 starter 依賴dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependencyapplication.yml 里有一段 spring.redis 配置有的版本用 spring.data.redis看你的 Spring Boot 版本spring: redis: host: localhost port: 6379 password: database: 0 timeout: 10s lettuce: pool: min-idle: 0 max-idle: 8 max-active: 8 max-wait: -1ms這里有一個很容易忽略的點如果項目里用了 Lettuce 連接池pom.xml 可能還有一個 commons-pool2 依賴去掉 Redis 時連這個依賴也要一起清理。不然后續(xù)排查依賴沖突時容易一頭霧水更煩的是明明 Redis 代碼都刪干凈了還是有人往 classpath 里帶進來一堆多余的連接池類。2.2 列一張“緩存白名單”我習慣把項目里所有 Redis 相關的類先拉一張清單再逐個處理。以 RuoYi-Vue 3.8.x 左右的分支為例典型清單如下組件所在位置作用改造策略RedisConfigcom.ruoyi.framework.config配置 RedisTemplate 序列化直接刪除或注釋RedisCachecom.ruoyi.common.core.redis業(yè)務統(tǒng)一操作的緩存工具類保留類名改底層實現(xiàn)CaptchaControllercom.ruoyi.web.controller.common驗證碼生成與校驗入口使用 RedisCache邏輯不動TokenServicecom.ruoyi.framework.web.service登錄用戶會話管理使用 RedisCache邏輯不動CacheConstantscom.ruoyi.common.constant定義 login_tokens、captcha_codes 等 key 前綴保留這張表能讓你清楚地看到真正要改的其實只有 RedisCache其余業(yè)務類只要不直接注入 RedisTemplate都可以不動。所以“替身方案”天然成立。如果你們的代碼里有個別地方繞過 RedisCache 直接注入 RedisTemplate就需要把那些調(diào)用也改掉這是改造時唯一可能漏掉的風險點。搜索的時候建議用兩個關鍵字一個是redisCache.另一個是RedisTemplate。前者是業(yè)務調(diào)用后者是底層橋接。兩個都搜完改動面自然就清楚了。我見過的二次開發(fā)項目里最常見的翻車點就是有人寫了個自定義服務直接 Autowired 了 StringRedisTemplate 去存臨時數(shù)據(jù)這類代碼不搜 RedisTemplate 根本發(fā)現(xiàn)不了。3. 用內(nèi)存緩存寫一個“替身” RedisCache3.1 改造思路類名不變底層換掉為什么要保留 RedisCache 這個類名原因很直接若依整個框架里到處都在注入它驗證碼、TokenService、在線用戶、定時任務刷新等等全部依賴這個類。如果把它刪掉再新建一個 MemoryCache那所有注入點都要改工作量立刻翻倍而且很容易改漏。保留類名和包名只是把類內(nèi)部的 RedisTemplate 操作換成本地 Map 操作外部調(diào)用方一句都不用動這是落盤最穩(wěn)、回歸成本最低的改法。實現(xiàn)“本地內(nèi)存版 RedisCache”要回答三個問題數(shù)據(jù)怎么存過期時間怎么管理以及滑動過期怎么支持。數(shù)據(jù)存儲最自然的選擇就是 ConcurrentHashMapkey 用字符串value 用一個內(nèi)部類型把緩存對象和過期時間包在一起。過期時間管理就是每次寫入時記錄到期時間戳每次讀取時判斷是否過期已經(jīng)過期的當作不存在并順手刪掉也就是常說的惰性刪除?;瑒舆^期這一塊若依的 TokenService 會在每次請求時調(diào)用 expire 方法刷新過期時間所以實現(xiàn)里必須保留 expire 方法修改對應 key 的到期時間即可。搞懂這三個問題后實現(xiàn)就不難了。3.2 帶過期時間和并發(fā)安全的本地緩存實現(xiàn)我這次用 ConcurrentHashMap 手搓了一個輕量緩存完整代碼貼出來。注意這一段要根據(jù)你自己分支里 RedisCache 的方法簽名微調(diào)但大邏輯是一樣的package com.ruoyi.common.core.redis; import org.springframework.stereotype.Component; import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; Component public class RedisCache { /** * 內(nèi)部緩存條目value 是真實對象expireAt 是過期時間戳毫秒0 表示不過期 */ private static class CacheEntry { private Object value; private long expireAt; CacheEntry(Object value, long expireAt) { this.value value; this.expireAt expireAt; } boolean isExpired() { return expireAt 0 System.currentTimeMillis() expireAt; } } private final MapString, CacheEntry localCache new ConcurrentHashMap(); public T void setCacheObject(final String key, final T value) { setCacheObject(key, value, 0L, null); } public T void setCacheObject(final String key, final T value, final Integer timeout) { // 注意如果你當前分支的這個重載原本以秒為單位這里要改成 TimeUnit.SECONDS setCacheObject(key, value, timeout null ? null : timeout.longValue(), TimeUnit.MILLISECONDS); } public T void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { long expireAt 0L; if (timeout ! null timeUnit ! null) { expireAt System.currentTimeMillis() timeUnit.toMillis(timeout); } localCache.put(key, new CacheEntry(value, expireAt)); } SuppressWarnings(unchecked) public T T getCacheObject(final String key) { CacheEntry entry localCache.get(key); if (entry null) { return null; } if (entry.isExpired()) { localCache.remove(key); return null; } return (T) entry.value; } public boolean deleteObject(final String key) { return localCache.remove(key) ! null; } public long deleteObject(final Collection collection) { if (collection null || collection.isEmpty()) { return 0L; } long count 0L; for (Object key : collection) { if (key ! null localCache.remove(key.toString()) ! null) { count; } } return count; } public boolean expire(final String key, final long timeout) { return expire(key, timeout, TimeUnit.MILLISECONDS); } public boolean expire(final String key, final long timeout, final TimeUnit unit) { CacheEntry entry localCache.get(key); if (entry null) { return false; } entry.expireAt System.currentTimeMillis() unit.toMillis(timeout); return true; } public boolean hasKey(String key) { return getCacheObject(key) ! null; } public CollectionString keys(final String pattern) { String prefix pattern.endsWith(*) ? pattern.substring(0, pattern.length() - 1) : pattern; return localCache.keySet().stream() .filter(key - key.startsWith(prefix)) .filter(key - { CacheEntry entry localCache.get(key); return entry ! null !entry.isExpired(); }) .collect(Collectors.toList()); } }簡單說明幾個關鍵點CacheEntry 是內(nèi)部靜態(tài)類把業(yè)務對象和過期時間綁在一起避免為了存過期時間再搞額外的結(jié)構。setCacheObject 接收 Long timeout 和 TimeUnit 的重載是若依 TokenService 和驗證碼鏈路調(diào)用最多的方法要保證它正確換算成毫秒時間戳。getCacheObject 里做了惰性過期判斷已經(jīng)過期的就當沒命中并順手 remove 一下避免臟數(shù)據(jù)一直駐留。expire 方法用于改寫已有 key 的過期時間這個非常關鍵。若依每次請求都會調(diào)用它來做會話滑動續(xù)期漏掉這個實現(xiàn)登錄后 30 分鐘一到就會全體掉線。keys 方法用于在線用戶列表查詢實現(xiàn)對 login_tokens: 前綴 key 的掃描。Redis 原生支持模糊匹配本地 Map 就直接遍歷判斷前綴演示環(huán)境數(shù)據(jù)量小性能沒問題。寫完后先不要急著動業(yè)務代碼編譯一下看調(diào)用的地方能不能對上。如果你的分支里有其他方法在 RedisCache 里被直接調(diào)用而這里沒有編譯器會立刻報錯補上對應實現(xiàn)就行。3.3 別忘了給本地緩存做定時清理ConcurrentHashMap 版本的惰性刪除有一個缺陷如果某個 key 設置了過期時間但之后再也沒人訪問它這個 key 就會一直留在 Map 里。驗證碼場景尤其明顯用戶每次刷新驗證碼都會往里面塞一個新 key很多人不登錄也不填驗證碼2 分鐘過期時間過了之后這些 key 依然躺在內(nèi)存里。日積月累看起來只是內(nèi)存占用增加但 Map 越來越大長期運行終究是隱患。解決辦法很簡單加一個后臺清理任務每分鐘掃描一次把過期的 CacheEntry 清掉??梢栽?RedisCache 類里直接用 Scheduled 注解也可以用一個 ScheduledExecutorService。我這里用的是最樸素的方式private final ScheduledExecutorService cleaner Executors.newSingleThreadScheduledExecutor(); public RedisCache() { cleaner.scheduleAtFixedRate(this::clearExpiredEntries, 1, 1, TimeUnit.MINUTES); } private void clearExpiredEntries() { long now System.currentTimeMillis(); localCache.entrySet().removeIf(entry - entry.getValue().expireAt 0 now entry.getValue().expireAt); }這段代碼會在類實例化時啟動一個后臺線程每分鐘把過期的條目清掉。注意不要用 new Thread 在那睡循環(huán)ScheduledExecutorService 是更穩(wěn)妥的選擇。如果你不想引入定時任務也可以在 setCacheObject 的時候不定期觸發(fā)清理但這樣做有個明顯問題寫入本身已經(jīng)很頻繁了再疊加全表掃描有點得不償失。一分鐘一次的后臺清理對演示環(huán)境完全夠用。4. 從依賴到業(yè)務鏈路逐層拆掉 Redis4.1 移除 pom 和配置文件里的 Redis確認新的 RedisCache 能編譯通過后開始從外部“拆線”。第一步把 pom.xml 里的 spring-boot-starter-data-redis 依賴注釋掉或刪除。這里不要心急注釋掉后先做一次 mvn compile看有沒有類直接引用了 org.springframework.data.redis 下的類。如果報錯說明還有地方繞過了 RedisCache 直接操作 RedisTemplate把這些類找出來改成使用 RedisCache或者直接注釋掉相關代碼。第二步打開 RedisConfig整個類的作用就是給 RedisTemplate 定制序列化策略。Redis 都不用了這個類自然可以刪掉或注釋。注意檢查 RedisConfig 里是否有 Bean 方法被其他地方注入如果有對應注入點也要處理。比如有些項目會在配置類里把 RedisTemplate 注入到其他組件里做緩存預熱這類代碼要一起清掉。第三步把 application.yml 里 spring.redis 整段配置注釋掉包括 lettuce 連接池和 commons-pool2 依賴。如果你是用 Nacos 管理配置那就要去配置中心把 redis 相關項清掉。很多人在這一步遇到一個坑pom 里的 Redis 依賴刪了但 RedisConfig 還在一啟動就報 ClassNotFoundException: RedisConnectionFactory。原因就是代碼里還引著 RedisTemplate。所以順序很重要先確認代碼層沒有 redis 相關 import再刪依賴最后清配置。4.2 驗證碼鏈路完全不用改若依分離版的驗證碼邏輯在 CaptchaController 和 SysLoginService 里。大致流程是前端請求 /captchaImage后端生成圖形驗證碼同時生成一個 uuid 作為 key把驗證碼答案存入緩存key 的格式是 captcha_codes:uuid。前端提交登錄表單時帶上這個 uuid 和用戶輸入的驗證碼。后端根據(jù) uuid 從緩存讀出正確驗證碼比對成功后立刻刪除緩存 key。因為這套流程走的是 redisCache.setCacheObject / getCacheObject / deleteObject而我們的 RedisCache 類名和這些方法簽名都沒變所以這段業(yè)務代碼完全不用動。驗證碼的 2 分鐘過期時間也會被本地緩存的 TTL 機制正確執(zhí)行。你可能會擔心以前驗證碼存在 Redis 里現(xiàn)在存在應用內(nèi)存里多個實例不共享怎么辦。這個在單節(jié)點部署下根本不成立只有一臺應用服務器驗證碼本來就存在同一份內(nèi)存里邏輯上是一致的。我自己在改造前還特意把驗證碼鏈路完整跑了一遍確認驗證碼生成、校驗、錯誤攔截、過期失效四個環(huán)節(jié)都正常才繼續(xù)往下走的。4.3 登錄會話鏈路靠 expire 續(xù)期保證不掉線TokenService 是本次改造的重頭戲雖然業(yè)務代碼不用改但我們要理解它背后的機制才能確認自家替身靠不靠譜。若依的登錄會話管理大概是這樣的登錄成功后生成一個 UUID 作為 token把 LoginUser 對象存入緩存key 為 login_tokens:uuid過期時間默認 30 分鐘同時把 token 塞進 JWT 返回給前端。前端每次請求在請求頭帶上 Authorization后端攔截器從 JWT 里解析出這個 uuid然后調(diào)用 redisCache.getCacheObject 拿 LoginUser。每次請求解析成功后TokenService 會調(diào)用 redisCache.expire 把過期時間重新刷新成 30 分鐘。用戶主動退出時調(diào)用 redisCache.deleteObject 刪除這個 key。換成內(nèi)存緩存后getCacheObject 返回的是同一個 LoginUser 對象引用expire 方法會把過期時間戳往后推 30 分鐘deleteObject 會從 Map 里移除 key。三個動作全部有對應實現(xiàn)所以會話邏輯可以無感切換。有一點要提醒LoginUser 對象里包含權限標識、角色集合、用戶信息等字段。以前走 Redis 序列化時這些對象要經(jīng)過 FastJson 或 JDK 序列化經(jīng)常出現(xiàn)類型轉(zhuǎn)換異常、循環(huán)引用、日期格式不對這樣那樣的坑?,F(xiàn)在直接存對象引用這些問題反而消失了。內(nèi)存緩存雖然犧牲了分布式共享能力卻把序列化包袱一并甩掉了。4.4 全局搜索 redisCache把所有隱藏調(diào)用點過一遍驗證碼、會話、在線用戶是明面上的三個大塊但不同版本的若依可能在下面這些地方也用了 RedisCache參數(shù)配置被修改后清理緩存字典數(shù)據(jù)緩存刷新代碼生成時的一些臨時狀態(tài)用戶狀態(tài)變更后刪除該用戶所有在線會話。處理方式是統(tǒng)一的在 IDEA 里全局搜索redisCache.把搜索結(jié)果逐條點開看一遍。只要調(diào)用的是 RedisCache 的方法我們新實現(xiàn)都有對應能力不用改。但如果某段代碼直接注入了 RedisTemplate 或者 StringRedisTemplate就要重點處理替換成 RedisCache 或者直接移除。若依默認項目里一般不會出現(xiàn)這種繞行寫法二次開發(fā)的代碼里經(jīng)常有所以這個排查步驟不能省。我當時就遇到了一個自定義的短信發(fā)送模塊直接用 StringRedisTemplate 做了發(fā)送頻率限制Redis 一拆它第一個炸。后來我把那段邏輯的限流存儲也挪進了 RedisCache用 hasKey 和 expire 組合實現(xiàn)才把問題解決。5. 我的實測過程與測試清單5.1 新分支改造順序記錄我建議動手前先拉一個分支出來比如 feat/remove-redis避免主分支改壞了沒法快速回退。這次我自己的改造順序是第一步在 IDEA 里全局搜索 RedisTemplate 和 redisCache記錄所有文件。第二步重建 RedisCache 類先編譯通過。第三步注釋 RedisConfig刪除 pom 里的 redis starter 和 commons-pool2。第四步清理 application.yml 的 spring.redis 配置。第五步啟動應用依次驗證驗證碼、登錄、自動續(xù)期、退出登錄、在線用戶列表。這個順序的核心原則是“先讓代碼不依賴 Redis 也能編譯再讓應用不連接 Redis 也能啟動最后驗證業(yè)務功能”。按照這個節(jié)奏來每一步出問題都能快速定位。如果反過來先刪依賴再改代碼編譯報錯會把你淹沒在幾十個紅叉里很難分清哪個是核心問題。把改動提交到分支的時候我習慣拆成三個 commit第一個是 RedisCache 替換實現(xiàn)第二個是依賴和配置清理第三個是問題修復和文檔補充。這樣后續(xù)如果要回滾可以精準回滾到某個環(huán)節(jié)不用整個分支一起回退。5.2 不裝 Redis 直接啟動這是最關鍵的一步驗證。改造完成后我在本地直接把 Redis 服務停掉然后啟動若依后端。正常情況下日志里不會出現(xiàn)任何 Redis 連接失敗的異常應用能順利注冊控制臺。如果還是看到 “Unable to connect to Redis” 之類的日志說明還有地方在啟動階段主動初始化 Redis 連接池要按第 4 章的思路繼續(xù)排查。我當時還碰到過一個特殊情況若依的在線用戶監(jiān)控頁、操作日志、登錄日志這幾個模塊本身沒有強制依賴 Redis但有些自定義工具類里加了個 PostConstruct 方法初始化 RedisTemplate導致應用啟動失敗。通過全局搜索 RedisTemplate 把這類代碼找出來注釋掉問題就解決了。這個搜索動作不要只在 src 目錄里搜resources 下的 XML 配置、Mapper 配置里也可能藏著對 Redis 相關 Bean 的引用都要看一眼。5.3 業(yè)務回歸測試清單去掉 Redis 后我按下面這份清單做了一遍回歸你可以直接拿去用甚至做成一個最簡單的冒煙測試腳本測試項操作方式預期結(jié)果驗證碼加載打開登錄頁驗證碼正常顯示后臺無異常日志驗證碼校驗輸入正確/錯誤驗證碼各一次正確可繼續(xù)登錄錯誤被攔截且驗證碼失效正常登錄賬號密碼登錄返回 token跳轉(zhuǎn)首頁接口訪問請求 /getInfo 等需要登錄的接口返回用戶信息不 401會話續(xù)期等待 25 分鐘后再次請求會話仍有效不要求重新登錄會話過期不操作等待超過 30 分鐘token 失效需要重新登錄退出登錄調(diào)用退出接口后再請求原 token 立即失效在線用戶管理端查看在線用戶列表能看到當前登錄用戶強制下線管理端執(zhí)行強退被強退用戶下次請求 401多用戶并發(fā)兩個賬號同時登錄兩個會話互不影響應用重啟重啟后端后再次登錄老 token 失效新登錄正常這套清單跑完基本可以確認改造對業(yè)務的影響范圍是可控的。尤其是“會話續(xù)期”這一項如果沒實現(xiàn) expire 方法或?qū)崿F(xiàn)有誤25 分鐘后就會踩到全員掉線的雷。我在第一次實現(xiàn)時就是因為 expire 里忘了把 entry 寫回 MapValue 是基本類型改完等于沒改導致測試跑到 30 分鐘整批掉線后來改成直接修改對象字段才解決。壓測方面我們用 JMeter 模擬了 200 個并發(fā)用戶同時登錄并持續(xù)調(diào)用接口的操作跑了 30 分鐘沒有出現(xiàn)會話丟失或驗證碼失效的問題。內(nèi)存緩存的讀寫性能本來就在微秒級比走一次網(wǎng)絡 RPC 快得多所以單機場景下完全不用擔心性能。6. 改造中的高頻坑位與再進一步的建議6.1 我踩過和見過別人踩的坑第一Integer timeout 的單位問題。若依不同分支里 RedisCache.setCacheObject(String key, Object value, Integer timeout) 這個重載的單位有差異有的是毫秒有的是秒還有的版本根本沒有這個重載。改造時如果不確定就去看原類里這個方法的實現(xiàn)把單位抄過來不要想當然。第二鍵掃描的實現(xiàn)。Redis 原生的 keys 命令支持、? 這類通配符我們本地實現(xiàn)里如果只做前綴匹配某些反向調(diào)用 keys(captcha_) 會出問題。好在若依業(yè)務里基本只用前綴模式比如 login_tokens:* 和 captcha_codes:*所以前綴匹配夠用。如果你的二開代碼里用了復雜通配符那要么擴展本地實現(xiàn)要么改用 Caffeine 這類功能更完整的緩存庫。第三在線用戶列表查不到數(shù)據(jù)。這個問題很隱蔽。若依的在線用戶功能會先 redisCache.keys(LOGIN_TOKEN_KEY *)再逐條 getCacheObject。如果 keys 實現(xiàn)里返回了過期 key 的集合而后面 getCacheObject 又返回 null前端列表里就會出現(xiàn)空行或奇怪的 null 數(shù)據(jù)。我在實現(xiàn)里特意在 keys 時也判斷了一遍過期狀態(tài)就是為了避免這種臟數(shù)據(jù)。第四多實例部署的幻覺。有人改完之后覺得挺好又把它部署到兩臺服務器上結(jié)果用戶登錄后請求負載均衡到另一臺機器就 401。這個方案只認單實例多節(jié)點必須上 Redis 或獨立共享緩存這一點沒得商量。如果你未來有擴容計劃改造前就要慎重或者順便把緩存層抽象成可切換接口后續(xù)再換 Redis 也容易。第五清理資源別忘了連接池依賴。pom 里 redis starter 刪了但 commons-pool2 還留著雖然不影響運行但冗余依賴會讓后續(xù)維護的人困惑。另外有些瘦身更新腳本會掃描依賴樹多出來的歷史依賴可能被安全掃描工具標記到時又要解釋半天。6.2 如果不想手寫緩存可以用 Caffeine 兜底如果你不想維護自己的 ConcurrentHashMap 緩存邏輯可以直接引入 Caffeine把 RedisCache 內(nèi)部的 Map 換成 Caffeine 的 Cache。代碼會更簡潔dependency groupIdcom.github.ben-manes.caffeine/groupId artifactIdcaffeine/artifactId /dependencyCacheString, Object cache Caffeine.newBuilder() .maximumSize(10000) .build();不過要注意Caffeine 的 expireAfterWrite 是固定過期時間如果要實現(xiàn)若依那種“每次請求刷新 30 分鐘”的滑動過期就得自定義 Expiry 或者每次訪問時重新寫一次 key實現(xiàn)起來比直接手寫 TTL 還要繞一些。對我來說在 RedisCache 這個門面類里用 ConcurrentHashMap 管理 TTL反而是最貼合若依現(xiàn)有調(diào)用習慣的做法。Caffeine 更適合那些不需要滑動過期、key 數(shù)量又很大的純緩存場景。如果你不想依賴任何第三方庫那么我上面給出的 ConcurrentHashMap 版本已經(jīng)足夠精簡它最大的好處是零依賴只靠 JDK 原生能力就能跑對部署環(huán)境的侵入最小。6.3 關于無狀態(tài) JWT 和 Plus 版本的再說明如果你的目標不僅僅是摘掉 Redis還想讓若依改成完全無狀態(tài)的 JWT 認證那改動面會大很多。若依目前 JWT 里只存了一個 uuid真正的 LoginUser 還是存在緩存里這樣可以隨時剔除用戶、統(tǒng)計在線。改成無狀態(tài)后權限數(shù)據(jù)全塞進 JWT每次請求直接解析雖然不用緩存了但也失去了主動踢人和會話過期的精細控制。除非有明確的性能或架構要求否則我不建議在這個方向上折騰收益不大改動和風險卻成倍增加。至于 RuoYi-Cloud 和 RuoYi-Cloud-Plus 這類微服務版本Redis 已經(jīng)深入到認證、分布式鎖、緩存一致性等環(huán)節(jié)簡單把 RedisCache 換成內(nèi)存緩存會導致服務間會話不互通、鎖失效、數(shù)據(jù)不一致等一系列問題。如果確實要降低部署復雜度更好的辦法是把 Redis 做成內(nèi)嵌模式或者用高可用的云數(shù)據(jù)庫而不是直接去掉。最后分享一個實際體會。若依框架把緩存訪問收斂到 RedisCache 這一個門面類上這個設計本來就給底層替換留了余地。我們這次用本地內(nèi)存緩存頂替 Redis本質(zhì)上是把“分布式緩存”換成了“單機緩存”業(yè)務代碼沒怎么動部署環(huán)境卻清爽了不少。改造過程中最值得投入時間的不是寫緩存代碼而是把項目里所有 redisCache 的調(diào)用點梳理清楚。梳理清楚了剩下的活基本就是照著業(yè)務需求選一種緩存實現(xiàn)而已。如果哪天項目要升到多節(jié)點把 RedisCache 的底層實現(xiàn)換回 Redis或者換成 Caffeine 加分布式緩存業(yè)務代碼依然不用怎么動只是到時候要跟運維確認好緩存服務的高可用方案就行。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丁香五月情| 91精品久久久久| 午夜日韩久久久网站| 婷婷色啪| 日日操夜夜爽| 丁香五月婷婷激情中文| 99精品爱| 丁香六月视频| 妻久久久久| 欧美WW在线网| 久久午夜丁香| 777久久久| 天天操夜夜操| 51成人| 在线观看亚洲视频影院| 久久五月热| 五月婷婷大香蕉| av免费人人| 久er免费视频| 99久久66| 青青热久精品视频在线观看| 日日操夜夜操狠狠操| 久婷婷色| 激情久久肏屄视频| 日韩ac不卡无码| 国内熟女黄色系列| 影音先锋 萱萱| 99热免| 91九色欧美| 色婷亚洲| 婷婷色五月在线视频| 国产精品99久久久久久久女警 | 免费AV在线网址| 69超碰在线| 久久九九热视频| 六月色播| 亚洲这里只有精品| 免费无码毛片一区二区A片| 色999五月色| 爆乳熟妇一区二区三区爆乳照片| 久久性爱视频| 国产精品18久久久| www.lchjjc.com| 9色91视频| 欧亚成人A片一区二区| 丁香五月婷婷基地| 日本精品久久久久中文字幕| 色色色九九九五月婷婷| 五月天堂色色| 狠狠爱综合| ′久久99一| 欧美123区免| 日韩三及成人AV片| 快乐激情五月色婷婷| 丁香五月婷婷黑人妻黄色电影院| 国庆精品久久| 日日爽日日爽| WWW久久久| 少妇激情五月天| 久99热| 青青草免费公开视频| 丁香六月婷婷久久综合| 大香久久综合网| 色五月婷婷亚洲最大| 国产精品色一哟哟| 99性爱视频| 国产三级片91| 国产暴力强伦轩1区二区小说| 丁香五月综合| 91视频久久久| 日本人妻丁香婷婷久久寝取熟女五月| 桔色成人在线| 狠狠色综合网| 激情图片99| 婷婷五月丁香久久| 亚洲色A| 五月婷婷在线观看黄| 91视频一起草| 天堂在线观看视频| 九九Av| 日本www五月婷婷| 伊人狠狠干| 青草少妇激情| 五月天精品| 婷婷五月天淫荡| 婷婷亚洲久久| 蜜桃五月天色| 日日日日日| 丁香五月天天高清在线| 99热精品在线| 97色婷婷在线观看| 日日激情网| 丁香五月婷婷av| 1000部毛片A片免费观看| 色播激情| 综合狠狠五月婷婷| 99热这里只有精品中文字幕| 性爱人人网| 99这里有精品视频3| 五月丁香六月激情狠狠| 婷婷五月综合网| 色婷婷丁香女女| www久久久久久久97| 婷婷 久综合| 婷婷丁香五月高清| 婷婷大香焦| 国産精品| 伊人玖玖精品| 综合色影院| 欧美婷| 五月天操逼网| 久久在线92| 综合激情综合啪啪| 日本乱子人伦在线视频| 九九国产视频| 丁香六月啪啪啪| 色婷婷丁香五月在线观看| 九九热黄色| 五月婷婷久久网| 丁香蜜臀黄色婷婷五月天| 丁香五月婷婷激情中文| 我淫我色婷婷五月天激情四射| 五月婷婷激情网| 天天久| 午夜天堂一区人妻| 九九久久综合网站| 美女久久天堂| 少妇人妻综合色6699| 五月天婷婷小说| 天天射天天干天插色综合| 九九九九这里只有精品| 99人人干人人操| 天天天添天天操| 五月天大香蕉| 色五月婷婷在线视频| 成人视频一区| 99开心五月五月丁香激情| 色99色| 99精日本久久| 国产精品久久久海的味道| 婷婷99综合| 激情五月天综合图片小说网站 | 99精色| 成人av在线网址| 99成人精品视频| 97成人丁香| 激情综合网 激情五月天| 99热思思| 婷婷五月深爱五月| 无码动漫av| 播五月丁香三月婷婷| 狠狠 久久| 性生活视频98791| 天堂呦 呦百度搜索-百度搜索| 久热这里只有精品99re,久热这里只有精品7| 丁香六月婷| 五月婷婷在线短视频| 97干在线| 五月天婷婷乱| 婷婷九月在线| 五月天综合视频| 激情小说五月天| 这里只有精品免费视频| 日韩成人精品一区久久久久| 9 9热这里有精品| 狠狠干五月丁香综合网| 人人干99| 香蕉AV777XXX色综合一区| 中文人妻主播久久| 六月色婷婷综合影视| 色情婷婷五月天| 噜噜狠狠色综合久| 五月色网| 天天做天天爱天天要| 丁香五月婷婷婷桃花影院| 色偷偷五月天| 婷婷久久久久久久| 97在线日本| 亚洲视频二区| 婷婷激情六月天视频| 国产成人亚洲综合亚洲| 高清无码网址| 五月婷婷免费在线视频| 婷婷五月成人有| 日本eVa一区=区视频| 丁香五月天成人网站| 99免费热视频在线| 色九月综合| 26uuu丁香婷婷五月| 99热大全在线观看| 激情九色| 久久婷婷青青| 婷婷色影院| 日日舔夜夜操| 2025天天爽天天摸| www.色婷婷| 激情6月| 热久久91| 五月天婷婷视频| 丁香五月婷婷久久综合激情网 | 狠狠插狠狠| 日本人人干| 丁香五月AV| 免费不卡狠操美女视频网| 久久综合中文| 成人色图情色成人网 www.5b5b5bcom 五月天 | www.91在线观看| se色99| 婷婷娌伦网| 六月婷婷综合| 色吧五月婷婷| 无码区婷婷五月花开| 狠狠干总合| 久久婷婷五月综合色奶水99啪| 国产AV一区二区三区日韩| 99热最新精品| 网站免费一站二站| 婷婷五月无码| 99热精地址| 色综合色综合婷婷热| 97碰操| 国产69久久久欧美黑人A片| 五月婷婷综合网| 日在线V视频在线播放| 丁香五月中文字幕| 爽极品色| 亚洲无线视频| 久久五月网| 六月婷婷最新网址| 日韩精品一区二区刘| 男女啪啪做爰高潮无遮挡| 欧美日本国产欧美日本韩国99 | 久久狠狠干| 亚洲99热| 婷婷婷婷色| 激情婷婷五月色| 婷婷激情伍月网| 九月婷婷激情| 337p大胆噜噜噜噜噜91Av| 无码色综合| 90色免费视频| 亚洲国产网址| 激情五月婷婷啪啪| 日韩av在线免费观看| 久久婷婷艹| 九九成人电影婷婷| 九九伦子片| 久久久久久久11111111111| 99精品热| 嫩草AV久久伊人妇女超级A| 日日噜噜夜夜狠狠久久丁香五月| 色婷婷导航| 五月天婷婷视频| 激情五月天视频| 在线观看的av| 亚洲色五月| 九月丁香婷婷| 无码视频国内精品久久久| 亚洲爆乳无码精品AAA片蜜桃| 色婷婷久久综合中文久久一本| 九月婷婷| 婷婷五月天天| 亚洲无码yw| 色狠狠色综合久久久绯色AⅤ影视| 色婷婷在线影院| www.com任你艹| 97超级碰碰碰| 天天人人综合| 99热这里只有精品一区| 丁香婷婷色情| 久久人妻视频| 97超级碰人人| 日韩啪啪视频| 色婷婷a三区麻| 五月丁香无码视频| 超碰免费人妻| 麻豆观看夏晴子| 岛国AAAV| 第四色婷婷日本| 激情播丁香| AⅤ色区| 欧美黄色AA片哗啦啦啦| 深爱激情综合网| 国产成人精品亚洲线观看| 丁香五月婷婷欧美性爱| 五月激情网站| 婷婷五月天手机版视频| 琪琪色五月天| 九月激情婷婷丁香| 狠狠色噜噜狠狠狠狠综合| 天天爽成人综合网站| 五月婷婷之六月丁香| 天天插AV丝袜中| WWW久久久| 亚洲成人影视在线| 色吧五月| 色五月婷婷在线观看| 五月天堂婷婷| 97超喷视频在线观看| 五月色婷婷影院| 九九爱这里只有精品| 激情五月婷婷在线| 五月婷婷五月| 色五月天丁香婷婷| 99精品福利视频| 九九色逼| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 五月六月丁香婷婷在线观看| 婷婷五月天视频免费在线观看| 久久99网| 国产老熟妇亲子乱对白| 激情综合激情五月一起草| 亚洲中文乱字字幕在线永久| 丁香五月综合久久| 五月婷婷在线观看| 九九无码| 99精品国产在热久久| 79色色色色| 91久操| 97成人视频| 丁香婷最新动态| www.五月天激情| 色婷婷丁香五月| 色婷婷丁香五月| 超碰久热| 亚洲婷婷视频| 丁香六月啪| 久9草在线观看视频| 精a品a视a频| 久久这里都是精品| 爱iii做iiii日日| 狠狠色丁香综合| 日亚二欧美| 91呦呦呦| 有哪些A片网站| 中文字幕按摩做爰| 五月天开心成人网| 热久久这里只有精品| 99热久草| 午夜大香蕉| 综合玖玖偷拍| 六月丁香网| 在线超碰精品| 国产色99| 五月丁香六月情| 伊久大香蕉| 日日天天操| 色色色综合网| 激情久久天天| 五月停性愛| 桃色伊人在线| 激情 久久 婷婷| 婷婷5月天激情综合| 人人操AV| 婷婷五月深情丁香深爱日韩| 久久久久这里只有精品| 99 色色吧| 天天干,天天日| 丁香五月影院| 欧美交换配乱吟粗大25P| 蜜臀AV在线成人| 妻久久人久久| 青青草成人网| 五丁香激情综合| AV九九| 99re免费精品视频| 成人.在线日韩| 99re99热| 国产一级片色色| 噜噜噜精品欧美成人在线观看| 欧美经典片免费观看大全| 丁香五月天激情婷婷丁香六月| 久热这里只有精品6| 色五月激情综合网| 五月天网址在线刘玥| 五月婷婷影视| 国内久久久精品99| 1024日韩| 五月天婷婷乱| 大香蕉久久婷婷精品综合| 激情综合色婷婷啪啪六月天| 婷婷五月丁香综合亚洲| 九九综合九| 亚洲六月色| 9999热在线免费观看| 92久久| 亚洲网站在线鸭子av| 色一情一乱一乱一区91Av| 婷婷黄色五月天在线视频| 午夜69成人做爰视频| 丁香五月激情性色郤| 国产女生爱爱AA| 久久婷婷人人| 色婷婷丁香五月观看| 七七色综合| 五月天婷婷AV| 五月丁香激情综合网官网| 综合色七七| 九色 在线| 色五月五月婷婷| 久久五月丁香婷婷| 久久婷婷东京热大香樵| 色丁香五月婷婷| 免费观看欧美成人AA片爱我多深 | 色五月第四色| 69热在线| 久久青青日本视频| 99热精品在线观看| 内射综合网| 天天干,噜噜色,狠狠色| 91久久精品无码一区二区三区| 久久这里只精品| 丁香五月停停av| 97干免费视频| OUMEIRIHANCHENGREN| 99re8在这里只有精品| 狠狠五月天激情| 久婷| 久青草大香蕉| 久久九九激情五月天 | 国产乱子轮XXX农村| 狠狠色综合精品视频在线| 久久精品99| 伊人天堂婷婷| 欧美成人一区二区三区在线视频| 91九色在线| 九一99| 日本色噜| 九九AV| 亚洲五月色| 色色色在线免费视频| 偷拍九九五月丁香婷婷| 99热亚洲只有色| 日日噜噜夜夜狠狠久久丁香五月| 狠狠色五月| 婷婷五月天激情五月天网站| 五月丁香六月日逼| 婷婷六月色| 亚洲爱婷婷| 五月天婷婷Av| 婷婷天堂伊人| 99色热综合| 激情五月天色播| 久久99婷婷| 色五月五月婷婷| 日韩操| 婷婷区日本| 久久精彩综合视频| 久久久18| 337p大胆噜噜噜噜噜91Av| 天啪色| 91狼友视频在线观看| 亚洲妇女熟BBW| 五月婷婷色| 91avse| 婷婷五月天AV在线| 免费播放片大片| 色婷婷亚洲六月婷婷中文字幕| 五月婷丁香亚洲| 不卡在线超碰| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 婷婷五月综合在线| 狠狠色丁香| 97香蕉碰碰人妻国产欧美| 99久久五月天| 久久婷婷五月综合激情国产| 婷婷五月天奸女| WWW.99视频| 99色在线观看视频| 久草大| 亚洲天堂热| 久久九九99| 深爱五月月天| 午夜九九电影| 免费不卡狠操美女视频网 | 国产精品视频免费看| 大香蕉久久婷婷精品综合| 婷婷六月综合基地| 婷婷月五天在线在线看| 69婷婷丁香午夜| 婷婷五月天视频在线观看| 亚洲va在线| 成人精品亚洲性爱| 色9999日韩国产| 亚洲国产99| 亚洲亚洲人成综合网络| 超碰免费观看| 超碰93在线观看| 另类A片| 丁香六月色香蕉视频| 插插干干干色| 五月丁香六月婷婷姐| 伊人婷婷色| 色色网站在线| 五月婷婷激情久久| 9久精品视频| 久久99久久99久久99人受| 久热在线中文字幕色999舞 | 天堂在线9| 激情婷婷五月久久| www久热com| 激情中文在线| 精品一二三区久久AAA片| 五月丁香另类网| 日韩99视频| 色播五月婷婷综合| 久青草影院| 99爱在线视频| 欧美网站视频4399| 五月丁香六月停停| 99自拍网| 九一九九黄色| 玖玖99福利| 欧美色爱五月天| 五月天色社区| 婷婷丁香综合| www.十八禁不禁AV.com| 91综合国免费久入| 成人AV片播放| 成人五月天色天堂| 日亚二欧美| 婷婷情色开心五月天99| 六月婷婷激情| 五月天天爱| 丁香六月啪啪| 色婷操逼| 色婷婷五月天| 婷婷色狠狠| 色婷婷婷av| 五月天成人小说| 五月丁香伊人网| 美女激情综合| 99ri视频在线观看| 六月婷婷激情小说网| 日韩无码色色| 日本美女上人| 人人摸人人| 日韩在线看AV| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 99热99色| 99亚洲精品视频| 俺去也在线官网| 色99网| 色婷婷综合成人| 五月婷婷激情四月| 狠狠色色色| 五月情四婷婷| www.婷婷六月天| 婷婷色五月激情| 婷婷成人视频| 99资源在线| 99思思热只有在这里看| 97超碰,人人舔,人人操,人人摸 | 婷婷激情五月综合| 九九色婷婷Av| 日日夜夜爽| 天堂伊人干| 深爱 五月天| 色色色色色综合| 无码人妻电影| 欧美色色色色色| 五月丁香色| 色婷天天| 99久热在线精品| 无码髙清| 99九色视频在线观看| 天天综合网91| 亚洲激情av| 久9热在线视频| 亚洲一级色电影| 99九九玖玖| 婷婷久久综| 操操国产| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 色玖玖| 婷婷在线视频| 人妻系列久久久久久久久久久| 六月丁香啪啪| 99热这里只有精品1998| 久久色吧| 久久多色| 色婷婷五月天天天天天| 99视频| 久久66精品| 特黄三级又爽又粗又大| 久9视频免费播放| 大香蕉伊人99| 在线播放成人网站| 色久免费| 69人妻人人澡人人爽久久| 玖玖午夜视频| 丁香婷婷五月天亚洲| 99精品偷自拍| 丁香月六月| 婷婷五月天AV在线| 亚洲色婷婷| 少妇人妻凹凸视频| 日亚二欧美| 99色天堂| 婷婷五月天a| 久久久免费图片视频| www.激情| 99热在线中文字幕| 久久精品五月| 五月香婷婷| 亚洲人妻五月丁香婷婷| 99玖玖免费视频| 99热这里是精品| 99精色| 狠狠色丁香| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 色色色色色级无码| 色婷婷情片| 婷婷亚洲综合| 色色色色网| 婷婷激情小说网| 色婷婷亚洲综合网站| 五月婷六月| 色婷婷五月综合在线| 日本操片| 色色色九九九五月婷婷| 超碰在线人妻| 热久69| 午夜婷婷| av在线观看网站| 天插天啪天啪天啪| 操一区| 99精品久| 少妇AB又爽又紧无码网站| 亚洲VA口| 色婷亚洲| 五月婷婷久久开心网| 亚洲色五月婷婷| 少妇做爰免费视看片| 五月天伊人综合| 思思精品久久艹| 99er日韩| 日本视频99| 六月丁香婷婷爱| 99热这里只有精品8| 久色| 色五月婷婷影院| 伊人综合网4| 1024手机在线观看看片_日韩精品| 丁香五月天91| 一二线视频 另类| 99re这里只有| 亚洲激情视频在线观看| 国产精品日日躁夜夜躁| 思思热99热| 91久久婷婷人人澡草 | 1024欧美看片| 免费无码毛片一区二区A片| 婷婷五月六月| 99操| 久久综合激情| 1024国产| 伦乱天堂| 激情综合网五月婷婷| 五月综合视频| 99综合网| 五月婷婷六月情| 这里只有精品视频99| 日本AAAAAAAAAAAAAA片| 日日肏夜夜干| 天天干、天天日日| 天天檫天天爽| 五月丁香基地| 丁香婷婷视频| 月婷婷婷婷五月| 九九婷婷五月天| 色色色色色综合| 久久久久er热| 久草狼人| 婷婷激情综合| 噜噜视频| 天天干-天天日| 五月天色婷婷视频| 丁香五月激情澎湃一区| 99久久99热这里只有精品| 深爱开心激情网| 9久热这里只有精品视频| 激情综合网,婷婷五月天| 婷婷深爱五月亚洲综合| 激情五月综合ì香亚洲| 激情综合六月| 婷婷五月天久久| 九九热10| 久99| 99在线资源视频| 久久全色| 天天摸天天肏| 日本特黄aaaaa| 五月婷婷五月天亚洲无码| 99热在线这里| 女同激情久久av久久| 亚洲色五月| 1000部毛片A片免费观看| 五月天丁香色色| 人妻中文av| 亚洲AV人人操| 久久久婷丁香五月| 久久伊人五月天| 99在线播放视频| 1024人妻| 丁香伊人五月色婷婷五十路| 超碰在线人人| 开心日韩丁香婷婷五月| 久久人妻乱| 久热9| 日本V在线观看不卡视频网站| 综合激情sV| 这里只有精品偷拍| 婷婷五月天在线观看第二页| 亚州色婷婷| 色香蕉婷婷| aaa久久| 亭亭色天香| 色五月五月婷婷| 开心激情站| 大胆伊人久久| 人人爱天天摸摸天天爱| 久色五月丁香视频| 欧美搡BBBBB摔BBBBB| 九九精品99久久久| caobi四区| 午夜婷婷久久| 伊人高清无码| 九九热99re8热免费观看| 天天操夜夜橾| 婷婷色婷婷| 99热九九在线| 五月婷婷九| 激情五月天婷婷五月天| 美国不卡视频| OYIWbGcPu8H| 亚洲超碰在线| 欧美色频| 91男人资源站| 久色成人| 99久在线精品99re8| 亚洲 欧洲 国产 伦综合| 包操45分钟网站| 五月婷婷成人| Av在线不卡一区| 91视屏在线观看com.wwwvv| 九九精品综合| 大香AV| 五月天婷婷青青草| 精国产品一区二区三区A片| 美女网黄| 26uuu欧美| Www.se.久久| 99精品久久久久久久婷婷久久 | 婷婷五月在线影院| 开心丁五月| 色五月婷婷在线| 伊人久久大香线蕉AV最新午夜| 日韩五月天婷婷| 操人91| 五月婷婷激情久久| 伊人五月天| 久久99免费视屏| 五月丁香激情婷婷| 欧美黄色一级| 日本成人小说婷婷六月| 人人艹艹艹| 五月永久激情| 久久一级AV| 亚洲丁香五月美女| 国产又爽又猛又粗的视频A片 | 色色亚卅| 婷婷色色综合| 久久五月婷天天干| 五月停性愛| 9999热这里只有精品| 国产偷人爽久久久久久老妇APP| 日本婷婷网| 被强行糟蹋的女人A片| 韩日在线熟女| 被男人添B超爽视频| 五月丁香啪啪拍| 日本熟妇乱妇熟色A片蜜桃| 激情五月综合六月丁香婷婷狠狠干| 97久久超碰| 五月婷伊人| 99视频这里有精品| 91久久婷婷人人澡草 | 久草丁香婷婷1024| 丁香五月六月婷婷怡红院| 99热99日天天干| 青草五月天| 丁香五月综合激情啪啪| 激情五月综合网| 夜夜躁狠狠 | 久久激情综合| 99久久成人| 一本色道久久综合狠狠躁一二三| 天天综合天综合| 操操操91| 丁香五月色五月| 玖玖在线视频福利| 99在线精品免费视频| 五月婷六月天| 9婷婷内射| 久热99| 五月丁六月香av| 超碰在线资源| 黄色AV日韩| 日本色婷婷综合| 丁香婷婷浪潮AV久久综合| 99视频在线观看网址| 日韩操人| 青青草伊人婷婷| 丁香六月激情综合| 激情五月,色五月| av网站不卡在线| 婷婷色五月激情强奸四射| 五月六月丁香激情视频| 91在线精品一区二区| 9九色首页| 九九视频这里是精品五月| 丁香亚洲色综合| 五月丁香香蕉| 激情久久综合网| 黄久久久| 四川BBB搡BBB搡多人乱亂| 色99网| 欧美激情五月综合| 婷婷中文网站| 天天色粽合合合合合合合| 五月丁香六月婷婷无码| 久热只有这里有精品| 九热视频在线伦| 婷婷伊人綜合中文字幕| 五月婷婷丁香色播网| 中文字幕av久久爽一区| aaa久久久| 五月婷婷天| xxx.色婷婷| 开心亚洲久久开心| 亚洲综合无码| 五月天婷婷色综合| 色九区| www.久久爱.com| 中文不卡一二区| 精品视频这里只有精品| 婷婷五月丁香A∨| 性色做爰片在线观看WW| 狠狠人妻色综合| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 色色五月丁香婷婷| 曰韩五月丁香色婷婷无码| 久久激情五月天| 九九九九九九九热| 狠狠色婷婷| 亚洲色图81p| 婷婷五月精品| 亚洲欧洲中文日韩久久AV乱码| 伊人婷婷综合| 亚洲婷婷五月天激情| 翔田千里aV中文字幕| 久久看婷婷| 五月婷视频在线观看| 第九色区av天堂| 色婷婷久久综合| 五月婷婷激情五月| 五月四色婷婷| 多精窝99在线视频| 97操在线视频| 神马欧美精| 亚洲中字AV电影在线网站| 久久伊人大香蕉| 美欧成人视频| 五月天婷婷丁香社区| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 99热热热99精品婷婷| 狠狠综合| 狠狠综合久久| 婷婷丁香六月| 日本操B视频| 亚洲aV写真天天综合网久久| 99视频精品8 | 99热中文字幕久久| 五月天激情网页| 色国产五月| 久婷婷五月激情| 婷婷丁五月| 九九热a| 51XX午夜影福利| 欧美性久| 丁香婷婷色色| 大香蕉狠狠爱主页| 激情丁香五月| 免费日本aⅴ中文字幕 | 婷婷五月丁香亚洲| 99原创自拍视频在线观看| 8090在线影视少妇| 99热在线观看| 久久婷婷超碰| 九九精品re免费视频| 性色综合网| 97干婷婷| 六月婷婷激情| 天天色天天色天天色天天色天天色天天色| 婷婷五月天成人五月天| 国产99精品免费视频| 美女婷婷六月色| 极品人妻videosss人妻| av免费人人| 五月天婷久精视频| w婷婷五月婷婷w| 丁香五月色| 国产伦亲子伦亲子视频观看| 在线观看视频1区| 91性人人| 久久激情视频| 五月丁香网中文字幕| 66精品成人免费网站在线观看| 久久性爱视频这里只有精品| 五月激情站| 五月丁香啪啪网| 色爱综合网| 伊人激情综合| 97干视频| 颜射 精品性爱av| 丁香六月久| 婷婷五月天av| 99年操人人爽| 日韩国产在线免费观看| 六月丁香婷婷五月天| 亚洲看av的网站| 精品乱码久久久久| 日本天天操| 99爱在线| 91人人操人人| 婷婷五月天成人基地| 天天爽天天| 丁香六月啪| 99re在线免费视频| 丁香婷婷激情综合五月激情 | 丁香六月婷婷久久综合| 丁香婷婷五月综合欧美另类| 99色色| 激情五月五月五月婷婷| 婷婷丁香亚洲色综合91| 丰满少妇猛烈A片免费看观看| 任你日热视频| 色情五月天se| 99在线免费视频| 国产色五月| 99久视频| 九九激情| 好好日激情五月天| 激情久久久久久久久| 成人无码精品1区2区3区免费看| 国产黄色一级片| 久久五月丁香六月婷| 五月丁香大相交| 欧美色图片88| 日韩色色网| 开心激情综合| 最近免费中文字幕大全高清大全1| 先锋资源91| 激情综合网亚洲色图| 五月婷婷av| 久久182| 99久久思思| 老司机日日夜夜青草| 色原狠狠综合| 久久99热精品a片在线观看| 五月天激情小说| 97碰碰碰| 新精品99| aV直接看| 在线视频色五月| 色玖玖爱| 五月天狠狠色| 五月婷天天搞视频| 国产欧美日韩综合精品一区二区| 婷婷五月av| 亚洲精品在线视频| 99久久終合| 精品九九视频| 欧亚成人A片一区二区| 免费观看亚洲AV片| 青青草原伊人网| 在线超碰精品| 亚洲婷婷成人五月天| 欧美交换配乱吟粗大25P| 久久婷婷五月天懂色| 亚洲成人av在线播放| 大香蕉太香蕉视频97| 99视频这里只有久久精品| 99综合网| 激情久久四色| 日日色综合| 99啪啪视频| 日韩久久视频| 丁香五月婷婷AV| 日本狠狠干| 丁香 亚洲 久久| 五月天成人网在线观看| 涩涩激情五月婷婷| 六月丁香婷婷五月| 久久久久久9热不雅视频| 五月婷婷开心六月激情小说| 激情玖玖sh| 天天日人人爽| 久9热视频在线| 综合激情深爱| 日噜噜色| 激情五月天婷婷五月天| 69精品人人人人人人| 天天透天天爱| 超碰a女人的天堂| 五月天激情久久| 五月丁香另类图片| 97热这里只有精品| 天天肏屄夜夜爽| 熟女人妻一区二区三区免费看| 欧美天天综合网站上去吧| 久久久GOGO无码啪啪艺术 | 五月婷婷色| 五月天影院婷婷在线观看| 久久激情中文| 玖玖资源站中文| 六月色激情| 五月丁香六月婷| 小视频在线亚洲| 国产在线网| 五月丁香六月婷婷无码| 中文字幕激情综合| 久久五月天婷婷| 六月婷婷视频| AV亚洲在线| 桃色五月天| 性爱综合网| 午夜精品久久久久久久爽| 激情小说视频图片网| 久久免费丁香| 五月丁香婷婷综合网| 婷婷激情五月天在线视频| 丁香五月综合网| 丁香六月婷| 五月天六月丁香| www超碰com| 大香蕉婷婷久久| 丁香五月婷婷性爱| 大鸡巴伊人网| 日本三级中国三级99| www.25五月婷婷| www99精品在线观看| 丁香五月情| 高清激情av在线观看| 黄页免费一级视频懂色| 伊人激情| 天天天天爽爽天干| 97干97色| 97超级啪啪在线观看| 91丨九色丨白浆| 婷婷瑟五月天久久综合| 麻豆精品| 成人精品视频99在线观看免费| 激情深爱五月| 婷婷五月成人色综合| 丁香六月综合| 狠狠狠狠狠| 丁香婷婷成人网| 9九热视频| 久久免费试看120秒| 欧美一级色| 91精品久久久久、久五月天| 五月婷婷五月丁香综合| 婷婷色五月天色| 欧美性生交XXXXX无码小说| 热99在线精品| 婷婷激情五月天亚洲综合| 热五月婷婷| WWW、99热| 色色色com| 桃色五月天| 久久婷婷五月丁香| 伊人久久婷婷| se.久久视频在线观看| 日韩精品AV一区二区三区| 欧美性猛交99久久久99| 噜噜噜精品欧美成人在线观看| 激情AV| 久久大香免费| 99热草草| 免费无码毛片一区二区A片| 综合色影院| 狠狠色丁香久久婷婷综合五月| 久久综合丁香五月| 婷婷七月丁香色色| 在线观看视频1区| 99热在线播放| 99色在线观看| 丁香五月色五月| 亚洲激情97五月天| 中国AV性爱观看| 26UUU一区二区| 久久激情五月天| 99日在线观看视频| 级人人91| 亚洲精品久久久无码| 99精品视频网| 久久五月综合| 在线观看中文字幕亚洲| 天天爽天天日| 五月婷婷在线播放| 亚洲性爱区无码区| 婷婷瑟五月天久久综合| 99 热| 激情五月婷婷| 337p大胆噜噜噜噜噜91Av| 中文字幕欧美久久| 五月丁香六月婷婷综合| 久久久久久久,99精品视频| 精品二区| 黄色录像网点| 久久久av久av久片一区二区| 婷婷五月天基地| 天天干天天插| 狠狠干在线| 久久丁香五月| 国产在这里只有精品| 9+1视频网址| 色色婷| 天天日,天天干,天天操| 天天色播| 婷婷金品综合视频| 九九热在线精品| www久久久| 国外亚洲成AV人片在线观看| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲中文字幕在线观看| 五月天激情小说| 免费看欧美成人A片无码| 操人妻AV| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 久久久久久丁香五月| www色婷婷com| 五月天综合| 色综合中文| 丁香五月电影| 五月在线| 无码AV免费精品一区二区三区| 99在线精品免费视频| 超碰人人摸人人操| 97男人天堂| 黄色片avv| 丁香六月中文| 婷婷五月天手机版视频| 2w在线视频| 天天狠狠干| 婷婷五月色激情欧美激情| 五月天天综合| 丁香六月啪啪| 欧美私人家庭影院| av一区二区电影免费在线观看| 激情久久婷婷| 超碰激情网| 婷婷色五月天第7色| 丁香六月天婷婷开心综合| 婷婷亚洲综合| 亚洲色网络| 婷婷中合| 色五月大| 亚洲激情淫网| 思思热AV| 超碰人妻在线| 日逼AV影音先锋男人资源站| 天天艹| 色五月婷婷久久| 六月天丁婷婷| 超碰在线9| 免费做A爰片77777| 日韩黄色AV无码| 婷香五月网在线| 丁香五月婷婷俺也要去| 91丨九色丨熟女|新版| 亚洲色9| 一本久久亚洲五月婷婷 | 色五月婷婷老师| 婷婷九月久久| 99久re热视频精品98| 日撸夜撸日操| 超碰精品在线| 九色视频九色九色91jiuseshipin| 综合99视频| 免费试看小视频 99| 七七九色| 丁香五月婷婷激情四射深爱激情| 五月婷激情影院| 婷婷丁香五月噜噜噜| 五月丁香婷婷久久| 日韩av免费版| 开心五月六月婷婷| 五月激情六月综合| 欧美日韩中文国产一区发布| 亚洲色图在线视频| 精品五月丁香| 丁香久月| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 97人人草| …亚洲黄色在线播放日韩、av中文a…| 丁香五月婷婷姐| 91人人网| 久久久九九九 99| 久色姿源| 色五月六月| 五月天婷婷久草丁香| 狠狠干狠狠干狠狠干狠狠干| 综合色播| 五月婷婷久久久久| 淫荡综合网| 天天日天天插| 国产 亚洲 在线| 色婷婷色99国产综合精品| 东京热五月婷婷| www.激情在线| 六月色色| 久久激情天堂| 色五月婷婷丁香五月| 日本精品人妻无码77777| 综合激情伊人影视在线| www.五月天婷婷| 久久码久久无清| 婷婷五月天亚洲精品| 欧美韩国日本| 性爱网久久| 中文字幕人妻在线| 六月丁香婷婷色狠狠久久| 天天综合社区| 久热精品免费视频4| 激情婷婷五月黑人| 五月综合色| 婷婷五月成人有| 久久婷婷视频| 久久九色| 大香蕉手机视频| 五月婷婷三级| 青青草tp| 久久婷婷网| 久9精品视频| 九九人人精品| 五月天狠狠色| 啪啪99| 丁香激情久久| 久久久999精品| 丁香九月激情| 色色婷| 色五月 五月婷婷| 思思热闹这里只有精品| 开心激情综合| 五月综合视频在线| 97福利视频| 亚洲婷婷丁香五月亚洲| 亚洲经典三级| 丁香五月亚洲综合| aaaa久久| 99热只有这里有精品| 日本黄色在线观看| 玖玖综合网|