CSDN|基于选项模式实现.NET Core的配置热更新( 六 )
return new RedisConfigurationProvider(_options);
}
}
接下来是RedisConfigurationProvider类的实现:
public class RedisConfigurationProvider : ConfigurationProvider
{
private CSRedisClient _redisClient;
private readonly RedisConfigurationOptions _options;
public RedisConfigurationProvider(RedisConfigurationOptions options )
{
_options = options;
_redisClient = new CSRedisClient(_options.ConnectionString);
if (options.AutoReload)
{
//利用Redis的发布-订阅重新加载配置
_redisClient.Subscribe((_options.HashCacheChannel, msg => Load));
}
}
public override void Load
{
Data = http://news.hoteastday.com/a/_redisClient.HGetAll
}
}
为了用起来更得心应手 , 扩展方法是少不了的:
现在 , 我们改一下入口类Program.cs , 因为在这个阶段依赖注入是无法使用的 , 所以 , 看起来有一点难受 , 从命名就可以看出来 , 内部使用了Hash这种结构 , 理论上每个客户端应该使用不同的 Key 来进行缓存 , 应该使用不同的 Channel 来接收配置更新的通知: public static IHostBuilder CreateHostBuilder(string args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(configurationBuilder =>
{
configurationBuilder.AddRedisConfiguration(new Models.RedisConfigurationOptions
{
AutoReload = true,
ConnectionString = "127.0.0.1:6379",
HashCacheKey = "aspnet:config",
HashCacheChannel = "aspnet:config:change"
});
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>;
});
假设现在Redis里存储着下图所示的信息:
本文插图
相应地 , 我们可以在Startup中进行绑定: services.Configure<AppInfoOptions>(Configuration.GetSection("App"));
调一下接口看看?完全一致!Yes!
本文插图
本文小结回想起这个面试中“邂逅”的问题 , 针对对这块内容 , 其实当时并没有和面试官进行太深的交流 , 提到了分布式配置、配置中心以及像缓存的雪崩、击穿等等常见的问题 , 我隐约记得配置文件appsettings.json配置的部分有热更新的配置项 , 但我并没有对选项模式(Options)里的三剑客做过深入的挖掘 , 所以 , 这篇博客 , 一方面是系统地了解了一下选项模式(Options)的使用 , 而另一方面是由配置热更新这个话题引申出来的一系列细节 , 在没有理解IChangeToken的时候 , 实现一个自定义的配置源是有一点困难的 , 在这篇博客的最后 , 我们基于 Redis 的发布-订阅实现了一个简单的配置中心 , 不得不说 , Redis里用:来分割 Key 的方式 , 实在是太棒了 , 因为它可以完美地和 .NET Core 里的配置系统整合起来 , 这一点只能用赏心悦目来形容 。
推荐阅读
- |“增长”成娱乐营销必考题,酷营销-CBD模型为最佳选项?
- 苹果笔记本|苹果首款基于自研ARM处理器的MacBook Pro发布 同样采用M1芯片
- |基于Android 11:OPPO Ace2迎ColorOS 11正式版升级
- ColorOS|基于安卓11的ColorOS 11正式版面向Ace2系列推送
- CSDN|小霸王被申请破产重整;虎牙员工自曝被HR抬出公司;Office 2010被微软终止服务|极客头条
- |Kornia开源可微分计算机视觉库,基于Pytorch
- CSDN|可以“作为医生”的 GPT-3,究竟是炒作还是名副其实?
- |再加码社区团购,滴滴的野心从来不止于出行
- CSDN|对话指令集创始人兼CEO潘爱民:面向未来的新型物联网操作系统 | 人物志
- CSDN|给 JDK 报了一个P4 的 Bug,结果居然……