基于 Redis 的应用配置文件热更新工具 GRC

未知
Google Go
跨平台
2018-07-14
ppmoon

GRC - golang redis config

GRC是一款使用golang redis 对应用程序的配置文件进行热更新的一款软件,方便在应用程序启动的过程当中实时更新我们的配置文件。

使用

可以参考测试文件

//使用NewGrc实例化 第一个参数是.env文件 第二个参数是redis地址,第三个参数是redis密码,第四个参数是redis分区号。0就是默认的数据库
//.env是使用kv来设置参数哒
g := grc.NewGrc(".env","localhost:6379","",0)
//监听.env变化。注意:这里需要单独启动一个go程监听文件变化,否则会影响你的主要go程。
go g.WatchFile()
//GetItem获得配置文件。
config := g.GetItem("ack")
fmt.Println(config)


为什么设计这样一个包?

golang这种编译型语言无法像PHP一样实时的热更新配置数据。为了让golang更加简单的热更新配置文件所以设计制作了GRC这个热更新配置文件的包。

思路

具体思路是使用redis内存数据库作为配置的存放容器,然后让golang直接读取redis的数据作为配置数据,更新配置的时候,我们只要去更新redis里面的数据,golang应用程序就可以实时更新了。但是平凡的去操作数据库是危险的,所以本程序额外使用了一个.env的配置文件和php laravel的配置文件类似,GRC会新启动一个go程去监听.env的变化,GRC初始化的时候会先将.env的数据以KV的形式存入redis,如果.env发生变化,GRC会更新redis当中的配置列表。这样做的好处是,我们可以在外部使用编辑器更新配置文件,同时又不同golang程序去读取.env文件,相比读取磁盘上的配置文件,读取redis内存当中的数据速度要快很多,否则频繁的打开和关闭.env会造成磁盘性能的损耗。

不使用redis作为配置容器的一些常规方法

1.我们可以在项目目录当中配置一个config.go的文件,每次修改的时候修改这个文件的内容,然后重新编译项目。 2.我们可以写一个外部的yaml文件,每次都让golang应用去读取yaml读取配置。这样也可以热更新,但是问题就像上面说的,会频繁的触发磁盘IO操作。 3.我们可以让golang应用监听一个配置channel,然后我们用golang编写另外一个cli程序如果需要修改配置的时候就向这个管道写入数据,然后golang应用就去更新配置变量。

以上是我可以想到的方法都有利有弊,相对来说我觉得使用redis更省事,所以GRC的方案也不错。以上欢迎指教和star

的码云指数为
超过 的项目
加载中

评论(2)

OSC_ORAFKw
OSC_ORAFKw
etcd?
f
fifsky
建议监听文件更新之后直接存储但变量中,这样可以减少依赖redis通讯

暂无资讯

暂无问答

CDH5.3.2中配置运行Spark SQL的Thrift Server

一,环境信息 CDH集群,Cloudera Manager5安装部署CDH5.X详细请见:http://blog.csdn.net/freedomboy319/article/details/44804721 二,在CDH5.3.2中配置运行Spark SQL的Thrift Server 1,r...

2016/09/07 17:50
101
0
使用swig工具为go语言生成调用C、C++代码例子

swig开源项目(http://www.swig.org)为多种编程语言提供了相互访问的接口生成工具,这里面也包含了为go语言生成调用C、C++代码的功能。Go语言自带的cgo工具已经支持对C代码的调用,但对C++...

2012/06/29 11:50
2.6K
0
Go和plan 9 C联合编程

上一篇说了下golang 语言怎么结合plan 9 assembler编写程序。 这次来开下go是怎么使用plan 9 c语言来开发一些库的,这里只是简单的使用一个简单例子进行演示。 还是看下源代码吧 C代码 #inc...

2010/06/04 10:35
488
0
Go和C联合编程

最近在学习go。 看了一段时间后,发现其中有个cgo的命令,使得go语言程序可以调用c语言的函数。这个是很要用处的,因为现在的很多的大型程序都是用c写的,那么如果一下子转用go去重写无疑会加...

2010/06/04 10:30
1K
0
增强MySQL CLI的可读性和灵活性

打造MySQL环境下的SQL/PLUS

2014/03/27 17:05
739
0
Go和汇编联合编程

上篇讲了怎么利用iso c和golang联合开发。这里讲下怎么利用汇编程序开发基本类库,然后提供给golang语言调用。 为什么有了golang语言还要说汇编程序,这是因为在现在golang提供的库还是不全的...

2010/06/04 10:32
1K
0
MySQL Tips 2.0

关于存储过程中的变量用法总结、动态SQL、界面美化等等

2015/04/21 10:46
79
0
爱上命令行并深入

命令行是一个强大的工具,而我们大多数却都不会用,可以说没有命令行的世界等于你失去了一多半的乐趣和技能。 本文虫虫和大家一起来聊聊命令行,并教大家一起来学习命令,不管你是运维、开发...

2018/08/24 09:45
95
0
_locale_t的相关

可以用_create_locale创建一个_locale_t参数,该参数用来指定诸如不同国家货币格式,日期格式等的信息,示例如下: _locale_t locale; // Create a locale object representing the Ger...

2012/05/31 15:11
458
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部