Elixir ETS键模式匹配

时间:2017-05-17 20:28:22

标签: elixir ets

我正在使用ETS使用ecto从postegress缓存数据库模式 以下是这些例子:

  

table =:ets.new(:cache_name,[:set,:protected])

并包含这些注册表:

  

:ets.insert(表,{:first_table,{1}})

     

:ets.insert(表,{:first_table,{5}})

     

:ets.insert(表,{:second_table,{1}})

但是第二个替换了第一个,因此我连接了表名和id以获得这些注册表的唯一键:ets.insert(table,{:first_table1,{1}}),但此刻我想要第一个注册表表我有一个问题,因为我包含第二个相同的密钥,它后退两个注册表:

  

:ets.match_object(表,{: “_”,{1}})

如何指定ETS,如果密钥包含table_name retreive这些注册表?

1 个答案:

答案 0 :(得分:1)

我认为你不能将原子名称的一部分与:ets.match_object匹配。如果你想要一个基于table和id以及table的查找,我建议使用表名和id的元组作为键:

table = :ets.new(:cache_name, [:set, :protected])

:ets.insert(table, {{:first_table, 1}, {1}})
:ets.insert(table, {{:first_table, 2}, {5}})
:ets.insert(table, {{:second_table, 1}, {1}})

# Get table = :first_table, id = 1
IO.inspect :ets.lookup(table, {:first_table, 1})
# Get table = :first_table and any id
IO.inspect :ets.match_object(table, {{:first_table, :_}, :_})

输出:

[{{:first_table, 1}, {1}}]
[{{:first_table, 1}, {1}}, {{:first_table, 2}, {5}}]