如何解决自动重新加载配置
在模块启动后,只要对config参数进行更改,我都会尝试实现自动重新加载配置。
我的工作是为维护配置的特定表设置触发器,因此每当执行插入/更新/删除操作时,我都会维护另一个表来跟踪更改,因此无论何时执行更改我正在更新该特定行的计数器和第二张表中的当前时间。
例如:
my 2nd Table schema(Tracker table):
tablename|counter|time
configtab,2,0001-01-01 00:00:00(just showing dummy values)
因此,对于configtab的每次更新,我都会在第二个表(即Tracker表)中更新计数器。
在我的Go代码中,我编写了2种方法: 方法1:返回计数器和时间值 方法2:将传递的计数器和时间值与数据库中存在的值进行比较 如果匹配,则返回false(无更改),并返回true,表示配置已修改
将配置加载到MAP-> key->字符串,val->字符串片段中,并在各种程序包中进行访问
例如,我有一些LOG配置,我也通过从地图中获取值来初始化值。 因此,如果更改了配置,我将更新要维护的映射,但是我没有得到如何向使用该映射重新分配配置的软件包发送信号的方法
解决方法
这一切似乎都很复杂。您可以将配置保留在内存中吗?如果是这样,请执行以下操作:
- Config是内存中带有互斥锁的一个映射
- 呼叫站点每次使用时总是要求提供配置值
由于它在内存中速度很快,因为它总是一个副本,所以它始终是最新的,因为您总是在使用前要求提供新的值,因此无需告诉消费者它是否发生了变化。不在内存中使用的唯一好理由是它是否在进程之间共享。 请注意,尽管您的配置实际上是一组全局变量,所以您应将其使用范围限制为在构建后需要用户更改的内容,并保留只有程序员才能将其更改为包中常量的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。