Go 自动重新加载配置

Go 自动重新加载配置,go,Go,每当模块启动后对config参数进行更改时,我都会尝试实现自动重新加载配置 我所做的是,我已经为维护配置的特定表设置了触发器,因此每当执行insert/update/delete时,我都会维护另一个表以跟踪更改,因此每当执行更改时,我都会更新第二个表中该特定行的计数器和当前时间 例: 因此,每次更新configtab时,我都会更新第二个表(即跟踪表)中的计数器 在我的Go代码中,我编写了两种方法: 方法1:返回计数器和时间值 方法2:将计数器和时间传递的值与数据库中的值进行比较 if match

每当模块启动后对config参数进行更改时,我都会尝试实现自动重新加载配置

我所做的是,我已经为维护配置的特定表设置了触发器,因此每当执行insert/update/delete时,我都会维护另一个表以跟踪更改,因此每当执行更改时,我都会更新第二个表中该特定行的计数器和当前时间

例:

因此,每次更新configtab时,我都会更新第二个表(即跟踪表)中的计数器

在我的Go代码中,我编写了两种方法: 方法1:返回计数器和时间值 方法2:将计数器和时间传递的值与数据库中的值进行比较 if matched返回false(无更改),返回true,表示配置已修改

这些配置被加载到一个MAP->key->string、val->string片段中,并在各种包中访问

例如,我在那里有一些日志配置,我也通过从映射中获取来初始化值。
因此,如果配置被更改,我将更新我正在维护的映射,但我不知道如何向那些使用该映射重新分配配置的包发送信号,这一切看起来相当复杂。你能把配置保存在内存中吗?如果是这样,就这样做:

  • Config是内存中的一个带有互斥锁的映射
  • 呼叫站点总是在每次使用时请求配置值
因为它在内存中,所以速度很快,因为有一个副本,所以它总是最新的,因为在使用之前,您总是要求使用新的值,而不需要告诉消费者它是否发生了变化。不在内存中使用的唯一好理由是它是否在进程之间共享。 请注意,您的配置本质上是一组全局变量,因此您应该将其使用限制在构建时之后需要用户更改的内容上,并将只有程序员更改的内容作为常量保存在包中

my 2nd Table schema(Tracker table):
tablename|counter|time
configtab, 2, 0001-01-01 00:00:00(just showing dummy values)