<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Table swoole_table一個基于共享內存和鎖實現的超高性能,并發數據結構。用于解決多進程/多線程數據共享和同步加鎖問題。 >最新版本已移除lock和unlock方法,請使用Swoole\Lock來實現數據同步 ## swoole_table的優勢 * 性能強悍,單線程每秒可讀寫200萬次 * 無需加鎖,swoole_table內置行鎖自選鎖,所有操作均是多線程/多進程安全。用戶層完全不需要考慮數據同步問題。 * 支持多進程,swoole_table可以用于多進程之間共享數據 >swoole_table使用行鎖,而不是全局鎖,僅當2個進程在同一CPU時間,并發讀取同一條數據才會進行發生搶鎖 >swoole_table在1.7.5版本后可用 # 常量列表 swoole_table 目前只支持以下3種類型,個人感覺有點兒類似于表字段類型。 * swoole_table::TYPE_INT 整形字段 * swoole_table::TYPE_FLOAT 浮點字段 * swoole_table::TYPE_STRING 字符串字段 # 函數列表 * [__construct](#__construct) * [column](#column) * [create](#create) * [set](#set) * [get](#get) * [del](#del) * [lock](#lock) * [unlock](#unlock) ## __construct **功能描述**:內存表構造函數,創建內存表對象對象。 **函數原型**: ```php swoole_table->__construct(int $size) ``` **返回**:一個swoole_table對象。 **參數說明**: | 參數 | 說明 | | -------- | -------- | | int size | 表格的最大行數 | **說明**: * 創建對象后會創建一個Mutex鎖。 * $table->lock()/$table->unlock() 在這之后即可使用。 > swoole_table基于行鎖,所以單次set/get/del在多線程/多進程的環境下是安全的 set/get/del是原子操作,用戶代碼中不需要擔心數據加鎖和同步的問題 **樣例**: ```php $table = new swoole_table(1024); ``` ## column **功能描述**:給內存表增加一列 **函數原型**: ```php bool swoole_table->column(string $name, int $type, $size); ``` **參數說明**: | 參數 | 說明 | | -------- | -------- | | string name | 新增的字段名稱 | | int type | swoole_table支持的3種字段類型,詳情見[常量列表](#%E5%B8%B8%E9%87%8F%E5%88%97%E8%A1%A8) | | int size | 這是根據type的不同占用的字節數 | **說明**: > swoole_table::TYPE_INT默認為4個字節,可以設置1,2,4,8一共4種長度 swoole_table::TYPE_STRING設置后,set操作不能設置的值不能超過此長度 swoole_table::TYPE_FLOAT會占用8個字節的內存 **樣例**: ```php $table->column('id', swoole_table::TYPE_INT, 4); ``` ## create **功能描述**:創建內存表。 **函數原型**: ```php swoole_table->create() ``` **說明**: 創建好表的結構后,執行create后創建表。 > swoole_table使用共享內存來保存數據,在創建子進程前,務必要執行swoole_table->create() swoole_server中使用swoole_table,swoole_table->create() 必須在swoole_server->start()前執行 **樣例**: ```php $table = new swoole_table(1024); $table->column('id', swoole_table::TYPE_INT, 4); //1,2,4,8 $table->column('name', swoole_table::TYPE_STRING, 64); $table->column('num', swoole_table::TYPE_FLOAT); $table->create(); $worker = new swoole_process('child1', false, false); $worker->start(); ``` ## set **功能描述**:設置行的數據,(swoole_table使用key-value的方式來訪問數據,個人感覺key類似于db表記錄的id,value則是整條記錄的所有列的值。) **函數原型**: ```php swoole_table->set(string $key, array $value) ``` **參數說明**: | 參數 | 說明 | | -------- | -------- | | string key | 數據的key,相同的$key對應同一行數據,如果set同一個key,會覆蓋上一次的數據 | | array $value | 必須是一個數組,value中的鍵名必須與字段定義的$name完全相同 | **說明**: > swoole_table->set() 可以設置全部字段的值,也可以只修改部分字段 swoole_table->set() 未設置前,該行數據的所有字段均為空 ## get **功能描述**:獲取一行數據。 **函數原型**: ```php array swoole_table->get($key); ``` **返回**: * 如果找到則返回array 數組。 * 如果$key不存在,將返回false。 ## del **功能描述**:刪除一行數據。 **函數原型**: ```php bool swoole_table->del(string $key) ``` **返回**: * $key對應的數據不存在,將返回false。 * 成功刪除返回true ## lock **功能描述**:鎖定整個表。 **函數原型**: ```php swoole_table->lock() ``` **使用場景**:當多個進程同時要操作一個事務性操作時,一定要加鎖,將整個表鎖定。操作完成后釋放鎖。 **說明**: * lock() 是互斥鎖,所以只能保護lock/unlock中間的代碼是安全的。lock/unlock之外的操作是不能保護的。 * set/get/del操作不使用互斥鎖,所以lock之后無法阻止其他進程調用這些函數。 **注意**: > lock/unlock必須成對出現,否則會發生死鎖,這里務必要小心 lock/unlock之間不應該加入太多操作,避免鎖的粒度太大影響程序性能 lock/unlock之間的代碼,應當try/catch避免拋出異常導致跳過unlock發生死鎖 ## unlock **功能描述**:釋放鎖。 **函數原型**: ```php swoole_table->unlock() ``` ## 整體使用案例 ```php $table = new swoole_table(1024); $table->column('id', swoole_table::TYPE_INT, 4); //1,2,4,8 $table->column('name', swoole_table::TYPE_STRING, 64); $table->column('num', swoole_table::TYPE_FLOAT); $table->create(); $table->set('tianfenghan@qq.com', array('id' => 145, 'name' => 'rango', 'num' => 3.1415)); $table->set('350749960@qq.com', array('id' => 358, 'name' => "Rango1234", 'num' => 3.1415)); $table->set('hello@qq.com', array('id' => 189, 'name' => 'rango3', 'num' => 3.1415)); $data = $table->get('350749960@qq.com'); $table->del('hello@qq.com'); $table->lock(); /** 事務性處理。 **/ $table->unlock(); count($table); // 獲得有多少條記錄。 ``` ## 遍歷Table swoole_table類實現了迭代器和Countable接口,可以使用foreach進行遍歷,使用count計算當前行數。 >遍歷Table 依賴pcre 如果發現無法遍歷table,檢查機器是否安裝pcre-devel ~~~ foreach($table as $row) { var_dump($row); } echo count($table); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看