什么是ETS
- ETS 用于 高效存储 海量 的Erlang数据
- ETS 常驻内存,只要有足够的内存,就可以无限制的存储
- ETS 可以被多个进程共享,这就让 跨进程 的公共 数据访问 变得 非常高效
- ETS 类的数据以键值对的方式存在的
ETS的类型
类型 | 名称 | 解释 |
---|---|---|
set | 异键表 | 要求所有的键都是唯一的 |
ordered_set | 有序异键表 | 1.要求所有的键都是唯一的 2. 按照Key的名称进行排序 |
bag | 同键表 | 键可以相同,但是元素不能相同 |
duplicate_bag | 副本同键表 | 键可以相同,并且元素不能相同 |
ETS的访问权限
类型 | 解释 |
---|---|
private | 私有表,只有主管进程可以读取和写入 |
public | 公共表,任何知道该表标识符的进程都能读取和写入 |
protected | 受保护的表,任何知道该表标识符的进程都能读取,但是只有主管进程可以写入 |
ETS操作
创建表的进程被称为该表的主管
创建表时所设置的选项在创建后是 无法更改 的
如果主管进程挂了,表所占用的空间自动释放
- 创建ets
%% TableName: 表的名字 %% 类型: set | ordered_set | bag | duplicate_bag %% 访问权限:private | public | protected %% K:设置键的位置,通常键的位置是1 %% named_table:如果设置了该项,TableName也可以作为表的表示 TableID = ets:new(TableName, [类型, 访问权限, {keypos, K}, named_table]).
- 向ets插入数据
%% TableID: 表的表示 %% 若该ets设置了 named_table,可以直接通过TableName调用 %% Key:插入数据的键 %% Value:插入数据的值 ets:insert(TableName/TableID, {Key, Value}). ets:insert(TableName/TableID, [{Key1, Value2}, {Key2, Value2}, ...]).
- 判断ets中是否存在指定的Key
%% 返回 true 或 false IsExits = ets:member(TableName/TableID, Key).
- 查看ets中Key对应的值
%% 返回 Table IsExits = ets:lookup(TableName/TableID, Key).
- 删除ets中指定的Key
%% 无论是否包含该Key,都会返回true ets:delete(TableName/TableID, Key).
- 删除ets中指定的键值对
ets:delete_object(TableName/TableID, 键值对元组).
- 清空ets中所有数据
%% 无论是否包含该Key,都会返回true ets:delete_all_objects(TableName/TableID).