介绍

swoole_table一个基于共享内存和锁实现的超高性能,并发数据结构。用于解决多进程/多线程数据共享和同步加锁问题。

Swoole的Memory模块其实都是用于进程之间的通信,不同进程可以通过Memory模块共享数据

使用步骤

1. 创建内存表对象

swoole_table->__construct(int $size, float $conflict_proportion = 0.2)

注意:

size最小为1024,且必须是1024的正整数倍数。

2. 内存表增加一列

swoole_table->column(string $name, int $type, int $size = 0);
  • $name指定字段的名称

  • $type指定字段类型,支持3种类型,
    swoole_table::TYPE_INT,
    swoole_table::TYPE_FLOAT
    swoole_table::TYPE_STRING

  • $size指定字符串字段的最大长度,单位为字节。字符串类型的字段必须指定$size

注意:

  • swoole_table::TYPE_INT默认为4个字节,可以设置1,2,4,8一共4种长度

  • swoole_table::TYPE_STRING设置后,设置的字符串不能超过此长度

  • swoole_table::TYPE_FLOAT会占用8个字节的内存

3. 申请内存空间

function swoole_table->create()

定义好表的结构后,执行create向操作系统申请内存,创建表。

调用create之前不能使用set、get等数据读写操作方法。

调用create之后不能使用column方法添加新字段。

系统内存不足,申请失败,create返回false。

申请内存成功,create返回true。

swoole_table使用共享内存来保存数据,在创建子进程前,务必要执行swoole_table->create()。

swoole_server中使用swoole_table,swoole_table->create() 必须在swoole_server->start()前执行。

4. 设置或更新一行的数据

// 函数风格
swoole_table->set(string $key, array $value)// 数组风格
$table[key] = [field => value,....
];
  • $key,数据的key,相同的$key对应同一行数据,如果set同一个key,会覆盖上一次的数据

  • $value,必须是一个数组,必须与字段定义的$name完全相同

  • swoole_table->set() 可以设置全部字段的值,也可以只修改部分字段

  • swoole_table->set() 未设置前,该行数据的所有字段均为空

5. 获取一行的数据

// 函数风格
swoole_table->get(string $key, string $field = null);// 数组风格
$table[key];
  • 如果$key不存在,将返回false

  • 当指定了$field时仅返回该字段的值,而不是整个记录

6. 自增

function swoole_table->incr(string $key, string $column, mixed $incrby = 1);
  • $key 指定数据的key,如果$key对应的行不存在,默认列的值为0

  • $column 指定列名,仅支持浮点型和整型字段

  • $incrby 增量,默认为1。如果列为整形,$incrby必须为int型,如果列为浮点型,$incrby必须为float类型

  • 失败返回false,成功返回最终的结果数值

7. 自减

function swoole_table->decr(string $key, string $column, mixed $decrby = 1);
  • $key 指定数据的key,如果$key对应的行不存在,默认列的值为0

  • $column 指定列名,仅支持浮点型和整型字段

  • $decrby 减量,默认为1。如果列为整形,$decrby必须为int型,如果列为浮点型,$decrby必须为float类型

  • 失败返回false,成功返回最终的结果数值

8. 是否存在某个key

int swoole_table->exist(string $key);

9. 删除数据

swoole_table->del(string $key)

$key对应的数据不存在,将返回false

成功删除返回true。

10. 统计table条数

int function swoole_table->count();

完整例子

<?php// 1.创建内存表
$table = new swoole_table(1024);// 2.内存表增加一列
$table->column('id', $table::TYPE_INT, 4);
$table->column('name', $table::TYPE_STRING, 64);
$table->column('age', $table::TYPE_INT, 3);// 3.申请内存空间
$table->create();// 4.设置行的数据
$table->set('tim_test',['id'=>1,'name'=>'tim','age'=>23]);// 另一种形式设置
$table['chen_test'] = ['id' => 2,'name' => 'chen','age' => 21
];// 5.数据增加
//$table->incr('chen_test','age',2);// 6.数据减少
$table->decr('tim_test','age',2);// 7.查询数据
var_dump($table->exist('chen_test'));// 8.删除数据
var_dump($table->del('chen_test'));// 9.查询数据
var_dump($table->exist('chen_test'));// 10. 获取行的数据
print_r($table->get('tim_test'));// 另一种形式获取
//print_r($table['chen_test']);

Swoole进阶——02 内存之Table相关推荐

  1. Redis进阶之内存模型

    转载自   Redis进阶之内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时, ...

  2. Java进阶3. 内存回收机制

    Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...

  3. 李玉婷MYSQL进阶02:条件查询

    李玉婷MYSQL进阶02:条件查询 语法结构: select: 查询列表 from:表名 where: 筛选条件 分类: 一.条件表达式 示例:salary>10000 条件运算符:> & ...

  4. iOS 进阶—— iOS内存管理

    1 似乎每个人在学习 iOS 过程中都考虑过的问题 alloc retain release delloc 做了什么? autoreleasepool 是怎样实现的? __unsafe_unretai ...

  5. php 后端 轻量 框架,GitHub - 22cloud/mixphp: 轻量 PHP 框架,基于 Swoole 的常驻内存型 PHP 高性能框架 (开发文档完善)...

    高性能 • 轻量级 • 命令行 MixPHP 是什么 MixPHP 秉承 "普及 PHP 常驻内存型解决方案,促进 PHP 往更后端发展" 的理念而创造,采用 Swoole 扩展作 ...

  6. Linux学习总结02——内存管理——Linux在X86上的虚拟内存管理

    Linux内存管理之二:Linux在X86上的虚拟内存管理 本文档来自网络,并稍有改动. 前言 Linux支持很多硬件运行平台,常用的有:Intel X86,Alpha,Sparc等.对于不能够通用的 ...

  7. Java进阶 JVM 内存与垃圾回收篇(一)

    JVM 1. 引言 1.1 什么是JVM? 定义 Java Vritual Machine - java 程序的运行环境(Java二进制字节码的运行环境) 好处 一次编译 ,到处运行 自动内存管理,垃 ...

  8. modeler java堆空间,JVM|02内存模型

    JVM内存模型 概述 Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保 ...

  9. Java进阶02 异常处理

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机 ...

最新文章

  1. jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
  2. WEB前后端分离开发中的验证与安全问题
  3. 华为鸿蒙ai字幕,EMUI11一个值得吹爆的功能?AI字幕,支持翻译英日韩
  4. 5G时代,如何让人工智能服务人类而不是开除人类
  5. Centos 利用yum源安装 nginx stream模块
  6. 字符数组和字符串的小细节
  7. 南漂DBA——除了996,还可以收获这些...
  8. python封装sql脚本_flask-sqlalchemy如何使用原生的sql语句然后封装?
  9. 会议管理SaaS平台Social Tables融资1300万美元
  10. 计算机组成原理核心总结
  11. 【日常科普】浏览器网页视频自定义倍速播放(无需任何插件)
  12. SMART PLC PID算法基本解析(附公式)
  13. 求教origin拟合蠕变柔量(burgers模型)。
  14. 浏览器之硬件加速机制
  15. 冯小刚“开撕”崔永元,娱乐圈炒作就要进入3.0时代
  16. 【12月原创】RT-thread - 柿饼UI ——范进中举
  17. 6个“纽扣”卖2600 索尼动捕设备要捕捉谁?
  18. 我承认这样真的很安详 和楼下老爷爷一样
  19. java多功能计算器编程,java 编程 计算器 本人菜菜!!!
  20. vue 的vc与vm

热门文章

  1. 自我实现者共同的性格特征
  2. Quartz.NET总结(五)基于Quartz.net 的开源任务管理平台
  3. 共享扫码娃娃机无现金化扫码支付
  4. 计算机里的word怎么重装,word能卸载重装吗 word卸载重装
  5. keep sb updated_keep you update 和keep you updated哪个正确
  6. C/C++ 学习日记3:制作带有界面的植物大战僵尸助手(基于MFC)
  7. VB中传值(ByVal)和传地址(ByRef)的区别
  8. windows下安装VIM
  9. VMware安装2003,win7,2008,kali
  10. 阳光系统下载 Win7电脑锁屏壁纸怎么设置