课程咨询 :13623629309

太原PHP培训 > 达内新闻 > PHP给你带来的惊喜(一)
  • PHP给你带来的惊喜(一)

    发布:公众账号      来源:公众账号      时间:2016-11-14

  • PHP给你带来的惊喜(一)

    分布式、CAP理论、高可用、最终一致性、强一致性、因果一致性、异地多活... 听多了,这次给大家带来的是一篇单机共享内存的使用场景和分析,刷新你的胃口!!!有木有!!!

    PS:丰富的一线技术、多元化的表现形式,尽在“ HULK一线技术杂谈,点关注哦!

    使用场景

    监控汇总

    目前正在用的一个场景,针对某一台机器上的错误进行汇总并报警,我们把一分钟之内的相同报警合并成一条,用共享内存来暂存,非常实用且高效。

    PHP SESSION

    如果你是单机的服务,且又启用了session,那么可以把session换成共享内存的来存储,会比文件要快上不少,这里还要强调是单机,这是最大的软肋,但就功能上来讲没有memcache方便。

    什么是共享内存

    共享内存是一种在同一台机器的不同进程(应用程序)之间交换数据的方式。一个进程可创建一个可供其他进程访问的内存段,并赋予它相应的权限。每个内存段拥有一个惟一的ID,我们通常称之为shmid,这个ID指向一个物理内存区域,其他进程可通过此ID来操作这块内存, 包扩读取、写入以及删除。

    共享内存的使用是一种在进程之间交换数据的快速方法,主要因为在创建内存段之后传递数据,不会涉及内核。这种方法常常称为进程间通信 (IPC)。其他 IPC 方法包括管道、消息队列、RPC 和套接字。

    PHP 中几种常见的共享内存使用方式

    APC 可以缓存 PHP opcode 提高应用的性能,可以在同个 PHP-FPM 进程池的进程间共享数据,常用功能如下:

    apc_storeapc_fetchapc_addapc_deleteapc_inc apc_decapc_casapc_clear_cacheapc_sma_info

    Shmop Unix 系统共享内存使用接口常用功能:

    shmop_openshmop_closeshmop_readshmop_writeshmop_delete

    ipcs -m 查看本机共享内存的状态和统计。

    ipcrm -m shmid ipcrm -M shmkey 清除共享内存中的数据。

    SystemV Shm常用功能:

    ftok shm_attach shm_detach shm_put_var shm_get_var shm_remove_var

    使用共享内存需要考虑操作的原子性和锁、并行和互斥。

    sem 信号量相关函数:sem_getsem_removesem_acquiresem_release

    PHP 提供的 IPC 机制。

    --enable-shmop 共享内存,只能按字节操作

    --enable-sysvsem 信号量

    --enable-sysvshm 共享内存,和 shmop 的差别是提供的操作函数不同,支持 keyvalue操作

    --enable-sysvmsg 消息队列

    本文主讲

    如何使用 PHP shmop 创建和操作共享内存段,使用它们存储可供其他应用程序使用的数据。

    1. 创建内存段

    共享内存函数类似于文件操作函数,但无需处理一个流,您将处理一个共享内存访问 ID。第一个示例就是 shmop_open 函数,它允许您打开一个现有的内存段或创建一个新内存段。此函数非常类似于经典的 fopen 函数,后者打开用于文件操作的流,返回一个资源供其他希望读取或写入该打开的流的函数使用。让我们看看 shmop_open的用法:

    第一个参数($key)

    系统建立IPC通讯 (消息队列、信号量和共享内存) 时必须指定一个key值。通常情况下,该key值通过ftok函数得到, * *key是一个我们逻辑上表示共享内存段的标识。不同进程只要选择同一个Key值就可以共享同一段存储段。

    第二个参数($mode)

    访问模式,它类似于fopen的访问模式,有以下几种

    模式 “a”,它允许您访问只读内存段

    模式 “w”,它允许您访问可读写的内存段

    模式 “c”,它创建一个新内存段,或者如果该内存段已存在,尝试打开它进行读写

    模式 “n”,它创建一个新内存段,如果该内存段已存在,则会失败,返回 false,并伴随有warning: unable to attach or create shared memory segment

    第三个参数($permissions):

    内存段的权限。您必须在这里提供一个八进制值,它类似于UNIX操作系统文件和目录的操作权限。

    好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择太原达内培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

上一篇:PHP 读书笔记(下)

下一篇:PHP给你带来的惊喜(二)

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-29

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-29

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-29

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-29

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统