Elixir 中的分布式缓存

Distributed Caching in Elixir

我正在编写一个 Elixir 应用程序,它需要一个注册表来存储哪个 pid 属于哪个用户的映射。我将在应用程序中为每个用户提供一个 GenServer 来进行监督。我有一个使用 ETS 处理一个节点但有 2 个以上节点的基本示例,我不能使用 ETS,因为它不支持 clustering/replication。拥有分布式缓存还有哪些其他选择?通过一些研究,我的选择是使用 Redis 等数据库或使用 Amensia。

假设您不想在集群中重复,您可以简单地在全局注册每个 GenServer。

GenServer.start_link(__MODULE__, args, [name: {:global, user_id}]

然后您只需查找 :global.whereis_name(user_id) 即可获取 pid。如果进程终止,它会自动注销。这是 Erlang's global module.

的文档