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

Memory 使用Go在主机之间共享变量,memory,go,Memory,Go,我在golang中编写了一个应用程序,它会将基本数据加载到全局var,因此使应用程序响应更快,并在用户更改数据库时导出一个http接口来更新var 但我部署了另一台服务器,并使用了代理。出现了一个问题,当用户向更新url发送http请求时,它会将流量加载到其中一台服务器。因此服务器会更新此变量,而其他服务器则不会 例如utils.go: package utils var BasicDatas map[string]*MyModel func UpdateVar(){ // do some

我在golang中编写了一个应用程序,它会将基本数据加载到全局var,因此使应用程序响应更快,并在用户更改数据库时导出一个http接口来更新var

但我部署了另一台服务器,并使用了代理。出现了一个问题,当用户向更新url发送http请求时,它会将流量加载到其中一台服务器。因此服务器会更新此变量,而其他服务器则不会

例如utils.go:

package utils

var BasicDatas map[string]*MyModel

func UpdateVar(){
// do some work
}
func PreLoadVar(){
// preload data to basicDatas
}
还有主菜,走吧

package main
import(
"codebase/utils"
)
func main(){
utils.PreLoadVar()
}
那么,如果有多个主机之间共享var的方法,或者任何库都可以帮助完成这项工作

Nsq.io似乎是一个不错的选择,但如果有,我想寻求一个更简单的选择。
谢谢:)

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

  • 正如Bill Nelson所建议的那样:使用数据库作为中央存储,不要在应用程序中缓存数据
  • 使用一个简单的键值存储将缓存外部化,例如,与一个
  • 使用分布式缓存,例如
    如果您手头有太多时间,您可以使用nsq之类的消息传递解决方案来实现您自己的分布式缓存,但我建议您不要这样做—这不是一个容易的问题。

    这是一个典型的进程间通信(IPC)问题,没有一个通用的解决方案。