Nplc,PHP扩展开发浅谈

php扩展开发

Posted by hughnian on December 20, 2019

Nplc,PHP扩展开发浅谈

PHP扩展

本扩展是我对PHP扩展开发的一次研究探索,对于php扩展的开发需要掌握C语言知识,以及PHP扩展的开发规则,在我理解PHP的扩展运用到的C函数和变量很类似我们开发应用时的框架, 需要遵循PHP的内部规则以及使用方法。我很多也是看着网上博客逐步了解了PHP扩展开发规则,并且PHP5与PHP7扩展的开发区别还是挺大的。 我觉得后期还是开发PHP7的扩展比较好,毕竟PHP7慢慢会成为PHP的主流。这里可以推荐一些博客有助于了解PHP扩展开发的。

Nplc核心

项目地址:https://github.com/hughnian/欢迎star

Nplc的开发主要借鉴了鸟哥的Yac思路开发,其中主要用的就是mmap的内存映射技术。Nplc是一种PHP的本地缓存,非memcache,redis那样的缓存服务,只是对于本机的缓存处理,不能用于不同服务器之间的缓存。这个后面可能会升级成缓存服务,加上socket服务通信之类的以及分布式索引。 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。 相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。不过我这里的使用并没有指定文件,只是纯粹的开辟内存映射空间。 C语言mmap函数主要用途有三个:

  • 将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;
  • 将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;
  • 为无关联的进程提供共享内存空间;

Nplc的使用

`____``_____`````````__``````````
|_```\|_```_|```````[``|`````````
``|```\`|`|``_`.--.``|`|``.---.``
``|`|\`\|`|`[`'/'`\`\|`|`/`/'`\]`
`_|`|_\```|_`|`\__/`||`|`|`\__.``
|_____|\____||`;.__/[___]'.___.'`
````````````[__|`````````````````

logo

phpinfo

Nplc::__construct

   Nplc::__construct([string $prefix = ""])
<?php
   $nplc = new Nplc();
?>

Nplc::set

   Nplc::set($key, $value[, $tv]) //$tv 选填项超时时间
   Nplc::set(array $kvs[, $tv])   //$tv 选填项超时时间

Store a value into Nplc cache.

<?php
$nplc = new Nplc();
$nplc->set("name", "niansong");
$nplc->set(
    array(
        "name" => "niansong",
        "age" => 20,
        )
    );
?>

Nplc::get

   Nplc::get(string $key)
<?php
$nplc = new nplc();
$nplc->set("name", "niansong");
$nplc->set(
    array(
        "name" => "niansong",
        "age" => 20,
        )
    );
$nplc->get("name");
?>

Nplc::delete

   Nplc::delete(array|string $keys)

Nplc::info

   Nplc::info(void)
Array
(
    [storage_size] => 67108864
    [node_nums] => 64
    [keys_nums] => 7
    [fail_nums] => 0
    [miss_nums] => 5
    [recycles_nums] => 0
)