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

2022-04-21 14:51:21 浏览数 (2)

使用环境:thnkphp6.* think-swoolev4.0

说明 由于 PHP 语言不支持多线程,因此 Swoole 使用多进程模式,在多进程模式下存在进程内存隔离,在工作进程内修改 global 全局变量和超全局变量时,在其他进程是无效的。 对应的解决方案有: 1. 使用Redis数据库、关系型数据库Mysql 2. 内存文件/dev/shm 首先数据库的操作都牵扯到IOD等待时间,因此推荐使用Table

属性说明

size 获取表格的最大行数

代码语言:javascript复制
SwooleTable->size;
memorySize

获取实际占用内存的尺寸,单位为字节 可以使用属性获取当前占用内存,利于调整配置。以免出现 :Unable to allocate memory 错误

代码语言:javascript复制
SwooleTable->memorySize;

配置

文件位置:config/swoole.php

代码语言:javascript复制
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. 可以当作计数器使用,原子级别。不会存在并发的问题框架中如何使用

代码语言:javascript复制
use thinkswooleTable;
use SwooleTable 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数据
        
}

0 人点赞