作者:低调的小男2502928607 | 来源:互联网 | 2023-05-25 14:26
我几乎在每个请求上都从数据库中获取用户(带有配置文件关联等).我想缓存在服务器上并保存数据库一些额外的工作.最初考虑Redis或Memcached,最终由Mnesia支持分布式缓存.
我知道如何进行传输(在Redis/Memcache的情况下将二进制文件传输到缓存后端)但是如何将模型序列化和反序列化为二进制文件?
1> whatyouhide..:
您可以尝试使用:erlang.term_to_binary/1
和:erlang.binary_to_term/1
函数(这里的一小部分文档).
小例子:
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"}