【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
上篇文章【.NET Core項目實戰-統一認證平臺】第四章 網關篇-數據庫存儲配置(2)我們介紹了2種網關配置信息更新的方法和擴展Mysql存儲,本篇我們將介紹如何使用Redis來實現網關的所有緩存功能,用到的文檔及源碼將會在GitHub上開源,每篇的源代碼我將用分支的方式管理,本篇使用的分支為course3。
附文檔及源碼下載地址:[https://github.com/jinyancao/CtrAuthPlatform/tree/course3]
一、緩存介紹及選型
網關的一個重要的功能就是緩存,可以對一些不常更新的數據進行緩存,減少后端服務開銷,默認Ocelot實現的緩存為本地文件進行緩存,無法達到生產環境大型應用的需求,而且不支持分布式環境部署,所以我們需要一個滿足大型應用和分布式環境部署的緩存方案。Redis應該是當前應用最廣泛的緩存數據庫,支持5種存儲類型,滿足不同應用的實現,且支持分布式部署等特性,所以緩存我們決定使用Redis作為緩存實現。
本文將介紹使用CSRedisCore來實現Redis相關操作,至于為什么選擇CSRedisCore,可參考文章[.NET Core開發者的福音之玩轉Redis的又一傻瓜式神器推薦],里面詳細的介紹了各種Redis組件比較及高級應用,并列出了不同組件的壓力測試對比,另外也附CSRedisCore作者交流QQ群:8578575,使用中有什么問題可以直接咨詢作者本人。
二、緩存擴展實現
首先本地安裝Redis和管理工具Redis Desktop Manager,本文不介紹安裝過程,然后NuGet安裝?CSRedisCore,現在開始我們重寫IOcelotCache<T>的實現,新建InRedisCache.cs文件。
實現所有緩存相關接口,是不是很優雅呢?實現好緩存后,我們需要把我們現實的注入到網關里,在ServiceCollectionExtensions類中,修改注入方法。
奈斯,我們使用Redis實現緩存已經全部完成,現在開始我們在網關配置信息增加緩存來測試下,看緩存是否生效,并查看是否存儲在Redis里。
為了驗證緩存是否生效,修改測試服務api/values/{id}代碼,增加服務器時間輸出。
增加新的測試路由腳本,然后增加緩存策略,緩存60秒,緩存分類test_ahphocelot。
現在我們測試訪問網關地址http://localhost:7777/api/values/1,過幾十秒后繼續訪問,結果如下。
可以看出來,緩存已經生效,1分鐘內請求都不會路由到服務端,再查詢下redis緩存數據,發現緩存信息已經存在,然后使用Redis Desktop Manager查看Redis緩存信息是否存在,奈斯,已經存在,說明已經達到我們預期目的。
三、解決網關集群配置信息變更問題
前面幾篇已經介紹了網關的數據庫存儲,并介紹了網關的2種更新方式,但是如果網關集群部署時,采用接口更新方式,無法直接更新所有集群端配置數據,那如何實現集群配置信息一致呢?前面介紹了redis緩存,可以解決當前遇到的問題,我們需要重寫內部配置文件提取倉儲類,使用redis存儲。
我們首先使用redis實現IInternalConfigurationRepository接口,每次請求配置信息時直接從redis存儲,避免單機緩存出現數據無法更新的情況。RedisInternalConfigurationRepository代碼如下。
redis實現后,然后在ServiceCollectionExtensions里增加接口實現注入。
builder.Services.AddSingleton<IInternalConfigurationRepository, RedisInternalConfigurationRepository>();然后啟動網關測試,可以發現網關配置信息已經使用redis緩存了,可以解決集群部署后無法同步更新問題。
四、如何清除緩存記錄
實際項目使用過程中,可能會遇到需要立即清除緩存數據,那如何實現從網關清除緩存數據呢?在上篇中我們介紹了接口更新網關配置的說明,緩存的更新也是使用接口的方式進行刪除,詳細代碼如下。
我們可以先拉去授權,獲取授權方式請參考上一篇,然后使用HTTP DELETE方式,請求刪除地址,比如刪除前面的測試緩存接口,可以請求http://localhost:7777/CtrOcelot/outputcache/test_ahphocelot地址進行刪除,可以使用PostMan進行測試,測試結果如下。
執行成功后可以刪除指定的緩存記錄,且立即生效,完美的解決了我們問題。
五、總結及預告
本篇我們介紹了使用redis緩存來重寫網關的所有緩存模塊,并把網關配置信息也存儲到redis里,來解決集群部署的問題,如果想清理緩存數據,通過網關指定的授權接口即可完成,完全具備了網關的緩存的相關模塊的需求。
下一篇開始我們開始介紹針對不同客戶端設置不同的權限來實現自定義認證,敬請期待,后面的課程會越來越精彩,也希望大家多多支持。
相關文章:
AspNetCore中使用Ocelot之 IdentityServer4
Ocelot-基于.NET Core的開源網關實現
.NET Core微服務之基于Ocelot+IdentityServer實現統一驗證與授權
Swagger如何訪問Ocelot中帶權限驗證的API
Ocelot.JwtAuthorize:一個基于網關的Jwt驗證包
.NET Core微服務之基于Ocelot實現API網關服務
.NET Core微服務之基于Ocelot實現API網關服務(續)
.NET微服務體系結構中為什么使用Ocelot實現API網關
Ocelot簡易教程(一)之Ocelot是什么
Ocelot簡易教程(二)之快速開始1
Ocelot簡易教程(二)之快速開始2
Ocelot簡易教程(三)之主要特性及路由詳解
Ocelot簡易教程(四)之請求聚合以及服務發現
Ocelot簡易教程(五)之集成IdentityServer認證以及授權
Ocelot簡易教程(六)之重寫配置文件存儲方式并優化響應數據
Ocelot簡易教程(七)之配置文件數據庫存儲插件源碼解析
ASP.NET Core中Ocelot的使用:API網關的應用
ASP.NET Core中Ocelot的使用:基于Spring Cloud Netflix Eureka的動態路由
ASP.NET Core中Ocelot的使用:基于服務發現的負載均衡
【.NET Core項目實戰-統一認證平臺】第一章 功能及架構分析
定制Ocelot來滿足需求
【.NET Core項目實戰-統一認證平臺】第三章 網關篇-數據庫存儲配置(1)
【.NET Core項目實戰-統一認證平臺】第四章 網關篇-數據庫存儲配置(2)
原文地址: https://www.cnblogs.com/jackcao/p/9960788.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EF Core 实现多租户
- 下一篇: 广州.net俱乐部12月份ABP框架活动