Elixir ETS 密钥模式匹配
Elixir ETS key pattern matching
我正在使用 ETS 使用 ecto 从 postegress 缓存数据库模式
以下是这些示例:
table = :ets.new(:cache_name,[:set, :protected])
并包括那些注册表:
:ets.insert(table,{:first_table,{1}})
:ets.insert(table,{:first_table,{5}})
:ets.insert(table,{:second_table,{1}})
但是第二个替换了第一个,因此我连接 table 名称和 ID 以获得这些注册表的唯一键 :ets.insert(table,{:first_table1,{1}})
,但目前我想要第一个的第一个注册表 table 我有一个问题,因为我包含第二个的相同密钥并且它检索两个注册表:
:ets.match_object(table,{:"_",{1}})
我如何向 ETS 指定如果密钥包含 table_name 检索这些注册表?
我认为您不能将原子名称的一部分与 :ets.match_object
相匹配。如果您想要同时基于 table 和 id 以及仅 table:
进行查找,我建议使用 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}}]
我正在使用 ETS 使用 ecto 从 postegress 缓存数据库模式 以下是这些示例:
table = :ets.new(:cache_name,[:set, :protected])
并包括那些注册表:
:ets.insert(table,{:first_table,{1}})
:ets.insert(table,{:first_table,{5}})
:ets.insert(table,{:second_table,{1}})
但是第二个替换了第一个,因此我连接 table 名称和 ID 以获得这些注册表的唯一键 :ets.insert(table,{:first_table1,{1}})
,但目前我想要第一个的第一个注册表 table 我有一个问题,因为我包含第二个的相同密钥并且它检索两个注册表:
:ets.match_object(table,{:"_",{1}})
我如何向 ETS 指定如果密钥包含 table_name 检索这些注册表?
我认为您不能将原子名称的一部分与 :ets.match_object
相匹配。如果您想要同时基于 table 和 id 以及仅 table:
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}}]