Swoole进阶——02 内存之Table
介绍
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相关推荐
- Redis进阶之内存模型
转载自 Redis进阶之内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时, ...
- Java进阶3. 内存回收机制
Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...
- 李玉婷MYSQL进阶02:条件查询
李玉婷MYSQL进阶02:条件查询 语法结构: select: 查询列表 from:表名 where: 筛选条件 分类: 一.条件表达式 示例:salary>10000 条件运算符:> & ...
- iOS 进阶—— iOS内存管理
1 似乎每个人在学习 iOS 过程中都考虑过的问题 alloc retain release delloc 做了什么? autoreleasepool 是怎样实现的? __unsafe_unretai ...
- php 后端 轻量 框架,GitHub - 22cloud/mixphp: 轻量 PHP 框架,基于 Swoole 的常驻内存型 PHP 高性能框架 (开发文档完善)...
高性能 • 轻量级 • 命令行 MixPHP 是什么 MixPHP 秉承 "普及 PHP 常驻内存型解决方案,促进 PHP 往更后端发展" 的理念而创造,采用 Swoole 扩展作 ...
- Linux学习总结02——内存管理——Linux在X86上的虚拟内存管理
Linux内存管理之二:Linux在X86上的虚拟内存管理 本文档来自网络,并稍有改动. 前言 Linux支持很多硬件运行平台,常用的有:Intel X86,Alpha,Sparc等.对于不能够通用的 ...
- Java进阶 JVM 内存与垃圾回收篇(一)
JVM 1. 引言 1.1 什么是JVM? 定义 Java Vritual Machine - java 程序的运行环境(Java二进制字节码的运行环境) 好处 一次编译 ,到处运行 自动内存管理,垃 ...
- modeler java堆空间,JVM|02内存模型
JVM内存模型 概述 Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保 ...
- Java进阶02 异常处理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机 ...
最新文章
- jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
- WEB前后端分离开发中的验证与安全问题
- 华为鸿蒙ai字幕,EMUI11一个值得吹爆的功能?AI字幕,支持翻译英日韩
- 5G时代,如何让人工智能服务人类而不是开除人类
- Centos 利用yum源安装 nginx stream模块
- 字符数组和字符串的小细节
- 南漂DBA——除了996,还可以收获这些...
- python封装sql脚本_flask-sqlalchemy如何使用原生的sql语句然后封装?
- 会议管理SaaS平台Social Tables融资1300万美元
- 计算机组成原理核心总结
- 【日常科普】浏览器网页视频自定义倍速播放(无需任何插件)
- SMART PLC PID算法基本解析(附公式)
- 求教origin拟合蠕变柔量(burgers模型)。
- 浏览器之硬件加速机制
- 冯小刚“开撕”崔永元,娱乐圈炒作就要进入3.0时代
- 【12月原创】RT-thread - 柿饼UI ——范进中举
- 6个“纽扣”卖2600 索尼动捕设备要捕捉谁?
- 我承认这样真的很安详 和楼下老爷爷一样
- java多功能计算器编程,java 编程 计算器 本人菜菜!!!
- vue 的vc与vm
热门文章
- 自我实现者共同的性格特征
- Quartz.NET总结(五)基于Quartz.net 的开源任务管理平台
- 共享扫码娃娃机无现金化扫码支付
- 计算机里的word怎么重装,word能卸载重装吗 word卸载重装
- keep sb updated_keep you update 和keep you updated哪个正确
- C/C++ 学习日记3:制作带有界面的植物大战僵尸助手(基于MFC)
- VB中传值(ByVal)和传地址(ByRef)的区别
- windows下安装VIM
- VMware安装2003,win7,2008,kali
- 阳光系统下载 Win7电脑锁屏壁纸怎么设置