easyswoole启动TableManager +缓存工具的原理是什么

  介绍

这篇文章给大家分享的是有关easyswoole启动TableManager +缓存工具的原理是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

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

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

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

如果(!收取($ this→列表[名字]美元)){   (表=new表美元大小);   foreach(列如美元列=比;$ item) {   表→美元列(列,项目美元[& # 39;类型# 39;],美元项目[& # 39;大小# 39;]);   }   美元表→创建();   美元这个→列表[名字]美元=$表;   }

得到方法
,,直接返回swoole_table的实例。

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

构造方法做了如下事情

 $ num=intval中(配置::getInstance ()→getConf (“EASY_CACHE.PROCESS_NUM"));//配置默认配置是1,如果配置为小于等于0则不开启缓存
  如果(num & lt;美元=0){
  返回;
  }
  $ this→cliTemp=new SplArray ();//若是在主服务创建,而非单元测试调用
  如果(ServerManager:: getInstance ()→getServer ()) {//创建表用于数据传递
  TableManager: getInstance()→添加(self:: EXCHANGE_TABLE_NAME, [
  & # 39;数据# 39;=祝辞(
  & # 39;类型# 39;=祝辞表::TYPE_STRING,
  & # 39;大小# 39;=祝辞10 * 1024
  ),
  & # 39;microTime& # 39;=祝辞(
  & # 39;类型# 39;=祝辞表::TYPE_STRING,
  & # 39;大小# 39;=祝辞15
  ]
  ),2048);//创建了一个__Cache的swoole_table表,字段为10240年数据字符串,字符串microTime 15的表
  $ this→processNum=$ num;
  (我=0;美元我& lt;num;美元我+ +){
  ProcessManager: getInstance ()→addProcess ($ this→generateProcessName(我美元),CacheProcess::类);
  }
  }

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

这里可以看到ProcessManager:: getInstance ()→addProcess ($ this→generateProcessName(我美元),CacheProcess::类)

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

 easyswoole启动TableManager +缓存工具的原理是什么

提前略带讲解一组下缓存的方法加深概念

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

感谢各位的阅读!关于easyswoole启动TableManager +缓存工具的原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

easyswoole启动TableManager +缓存工具的原理是什么