• 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 返回(这取决有键的内部顺序)。

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

  • 相关阅读:
    阅读笔记——增强学习3
    阅读笔记——增强学习2
    阅读笔记——增强学习1
    阅读笔记十六
    阅读笔记十五
    MVC实例应用模式
    MVC浅谈
    设计模式理解
    某系统质量属性设计实现详述
    《大型网站架构》浅读有感
  • 原文地址:https://www.cnblogs.com/lr1402585172/p/11583651.html
Copyright © 2020-2023  润新知