猿问

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

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


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


例如 utils.go:


package utils


var BasicDatas map[string]*MyModel


func UpdateVar(){

// do some work

}

func PreLoadVar(){

// preload data to basicDatas

}

和 main.go


package main

import(

"codebase/utils"

)

func main(){

utils.PreLoadVar()

}

因此,如果无论如何要在多主机之间共享 var?或者任何图书馆都可以帮助完成这项工作?


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


呼如林
浏览 237回答 1
1回答

MYYA

您的全局变量是一种非常简单的缓存形式,众所周知,当您在多台服务器上运行应用程序时会出现问题。有几种方法可以解决这个问题:正如 Bill Nelson 所建议的:使用您的数据库作为中央存储,并且根本不要在您的应用程序中缓存您的数据。使用简单的键值存储将缓存外部化,例如将Redis与Go中的众多 Redis 客户端之一一起使用。使用分布式缓存,例如groupcache。如果你手头有太多时间,你可以使用像 nsq 这样的消息传递解决方案来实现你自己的分布式缓存,但我建议不要这样做 - 这不是一个容易的问题。
随时随地看视频慕课网APP

相关分类

Go
我要回答