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

标签 memory go

我有一个用golang编写的应用程序,它会将基本数据加载到全局变量中,这样可以使应用程序响应速度快,并导出一个http接口(interface)来在用户对数据库进行更改时更新变量。

但是我部署了另一台服务器,并使用了代理。出现了一个问题,当用户向更新 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 似乎是个不错的选择,但如果有的话,我想找一个更简单的。 谢谢:)

最佳答案

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

  1. 正如 Bill Nelson 所建议的那样:将您的数据库用作中央存储,并且根本不要在您的应用程序中缓存您的数据。
  2. 使用简单的键值存储将缓存外部化,例如使用 Redis连同 many Redis clients in Go 之一.
  3. 使用分布式缓存,例如 groupcache .

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

关于memory - 使用 Go 在主机之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26263057/

相关文章:

python - 去元组替代

c++ - 推送到 std::deque 时如何检测动态内存分配失败?

java - IntelliJ 2016.3.3 (32b) JVM 错误代码-6

c++ - 处理 3rd 方库内存不足导致的崩溃

python - 如何在 Python 中打开文件后释放内存

python - golang 和 python 节俭通信

macos - 打开应用程序 : How to detect filename in go

go - Golang 接口(interface)上的指针接收器和值接收器

google-chrome - 如何扩大谷歌浏览器的内存限制?

Golang 为 html 选择标签中的选项构造月份