swoole内存表操作
①:Table->create 创建内存表
function Table->create() : bool;
定义好表的结构后,执行create向操作系统申请内存,创建表
调用create之前不能使用set、get等数据读写操作方法
调用create之后不能使用column方法添加新字段
系统内存不足,申请失败,create返回false
申请内存成功,create返回true
②:Table->column 内存表增加一列
bool Table->column(string $name, int $type, int $size = 0);
$name指定字段的名称
$type指定字段类型,支持3种类型,Table::TYPE_INT, Table::TYPE_FLOAT, Table::TYPE_STRING
$size指定字符串字段的最大长度,单位为字节。字符串类型的字段必须指定$size
Table::TYPE_INT默认为4个字节,可以设置1,2,4,8一共4种长度
Table::TYPE_STRING设置后,设置的字符串不能超过此长度
Table::TYPE_FLOAT会占用8个字节的内存
(1)Table使用共享内存来保存数据,在创建子进程前,务必要执行Table->create()
(2)Server中使用Table,Table->create() 必须在Server->start()前执行
内存尺寸
使用create方法创建表后,可以读取$table->memorySize属性获取实际占用内存的尺寸,单位为字节。
④:Table->set 设置行的数据,Table使用key-value的方式来访问数据
函数原型
Table->set(string $key, array $value) : bool
参数
$key,数据的key,相同的$key对应同一行数据,如果set同一个key,会覆盖上一次的数据 $value,必须是一个数组,必须与字段定义的$name完全相同
(1)swoole_table->set() 可以设置全部字段的值,也可以只修改部分字段
(2)swoole_table->set() 未设置前,该行数据的所有字段均为空
(3)set/get/del 是自带行锁,所以不需要调用lock加锁
(4)Key非二进制安全,必须为字符串类型,不得传入二进制数据
返回值
设置成功返回true 失败返回false,可能是由于Hash冲突过多导致动态空间无法分配内存,可以调大构造方法第二个参数
⑤:Table->get 获取一行数据
原型
array Table->get(string $key, string $field = null);
参数
$key:指定查询数据行的KEY,必须为字符串类型
返回值
$key不存在,将返回false 成功返回结果数组 当指定了$field时仅返回该字段的值,而不是整个记录