[Erlang脚印 0005] ETS 和Record

ETS 提供“键-值” 搜索表, 驻留在内存中,速度较快。是缓存的大利器。

record 作为erlang的一种数据结构,通常用于函数量传递。

ETS中创建表, 对数据进行增、删、改、查 , 及关闭表常用的函数

   ets:new(Name, Options) -> tid()   %% 创建表

           Options:

       Type: set | ordered_set | bag | duplicate_bag

         set: 每一个元组的键值都不能相同;ordered_set:元组键不能相同,并且会进行排序

                          bag:多个元组有相同的键,但是不能完全相同;duplicate_bag:允许多个元组有相同的键,而且可以完全相同。

                   Access:public | protected | private

         public:公开表, 所有知道这个表标识的进程都可以对这个表进行读写操作

         protected:受保护的表, 知道表标识的进程只可以读操作,但是这个表的所有者进程可以进行读写操作。

         private:私有表,只有所有者进程可以读写这个表。

                   named_table:命名表,如果存在这个选项,则后续操作中使用Name来操作表。

                  {keypos, Pos}:用Pos作为主键,默认情况下是第一位置。在使用record的时候,需要用到这个选项

 

 ets:insert(Tab, ObjectOrObjects) -> true                  %%表内插入一条数据

 ets:delete(Tab, Key) -> true                                    %%删除表内指定key的数据

 ets:delete_all_objectes(Tab) -> true                         %%删除表内所有数据

 ets:update_element(Tab, Key, ElementSpec :: {Pos, Value}) -> boolean()     %%Pos=integer() >=1  更新数据

 ets:lookup(Tab, Key) -> [Object]                             %%按照key查找表内的数据

 ets:delete(Tab) -> true                                            %%删除表

下面的一个例子来实现这些功能

1> rd(student, {id, name, pwd, age, sex=man}).                         %%定义一个record
student
2> ets:new(stu, [set, public, named_table, {keypos, #student.id}]).     %%创建一个table
stu
3> Stu1=#student{id='0001', name=nike, pwd='0001', age=18}.             %% 创建一个record
#student{id = '0001',name = nike,pwd = '0001',age = 18,
         sex = man}
4> ets:insert(stu, Stu1).                                               %% 向Table中添加一条数据
true
5> ets:lookup(stu, '0001').                                              %% 查找数据
[#student{id = '0001',name = nike,pwd = '0001',age = 18,
          sex = man}]
6> io:format("~p~n",[ets:tab2list(stu)]).                                %% 打印table 中的数据
[{student,'0001',nike,'0001',18,man}]
ok
7> ets:lookup(stu, '0001').
[#student{id = '0001',name = nike,pwd = '0001',age = 18,
          sex = man}]
8> ets:update_element(stu,'0001',{#student.pwd, 'nike'}).                %% 更新数据
true
9> ets:lookup(stu, '0001').
[#student{id = '0001',name = nike,pwd = nike,age = 18,
          sex = man}]
10> ets:delete(stu, '0001').
true
11> ets:lookup(stu, '0001').                                             %% 删除数据
[]
12> ets:delete(stu).                                                     %% 删除表
true
13> 

转载于:https://www.cnblogs.com/hanbird/p/3844860.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值