为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go 在主机之间共享变量

使用 Go 在主机之间共享变量

Go
呼如林 2021-08-23 15:32:45
我有一个用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个赞

您的全局变量是一种非常简单的缓存形式,众所周知,当您在多台服务器上运行应用程序时会出现问题。有几种方法可以解决这个问题:

  1. 正如 Bill Nelson 所建议的:使用您的数据库作为中央存储,并且根本不要在您的应用程序中缓存您的数据。

  2. 使用简单的键值存储将缓存外部化,例如将Redis与Go中的众多 Redis 客户端之一一起使用。

  3. 使用分布式缓存,例如groupcache。

如果你手头有太多时间,你可以使用像 nsq 这样的消息传递解决方案来实现你自己的分布式缓存,但我建议不要这样做 - 这不是一个容易的问题。


查看完整回答
反对 回复 2021-08-23
  • 1 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信