Elixir 中的分布式缓存

ed1*_*d1t 5 caching elixir ets

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

Cod*_*oll 3

假设您不希望在集群中出现重复项,则可以简单地在全局范围内注册每个 GenServer。

GenServer.start_link(__MODULE__, args, [name: {:global, user_id}]
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地查找:global.whereis_name(user_id)来获取pid。如果进程终止,它会自动取消注册。这是Erlang 全局模块的文档。