gpt4 book ai didi

elixir - 如何使用加载的关联序列化/反序列化 Ecto 模型?

转载 作者:行者123 更新时间:2023-12-02 07:59:08 24 4
gpt4 key购买 nike

我几乎在每次请求时都会从数据库中获取用户(具有配置文件关联等)。我想在服务器上缓存并为数据库节省一些额外的工作。最初考虑 Redis 或 Memcached,最终考虑由 Mnesia 支持的分布式缓存。

我知道如何进行传输(在 Redis/Memcache 的情况下是二进制文件到缓存后端),但是如何将模型序列化和反序列化为二进制文件?

最佳答案

您可以尝试使用 :erlang.term_to_binary/1:erlang.binary_to_term/1 函数(少量文档 here )。

小例子:

iex> defmodule FooStruct do
...> defstruct foofield: nil
...> end
iex> struct = %FooStruct{foofield: 42}
iex> binary_representation = :erlang.term_to_binary(struct)
<<131, 116, 0, 0, 0, 2, 100, 0 ... >>
iex> :erlang.binary_to_term(binary_representation)
%FooStruct{foofield: 42}

它应该适用于几乎所有东西(我认为!)。

特别是在 Redis 中,您可以直接将原始二进制数据发送到 Redis 服务器,并在从服务器取回它们后将它们转换回 Elixir 数据结构(再次作为二进制数据)。这是一个小例子(使用 exredis ):

iex> client = Exredis.start
iex> data = :erlang.term_to_binary(%{foo: "bar"})
<< ... >>
iex> client |> Exredis.query(["SET", "mymap", data])
"OK"
iex> retrieved_data = client |> Exredis.query(["GET", "mymap"])
<< ... >>
iex> :erlang.binary_to_term(retrieved_data)
%{foo: "bar"}

关于elixir - 如何使用加载的关联序列化/反序列化 Ecto 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28098769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com