当前位置: 首页 > Linux

PHP简单的使用shmop函数创建共享内存来降低服务器负载

时间:2023-04-06 06:55:47 Linux

在之前的一篇博客【了解共享内存的概念及优缺点】中,已经对共享内存的概念进行了讲解。下面是共享内存的简单使用(其实其他工具,比如redis也可以)。PHP有两套内存共享的接口。一种是shm,其实就是变量共享,将对象变量序列化后再存储。使用起来相当方便,但是序列化存储对于效率优先的内存访问操作来说是没有意义的。另一种是shmop,Linux和Windows通用,但功能比shm弱。在Linux上,这些功能是直接调用shm*系列函数实现的,在Winodows上,也是通过封装系统函数实现的。打了同样的电话。我首先在这里使用了shmop。创建共享内存段需要使用函数shmop,然后需要启用扩展,可以参考【OpenshmopextensionforPHPtoachievesharedmemory】。shmop的主要函数有shmop_open(创建或打开共享内存块)、shmop_write(写入共享内存块输入数据)、shmop_read(从共享内存块读取数据)、shmop_size(获取共享内存块的大小)),shmop_close(关闭共享内存块),shmop_delete(删除共享内存块)_memory_key,'a',0644,$this->_memory_size);如果($shmid===FALSE){$shmid=@shmop_open($this->_memory_key,'c',0644,$this->_memory_size);$data=$this->return_skill_list();shmop_write($shmid,json_encode($data),0);@shmop_close($shmid);返回$数据;}$data=json_decode(preg_replace('/[\x00-\x1F\x80-\x9F]/u','',trim(shmop_read($shmid,0,$this->_memory_size))),true);@shmop_close($shmid);返回$数据;}publicfunctionreturn_skill_list(){//这是一个非常大的数组,其实就是把这个数组json化,存入共享内存段。其实你可以用redis等其他缓存...这里我只是用shmopreturnarray(1=>array('id'=>'1','animation'=>'13','skill_type'=>'1','power_type'=>'1','site'=>'1','type'=>'1','paramete'=>'0','paramete2'=>'0','paramete3'=>'0','chance'=>'0','ratio'=>'1',),2=>array('id'=>'2','animation'=>'3','skill_type'=>'2','power_type'=>'1','site'=>'1','type'=>'1','paramete'=>'0','paramete2'=>'0','paramete3'=>'0','chance'=>'0','ratio'=>'2',),………………............当然你要考虑如果数据更新了,内存段也要删除,而Updatingdata.......可以通过删除shmop_delete,这个需要你根据项目的应用来考虑,我这里只是简单的阅读,没有复杂的读写,否则可能会出现进程互斥等意想不到的冲突~复杂的话,那么可以考虑信号量~如果在项目中遇到主从场景,可以参考这篇文章http://tubaluer.iteye.com/blo...