ets

  :ets.new(table_name, pattern)

  第一个参数是表名,第二个参数是表的设置选项。

  :set  一个key,一个数据,无序

  :ordered_set  一个key,一个数据,有序; 1 == 1.0

  :bag  一个key,多个数据, 不可重复

  :duplicate_bag  一个key,多个数据,可重复

 

  :public  任何进程可读写

  :protect  拥有者进程可读写,其他进程可读

  :private  只有拥有者可读写

 

  :named_table  为ets表命名,替代它的id。有该参数时 :ets.new 返回 named_table 对应的表名,使用 insert 等函数时使用。注:在使用 named_table 的情况下同一项目中不能出现 :est.new 相同的表

 

  :ets.insert(table_name, object)  如果当前键已存在,则覆盖

    table_id = :ets.new(:test1, [:set, :public])
    :ets.insert(table_id, {1, ["2", "xx"]})
    :ets.insert(table_id, {[3, 4], [13, 98, 97]})

   

  :ets.insert(table_name, object)  如果当前键已存在,则返回false

 

  :ets.match(table_name, pattern)

  我们使用原子 :"$1":"$2":"$3" 等等来表示匹配中所使用的变量。其中的数字只用来表示其在返回值中的位置,而非匹配时的位置。不想要的部分我们可以用 :"_" 来忽略掉。

:ets.match(table_id, {1, :'$1'})    ["2", "xxx"]
 :ets.match(table_id, {[3, :'$2'], :'$1'})    [[13, 98, 97, 4]]

  

  :ets.match_object(table_name, pattern)

   match_object/2,这个函数忽略那些变量而直接返回整个对象

  :ets.match(table_id, {[3, :'$2'], :'$1'})    [{[3, 4}, [13, 98, 97]}]

  

  :ets.tab2list(table_name)

  返回一个 ETS 表的所有对象数据的列表

 

  :ets.select(table_name, match_spec)  :ets.fun2ms(fun)

  这两个函数通常联用, :ets.fun2ms 返回一组用于 :ets.select 匹配的模式

 

  :ets.lookup(table_name,  key)

  返回key对应的对象

 

  :ets.first(table_name)

  返回第一个元素的键

 

  :ets.next(table_name, key)

  返回当前键的下一个键

   

  :ets.delete_match(table_name, pattern) 

  删除匹配成功的数据

 

  :ets.delete(table)

  删除整张表

 

  :ets.delete(table, key)

  删除key指向的一组数据

 

  :ets.safe_fixtable(table, true/false)

  锁定表使其可以安全遍历,锁定一个类型是 set,bag 或 duplicate_bag 的表,使其可以安全遍历表里的数据。在一个进程里调用 ets:safe_fixtable(Tab, true) 可以锁定一个表,直到在进程里调用 ets:safe_fixtable(Tab, false) 才会解锁,或进程崩溃。如果同时有几个进程锁定一个表,那么表会一直保持锁定状态,直到所有进程都释放它(或崩溃)。有一个引用计数器记录着每个进程的操作,有 N 个持续的锁定操作必须有 N 个释放操作,表才会真正被释放。当一个表被锁定,一序列的 ets:first/1 和 ets:next/2 的调用都会保证成功执行,并且表里的每一个对象数据只返回一次,即使在遍历的过程中,对象数据被删除或插入。在遍历过程中插入到表里的新数据可能由 ets:next/2 返回(这取决有键的内部顺序)。

  一个被锁定的表是不会有被删除的对象数据从表里被实际删除,直到它被释放。如果一个进程锁定一个表,并不释放它,那些已删除的对象数据所占用的内存将永远不会得到释放。对表操作的性能也会显著降低。

你可能感兴趣的:(ets)