GRC 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
GRC 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
GRC 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
GRC 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
GRC 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

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

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (2)

加载中
该评论暂时无法显示,详情咨询 QQ 群:912889742
建议监听文件更新之后直接存储但变量中,这样可以减少依赖redis通讯
2018/07/14 20:21
回复
举报
更多评论
暂无内容
发表了博客
2020/09/13 09:36

GNU Radio系列教程(七):初级篇之GNU Radio GRC PSK调制解调

在本文中,我们将进行纯仿真实验,不使用任何硬件设备。但是,我们会考虑无线信号在实际信道传输过程中所面临的一些诸如信道衰落、时钟同步等影响信号传输的问题。我们会在信道仿真模块中,通过设置参数来模拟这些问题,然后一步一步的解决它们,最终实现信号的正确解调解码。 本文的实例只是实现PSK调制解调的一种方法,这里我们使用了GNU Radio自带的PSK信号解调模块。除了本文的方法之外,还有很多其他的PSK解调实现方法,这...

0
0
发表于硬件 & IoT专区
2020/07/29 06:50

如何看懂congestion map

最近有一些同学问congestion map怎么看。这里详细介绍一下。 congestion map可以非常直观的看到,绕线有问题的区域。 另外congestion map对于及早发现floorplan的问题有非常重要的意义,有经验的工程师都是在place阶段发现floorplan存在的问题。可以说90%的问题,是在place阶段解决的。到绕线阶段,在解决剩下的10%的问题。为什么还有10%的绕线问题?这是因为congestion map和最终的绕线有一定的偏差。 以ICCII为例,工具在进行...

0
0
发表了博客
2019/08/29 13:09

Ubuntu18.04安装UHD+GNU Radio后找不到USRP B210解决办法

一、在终端中输入uhd_usrp_probe,提示USB错误,没有权限。 解决办法: 输入 : sudo uhd_usrp_probe 二、GNU Radio中出现找不到设备,地址为空的错误: 错误原因:USB口要在sudo情况下才能打开,所以grc也要在root情况下打开才行。 解决办法:先进入root下再打开grc 若进入root时提示错误:“认证失败” 则先修改一下密码再重新进入即可:

0
1
发表于程序人生专区
2020/08/26 18:40

多集群管理:OpenShift的小伙伴来了

Talk is cheap in Open Source, show me the way to achieve! --大魏 最近这两本的都在5折促销,欢迎关注。 OCP4的多集群管理RHACM(Red Hat Advanced Cluster Managementfor Kubernetes)GA。ACM原来是IBM公司所有,目前调整到红帽公司的产品序列中,按照红帽公司的开源策略开发和维护,因此该产品已经是一个开源产品。在这个产品的发展上,也是红帽公司继续主导。 RHACM运行在OCP之上,实现了容器化运行。RHACM的架构如下: ...

0
0
发表了博客
2020/04/10 16:06

【译】GNU Radio How to write a block 【如何开发用户模块及编写功能块】

本文讲解如何在GNU Radio中添加用户开发的信号处理模块,译文如有不当之处可参考原文地址:http://gnuradio.microembedded.com/outoftreemodules Out-of-tree modules   利用用户自定义的功能模块扩展GNU Radio。   This article borrows heavily from the original (but very outdated) "How to write a block?" written by Eric Blossom. 1. What is an out-of-tree module?   外部模块(Out-of-tree Module)是不存在与G...

0
0
发表了博客
2012/06/29 11:50

使用swig工具为go语言生成调用C、C++代码例子

swig开源项目(http://www.swig.org)为多种编程语言提供了相互访问的接口生成工具,这里面也包含了为go语言生成调用C、C++代码的功能。Go语言自带的cgo工具已经支持对C代码的调用,但对C++代码的支持确实不行,所以Go1已经把swig的C++这部分功能作为附带功能加入(参见Go源代码\go\misc\swig)。这样,C++这块的资源也可以被Go语言使用了。 1、为Go语言生成调用C语言的接口: 根据swig的相关文档指导( http://www.swig.org/Do...

5
6
发表了博客
2010/06/04 10:35

Go和plan 9 C联合编程

上一篇说了下golang 语言怎么结合plan 9 assembler编写程序。 这次来开下go是怎么使用plan 9 c语言来开发一些库的,这里只是简单的使用一个简单例子进行演示。 还是看下源代码吧 C代码 #include "runtime.h" void ·Add(int32 a,int32 b,int32 r) ; first.h 声明first.Add方法,同时引入runtime包的runtime.h头文件。 C代码 #include "first.h" //first.c void ·Add(int32 a,int32 b,int32 r) { r = a + b; USED(&r); } first...

0
2
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
2 评论
6 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部