我正在编写一个 Elixir 应用程序,它需要一个注册表来存储哪个 pid 属于哪个用户的映射。我将在应用程序中为每个用户配备一个 GenServer 来进行监督。我有一个使用 ETS 处理一个节点但有 2 个以上节点的基本示例,我不能使用 ETS,因为它不支持集群/复制。拥有分布式缓存还有哪些其他选择?通过做一些研究,我的选择是使用数据库(例如 Redis)或使用 Amensia。
最佳答案
假设您不希望集群中出现重复项,您可以简单地全局注册每个 GenServer。
GenServer.start_link(__MODULE__, args, [name: {:global, user_id}]
然后你可以简单地查找
:global.whereis_name(user_id)
来获取 pid。如果进程终止,它会自动取消注册。这是 Erlang's global module 的文档。关于caching - Elixir 中的分布式缓存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35930734/