Table [编辑本页]

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

最新版本已移除lockunlock方法,请使用Swoole\Lock来实现数据同步

swoole_table的优势

  • 性能强悍,单线程每秒可读写200万次
  • 无需加锁,swoole_table内置行锁自选锁,所有操作均是多线程/多进程安全。用户层完全不需要考虑数据同步问题。
  • 支持多进程,swoole_table可以用于多进程之间共享数据

swoole_table使用行锁,而不是全局锁,仅当2个进程在同一CPU时间,并发读取同一条数据才会进行发生抢锁
swoole_table在1.7.5版本后可用

遍历Table

swoole_table类实现了迭代器和Countable接口,可以使用foreach进行遍历,使用count计算当前行数。

遍历Table 依赖pcre 如果发现无法遍历table,检查机器是否安装pcre-devel

foreach($table as $row)
{
    var_dump($row);
}
echo count($table);

  • little

    希望swoole_table增加incr方法,用于内存级计数器

  • Rango-韩天峰

    这个特性在开发计划中,感谢你的关注。

  • 杨泽涛

    希望swoole_table增加incr方法把实现方式说一下,方便新手学习指导

  • winters

    能说一说swoole_table的生命周期吗?是随着创建进程一起销毁吗?

  • 大盛V5

    找了半天手册没找到swoole_talbe对象中记录条数方法。实际源码中是有的swoole_table->count() 备注下。

  • 夏向红

    多机部署的时候,怎么实现数据同步,保持多机一致性

  • 咸鱼

    分布式的应该还没出来

  • 咸鱼

    同求

  • 夏威

    强烈建议提供一个clearAll方法来删除表里面的所有数据

  • 明明

    能根据一个值 找到key吗

  • Hoheart

    什么时候发布稳定版本啊?

  • php

    rango要加强文档的完善,而不是一直加功能呀。。PHP 简单易用,swoole 也要这样,才会有更多的人加入

  • 老船长

    至少要加个 Keys的方法,获取所有Key,

  • jsp士普

    韩天峰-Rango微博:swoole_table模块经过大规模压测,目前已稳定成熟。通过了并发8进程随机读写1600万次的测试。swoole_table基于共享内存,读写接口均为key-value形式,get/set操作使用行锁自选锁。彻底解决PHP没有高性能并发库的问题。

  • jsp士普

    文档写的有点问题, 获取当前行数$table->count()

  • 飞鱼

    多个进程间怎么共享table呢?

  • 5+

    1.8.6已踩坑。。。在迭代器里执行del会导致不可预期的结果

    foreach ($swoole_table as $k => $v) { $swoole_table->del($k);//你想清空所有行?别做梦了。。。 }

  • Robert

    发现一个问题,在swoole创建的不同进程中,同一个table读取的内容不一致?

  • Robert

    mac osx下。

  • Robert

    同一个swoole_table,在Server->Start()前已经创建好。 运行中发现:(1)在task进程中读取的值和worker进程中的值不同,(2) 不同worker进程中读取的值也不同。 mac osx和CentOS7下结果都一样。 请问如何才能读到一致的值?

  • Robert

    已经找到原因,是调用del() 导致的。 swoole_table 没问题。谢谢

  • lovejocky

    1.8.7在生产环境下,可以使用swoole_table吗?

  • YY

    现在swoole_table可以用了吗?

  • hill

    早可以了

  • 松帅

    foreach遍历期间,其他线程做操作会有问题么,比如删除一个条目

  • 依然D调

    我也入坑了

  • 俩鱼

    没有亲缘关系的进程之间,可以通过swoole_table共享数据吗?[挖鼻屎]

  • 俩鱼

    同问,没有亲缘关系的进程之间,可以通过swoole_table共享数据吗?[挖鼻屎]

  • 松林's blog

    这里有个坑 incr自增之后 del将始终返回false

  • Bacysoft

    Table 什么时候可以用于生产环境?现在是否已经足够稳定了?

  • 風色

    怎么也要有个max min吧... 我放20W数据, Key/Value, 不可能通过便利来获取最大KEY和最小KEY吧. Redis的有序集合(sorted set) 就很好, 能搬到swoole的table里. 机会秒杀绝大多数的计算场景.

  • 有个坑:在arm平台上,如果行大小未设为4的整数倍,会在创建表时产生内存不对齐,从而在get,set的原子锁调用时产生SIGBUS错误。