background image

PHP 怎样在共享内存中存储数据集

   共享内存是一种在相同机器中的应用程序之间交换数据的有效方式。一个进程可创建一个
可供其他进程访问的内存段,只要它分配了正确的权限。每个内存段拥有一个惟一的

 ID(称

 shmid),这个 ID 指向一个物理内存区域,其他进程可在该区域操作它。创建并提供了合

适的权限之后,同一台机器中的其他进程就可以操作这些内存段:读取、写入和删除。
  这表明使用

 C 语言编写的应用程序可与使用其他语言(比如 Java™ 或 PHP)编写的应用

程序共享信息。它们都可以共享信息,只要它们可访问和理解该信息。共享内存在针对大部
分语言的实现中得到了广泛使用,所以访问应该不是问题。要理解信息,我们可以使用一种
标准格式,比如

 XML 或 JSON。

  共享内存的使用是一种在进程之间交换数据的快速方法,主要因为在创建内存段之后
传递数据,不会涉及内核。这种方法常常称为进程间通信

 (IPC)。其他 IPC 方法包括管道、消

息队列、

RPC 和套接字。当使用需要彼此通信的应用程序的生态系统时,这种在应用程序之

间快速、可靠地交换数据的能力非常有用。取决于生态系统的大小,使用数据库在应用程序
之间交换信息的常用方法常常会导致查询缓慢,甚至

 I/O 阻塞。使用共享内存,没有 I/O 会

减缓开发人员的进度。
  本文的提议非常简单,学习如何使用

 PHP 创建和操作共享内存段,使用它们存储可供

其他应用程序使用的数据集。即使没有使用共享内存交换数据的计划,它本身也在许多好处,
因为它使应用程序能够远离

 I/O 问题。将数据集直接存储在内存中具有诸多优势,从 Web 

服务数据缓存到会话共享。它是一个非常有用的概念,每个

 PHP 开发人员都应该知道。

  共享内存和

 PHP

  

PHP 拥有丰富的可用扩展,共享内存也一样。使用一些共享的函数,无需安装任何扩

展,开发人员就能够轻松操作内存段。
  回页首创建内存段
  共享内存函数类似于文件操作函数,但无需处理一个流,您将处理一个共享内存访问

 

ID。第一个示例就是 shmop_open 函数,它允许您打开一个现有的内存段或创建一个新内存
段。此函数非常类似于经典的

 fopen 函数,后者打开用于文件操作的流,返回一个资源供其

他希望读取或写入该打开的流的函数使用。让我们看看清单

 1 中的 shmop_open。

  清单

 1. shmop_open 函数

  

<?php

  

$systemid = 864; // System ID for the shared memory segment

  

$mode = "c"; // Access mode

  

$permissions = 0755; // Permissions for the shared memory segment

  

$size = 1024; // Size, in bytes, of the segment

  

$shmid = shmop_open($systemid, $mode, $permissions, $size);

  

?>

  该函数中出现的第一个事物是系统

 ID 参数。这是标识系统中的共享内存段的数字。第

二个参数是访问模式,它非常类似于

 fopen 函数的访问模式。您可以在 4 种不同的模式下访

问一个内存段:
  模式

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

  模式

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

  模式

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

  模式

 “n”,它创建一个新内存段,如果该内存段已存在,则会失败

  第三个参数是内存段的权限。您必须在这里提供一个八进制值。