一、個人案例
//建立記憶體表物件
$table=new swoole_table(1024);①
//在記憶體表中定義三列
$table->column('id',\swoole\table::type_int,4);②
$table->column('name',\swoole\table::type_string,12);
$table->column('age',\swoole\table::type_int,4);
//在記憶體中建立記憶體表
$table->create();③
//設定行的資料,table使用key-value的方式來訪問資料。
$table->set("liuao",['id'=>1,'name'=>'liuao','age'=>20]);④
//獲取一行資料
print_r($table->get('liuao'));⑤
①:table->__construct 建立記憶體表。
函式原型
function table->__construct(int $size, float $conflict_proportion = 0.2)
引數
$size引數指定**的最大行數,如果$size不是為2的n次方,如1024、8192,65536等,底層會自動調整為接近的乙個數字,如果小於1024則預設成1024,即1024是最小值
table占用的記憶體總數為 (結構體長度 + key長度64位元組 + 行尺寸$size) * (1.2預留20%作為hash衝突) * (列尺寸),如果機器記憶體不足table會建立失敗
set操作能儲存的最大行數與$size正相關,但不完全一致,如$size為1024實際可儲存的行數小於1024
(1)table基於行鎖,所以單次set/get/del在多執行緒/多程序的環境下是安全的
(2)set/get/del等方法是原子操作,使用者**中不需要擔心資料加鎖和同步的問題
②: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個位元組的記憶體
③:table->create 建立記憶體表
函式原型
function table->create() : bool;
定義好錶的結構後,執行create向作業系統申請記憶體,建立表
呼叫create之前不能使用set、get等資料讀寫操作方法
呼叫create之後不能使用column方法新增新字段
系統記憶體不足,申請失敗,create返回false
申請記憶體成功,create返回true
(1)table使用共享記憶體來儲存資料,在建立子程序前,務必要執行table->create()
(2)server中使用table,table->create() 必須在server->start()前執行
記憶體尺寸
使用create方法建立表後,可以讀取$table->memorysize屬性獲取實際占用記憶體的尺寸,單位為位元組。
echo $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時僅返回該字段的值,而不是整個記錄
swoole學習筆記
一 服務端 0.swoole常用的配置項 daemonize true 守護程序化 worker num swoole配置引數 設定啟動的worker程序數 如 1 個請求耗時 100ms,要提供 1000qps 的處理能力,那必須配置 100 個程序或更多。reactor num 執行緒數 tas...
swoole學習筆記一
管理程序manager 非同步reactor執行緒 全非同步非阻塞 同步或者非同步worker程序,沒有用到epoll task worker程序 完全是同步阻塞模式 factory task 如果reactor最大允許監聽的事件數比reactor的事件數小的話用poll select,否則用epo...
swoole 學習筆記(1)
解壓 configure make make install tips php i grep php.ini 檢視php.ini 配置檔案位置 獲取原始碼 swoole官網 phpize 生成configure 檔案 configure make make install configure ena...