并发系统构建与容错基础
1. 数据持久化
在构建系统时,数据持久化是一个重要的环节。对于待办事项系统,我们希望在创建待办服务器时从数据库读取数据。为了避免阻塞客户端,我们采用了两阶段初始化的方法。以下是示例代码:
defmodule Todo.Server do
...
def init(name) do
{:ok, {name, nil}, {:continue, :init}}
end
def handle_continue(:init, {name, nil}) do
todo_list = Todo.Database.get(name) || Todo.List.new()
{:noreply, {name, todo_list}}
end
...
end
在上述代码中, init/1 函数的执行尽可能简短,待办列表初始化为 nil ,因为它会在 handle_continue/2 中被覆盖。这样,待办服务器在创建时就会从数据库读取数据。我们可以通过以下步骤进行测试:
1. 关闭之前的 shell 会话,开启一个新的会话。
2. 启动缓存:
iex(1)> {:ok, cache} = Todo.Cache.start()
- 获取 Bob 的待办列表服务器进程:
超级会员免费看
订阅专栏 解锁全文
371

被折叠的 条评论
为什么被折叠?



