swoole内存表操作

发布时间 2023-03-23 12:44:20作者: it世界库

①: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时仅返回该字段的值,而不是整个记录