乐趣区

关于thinkphp6:SWOOLE高性能内存数据库的使用和配置教程

应用环境:thinkphp6.* + think-swoolev4.0

阐明
因为 PHP 语言不反对多线程,因而 Swoole 应用多过程模式,在多过程模式下存在过程内存隔离,在工作过程内批改 global 全局变量和超全局变量时,在其余过程是有效的。
对应的解决方案有:

  1. 应用 Redis 数据库、关系型数据库 Mysql
  2. 内存文件 /dev/shm
    首先数据库的操作都牵扯到 IOD 等待时间,因而举荐应用 Table

属性阐明

size 获取表格的最大行数

Swoole\Table->size;
memorySize

获取理论占用内存的尺寸,单位为字节
能够应用属性获取以后占用内存,利于调整配置。免得呈现:Unable to allocate memory 谬误

Swoole\Table->memorySize;
配置

文件地位:config/swoole.php

return [
    'tables' => [
        // 高性能内存数据库    
        'user' => [        
            'size' => 20480, // 指定数据库内存大小      
             'columns' => [['name' => 'fd', 'type' => Table::TYPE_INT],// 内置字段,自行设置        
                 ['name' => 'type', 'type' => Table::TYPE_INT],          
                 ['name' => 'uid', 'type' => Table::TYPE_INT,'size'=>1024],           
                 ['name' => 'to_uid', 'type' => Table::TYPE_INT],          
                 ['name' => 'tourist', 'type' => Table::TYPE_INT]       
            ]  
        ]
    ],
];

须要在配置文件中减少如上配置:user 为表名,size 为数据库大小,columns 为数据库字段
能够增加多个数据库
注意事项:
size 的代大小须要依据本身的应用状况而定,过小无奈主动扩容的。须要重启服务。
批改内存数据库必须重启 swoole 能力失效

应用场景

  1. socket 通信记录 fd 和用户的绑定关系
  2. 当作缓存来全局读取记录数据
  3. 能够当作计数器应用,原子级别。不会存在并发的问题框架中如何应用
use think\swoole\Table;
use Swoole\Table as SwooleTable;

// 拿到实例化后的 table 对象
$make = app()->make(Table::class);
// 获取 user 示意例
/** @var SwooleTable $table **/
$table = $make->get('user');

// 设置数据
$table->set('1',['fd'=>123,'type'=>1,'uid'=>1,'to_uid'=>0,'tourist'=>0]);

// 读取 key= 1 的数据
$table->get('1');

foreach ($table as $key => $value) {var_dump($key);// 设置的 key
    var_dump($value);// 设置的 value 数据
        
}

最初
如果你感觉这篇文章对你有点用的话,麻烦请给咱们的开源我的项目点点 star:http://github.crmeb.net/u/defu 不胜感激!

收费获取源码地址:http://www.crmeb.com

PHP 学习手册:https://doc.crmeb.com

技术交换论坛:https://q.crmeb.com

退出移动版