【.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相关推荐
- 【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4...
上篇文章介绍了IdentityServer4的源码分析的内容,让我们知道了IdentityServer4的一些运行原理,这篇将介绍如何使用dapper来持久化Identityserver4,让我们对I ...
- 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权
上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .ne ...
- 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现 ...
- 【.NET Core项目实战-统一认证平台】第一章 功能及架构分析
从本文开始,我们正式进入项目研发阶段,首先我们分析下统一认证平台应该具备哪些功能性需求和非功能性需求,在梳理完这些需求后,设计好系统采用的架构来满足已有的需求和未来的扩展应用. 1 功能性需求 统一认 ...
- 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) 原文:[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) [.NET Core项目实战- ...
- 【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式
上篇文章我介绍了如何强制令牌过期的实现,相信大家对IdentityServer4的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证,然后根据不同的客户端使用不同的认证方 ...
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...
上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成acce ...
- 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式
上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权,并配合网关实现了统一的授权异常返回值和权限配置等相关功能,本篇将介绍密码授权模式,从使用场景.源码剖析到具体实现详细讲解密码授权 ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...
最新文章
- java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
- linux程序设计——运行SQL语句(第八章)
- jyphon 环境变量配置
- mysql 打包表在phpmyadmin提示正在使用中..
- web相关基础知识1
- Android 系统(207)---Android各种Drawable讲解和demo实例
- MATLAB语言初步学习(四)
- 可靠的Windows版Redis
- SQL server2008 安装教程
- 只需1分钟,这个网站用AI分离歌曲的人声、伴奏和乐器声
- Hibernate validator 官网前言中文版
- python大众点评霸王餐_如何抽中大众点评霸王餐?
- 权限提升+权限维持+痕迹清理
- 新事业,新征程:换屏哥,您身边的手机维修专家
- python 判断字符串中的的起始、终止子字符串
- Codeforces Round #672 (Div. 2) Pokémon Army
- 10本Linux PDF 书籍免费分享
- TensorFlow 手写实现卷积神经网络CNN
- Linux中lvdisplay命令的用法,lvdisplay
- 互联网日报 | 2月24日 星期三 | 华为去年收入利润保持正增长;特斯拉公开全国统一维保价目表;途虎养车回应赴美上市传闻...
热门文章
- 最大连续子数组和与JUnit测试
- E-MapReduce上如何升级EMR-Core
- 基于key/value+Hadoop HDFS 设计的存储系统的shell命令接口
- 番茄工作法—《可以量化的管理学》
- MySQL-5.5.33主从复制
- 【CodeForces 577C】Vasya and Petya’s Game
- jquery mobile页面切换效果(Flip toggle switch)(注:jQuery移动使用的数据属性的列表。 )...
- 将 SharePoint 开发与其他形式的开发进行比较
- 方法参数修饰符in,out,ref
- 让 Hangfire 使用 MongoDB 存储