我有一个用golang编写的应用程序,它将基本数据加载到全局变量中,因此使应用程序响应快,并在用户更改数据库时导出一个http接口来更新变量。但是我部署了另一台服务器,并使用了代理。出现了一个问题,当用户向更新 url 发送 http 请求时,它会将流量加载到其中一台服务器。因此该服务器更新此 var,但其他服务器则不会。例如 utils.go:package utilsvar BasicDatas map[string]*MyModelfunc UpdateVar(){// do some work}func PreLoadVar(){// preload data to basicDatas}和 main.gopackage mainimport("codebase/utils")func main(){utils.PreLoadVar()}因此,如果无论如何要在多主机之间共享 var?或者任何图书馆都可以帮助完成这项工作?Nsq.io 似乎是一个不错的选择,但如果有的话,我想寻找一个更简单的选择。谢谢:)
1 回答
MYYA
TA贡献1868条经验 获得超4个赞
您的全局变量是一种非常简单的缓存形式,众所周知,当您在多台服务器上运行应用程序时会出现问题。有几种方法可以解决这个问题:
正如 Bill Nelson 所建议的:使用您的数据库作为中央存储,并且根本不要在您的应用程序中缓存您的数据。
使用简单的键值存储将缓存外部化,例如将Redis与Go中的众多 Redis 客户端之一一起使用。
使用分布式缓存,例如groupcache。
如果你手头有太多时间,你可以使用像 nsq 这样的消息传递解决方案来实现你自己的分布式缓存,但我建议不要这样做 - 这不是一个容易的问题。
- 1 回答
- 0 关注
- 233 浏览
添加回答
举报
0/150
提交
取消