各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > PHP

easyswoole启动TableManager+Cache工具的原理

管理员 2023-09-05
PHP
139

easyswoole启动TableManager+Cache工具的原理

内容导读

收集整理的这篇技术教程文章主要介绍了easyswoole启动TableManager+Cache工具的原理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3011字,纯文字阅读大概需要5分钟

内容图文

本篇文章的主要内容是讲述easyswoole代码来了解如何启动TableManager,以及Cache工具的原理,具有一定的参考价值,感兴趣的朋友一定要了解一下。

EasySwoole 是一款基于Swoole Server 开发的常驻内存型PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失。EasySwoole 高度封装了Swoole Server 而依旧维持Swoole Server 原有特性,支持同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。

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

TableManager主要做了下面几件事
add方法
如果$list数组中有这个表名($name是一个表名或者叫做集合名),就初始化swoole_table,然后配置的字段类型数组进行创建

if(!isset($this->list[$name])){    $table = new Table($size);    foreach ($columns as $column => $item){        $table->column($column,$item['type'],$item['size']);    }    $table->create();    $this->list[$name] = $table;}

get方法
直接返回swoole_table的实例。

使用的地方有很多
前文提到的在系统设置Cache组件 Cache::getInstance()的时候

构造方法做了如下事情

$num = intval(Config::getInstance()->getConf("EASY_CACHE.PROCESS_NUM"));//Config默认配置是1,如果配置为小于等于0则不开启Cacheif($num <= 0){   return;}$this->cliTemp = new SplArray();//若是在主服务创建,而非单元测试调用if(ServerManager::getInstance()->getServer()){    //创建table用于数据传递    TableManager::getInstance()->add(self::EXCHANGE_TABLE_NAME,[        'data'=>[            'type'=>Table::TYPE_STRING,            'size'=>10*1024        ],        'microTime'=>[            'type'=>Table::TYPE_STRING,            'size'=>15        ]    ],2048);    //创建了一个__Cache的swoole_table表,字段为 data String 10240,microTime String 15的表    $this->processNum = $num;    for ($i=0;$i < $num;$i++){        ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class);    }}

ProcessManager也是一个很重要的概念。其实就是一个管理任务映射的工具。

这里可以看到ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class)

其实这里是通过ProcessManager,让swoole服务添加了一个进程。swoole的addProcess方法,文档链接https://wiki.swoole.com/wiki/page/390.html

提前略带讲解一下Cache的set方法加深概念

//讲解一下Cache的set方法加深概念if(!ServerManager::getInstance()->isStart()){//兼容测试模式。也就是不开启服务的情景下直接是clitemp中取缓存数据    $this->cliTemp->set($key,$data);}if(ServerManager::getInstance()->getServer()){    $num = $this->keyToProcessNum($key);//这里是通过key然后hash到应该投放的Cache进程中去。    $msg = new Msg();    $msg->setCommand('set');    $msg->setArg('key',$key);    $msg->setData($data);    //下面一句话还是挺复杂的,根据key名hash到ProcessManager对应的映射,然后获取到swoole_process的实例,以swoole的write函数向管道内写入数据。    ProcessManager::getInstance()->getProcessByName($this->generateProcessName($num))->getProcess()->write(swoole_serialize::pack($msg));    //在写完数据后,在CacheProcess的onReceive方法中可以看到对应setCommand的操作细节。其实数据都被写到了一个Arr数组中。下篇接着讲一下Cache的实现细节。这节还是主要讲TableManager和它的相关作用.}

相关教程:PHP视频教程

以上就是easyswoole 启动TableManager+Cache工具的原理的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的easyswoole启动TableManager+Cache工具的原理全部内容,希望文章能够帮你解决easyswoole启动TableManager+Cache工具的原理所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 lecms, classcms, fastadmin, pbootcms, phpcms, eyoucms, yzmcms, PHP, xunruicms, jizhicms, dedecms, wordpress, hkcms, yzncms, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

扫码关注

qrcode

QQ交谈

回顶部