gpt4 book ai didi

go - 自动重新加载配置

转载 作者:行者123 更新时间:2023-12-01 22:41:21 24 4
gpt4 key购买 nike

每当模块启动后对配置参数进行更改时,我都会尝试实现自动重新加载配置。
我的做法是为维护配置的特定表设置触发器,因此每当执行插入/更新/删除时,我都会维护另一个表以跟踪更改,因此每当执行更改时,我都会更新计数器和第二个表中该特定行的当前时间。
前任:

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:将通过 counter 和 time 的值与 DB 中存在的值进行比较
如果匹配返回 false(无更改)并返回 true 表示配置已修改
配置被加载到 MAP-> key-> string ,val->slice of strings 中,并在各种包中访问
例如,我在那里有一些 LOG 配置,我也通过从 map 中获取来初始化值。
因此,如果更改了配置,我将更新我正在维护的 map ,但我不知道如何向使用该 map 的那些包发送信号以再次重新分配配置

最佳答案

这一切似乎相当复杂。你能把配置保存在内存中吗?如果是这样,请这样做:

  • Config 是内存中的一个映射,带有互斥锁
  • 调用站点总是在每次使用时询问配置值

  • 因为它是在内存中的,所以它很快,因为只有一个副本,所以它总是最新的,因为你总是在使用前要求新的值,你不需要告诉消费者它是否发生了变化。不在内存中使用的唯一充分理由是它是否跨进程共享。
    请注意,尽管您的配置本质上是一组全局变量,因此您应该将其使用限制为在构建时间之后需要由用户更改的内容,将只有程序员更改的内容作为常量保留在包中。

    关于go - 自动重新加载配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63413120/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com