clickalicious/memcached.php

Memcached.php - 支持 Memcached 协议的纯 PHP Memcached 客户端。

v1.0.1 2016-04-15 22:59 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:37:30 UTC


README

Logo of Memcached.php

纯 PHP Memcached 客户端库,完全支持 Memcached ASCII 协议

目录

功能

  • ~ 100% 覆盖 Memcached ASCII 协议规范
  • 支持存储原生 PHP 变量类型(数组、对象...)
  • 递增 & 递减支持
  • 高效连接共享
  • 可配置的连接关闭行为
  • 代码整洁且文档齐全
  • 单元测试

Memcached.php 覆盖了几乎 100% 的 Memcached 协议规范。代码整洁,全文档化,并遵循 PSR 编码标准(PSR-0/4、PSR-1、PSR-2)。代码经过单元测试(PHPUnit),覆盖率很高。该库支持存储整数(字符串)上的 <incr> 和 <decr> 命令,并按照 Memcached 协议规范推荐的方式处理连接。最后但并非最不重要的是,它支持 PHP 的八种变量类型中的七种 - 详细来说,四种标量类型

boolean
integer
float (floating-point number [double])
string

两种复合类型

array
object

以及最后一种特殊类型

NULL

所以 resource 是唯一不支持的类型。

示例

  • 创建一个 client 实例,并将其(懒加载)连接到主机 127.0.0.1(默认端口 [11211])上的 Memcached 守护进程
  • 使用 value 1.00 设置 key foo
  • 检索 key foovalue
$client = new \Clickalicious\Memcached\Client('127.0.0.1');

// Set a value of type float
$client->set('foo', 1.00);

// Returns 1.00 as PHP's type float!
$client->get('foo');

您将在 Demo.php 中找到详细的演示,展示如何使用 Memcached.php client

需求

  • PHP >= 5.4(兼容到版本 5.6 以及 7.x - 但不兼容 HHVM)

哲学

此客户端既未测试也未设计用于在重负载环境中使用。它是为我自己的 phpMemAdmin 项目设计的客户端库。因此,我能够去除对 Memcache + Memcached(PECL)扩展的依赖 - 这两个扩展的设计方式我不喜欢。我试图与 Memcached 协议规范完全一致。在某些情况下,我不喜欢命名约定,因此我创建了一些代理。例如,我决定将 increment() 实现为 incr() 的代理,将 decrement() 实现为 decr() 的代理。我将在一些其他类中添加更多职责,例如,很快将添加一个 PSR 兼容 的缓存代理和一个用于管理操作的 Pool/Cluster 类。

版本控制

为了保持版本的一致性,我决定使用 Semantic Versioning 2.0.0 http://semver.org。它易于理解,非常常见,并从许多其他软件项目中广为人知。

路线图

  • 目标稳定版本 1.0.0
  • >= 90% 测试覆盖率
  • 通过第三方进行安全检查(请与我联系)

Throughput Graph

安装

推荐通过Composer安装此库。将clickalicious/memcached.php包要求添加到您的composer.json文件中

{
    "require": {
        "clickalicious/memcached.php": "~0.1"
    }
}

Memcached.php也作为zip文件下载从GitHub获取,或者通过git clone https://github.com/clickalicious/Memcached.php.git .进行克隆。

数据

字符串整数浮点值在此库中不会被任何方式修改。这些类型将由Memcached的内部系统存储 - 而所有其他类型将由客户端序列化,并且可以选择压缩(LZW/Smaz)存储 - 在本库的下一个版本中 - 旨在0.4.0。我正在开发Smaz - 一个短字符串压缩库的PoC实现(https://github.com/zhenhao/smaz.php)和Smaz使用的翻译表的德语翻译。

元数据

Memcached为元数据提供了一个32位(版本> 1.2.1)无符号整数字段。根据Memcached协议规范

请注意,在memcached 1.2.1及更高版本中,标志可能是32位,而不是16位,但您可能希望为了与旧版本兼容而将自己限制在16位。

Memcached.php使用此字段用于其元数据。此元数据用于标记需要序列化的数据等。此元数据通过客户端的标志字段存储。最低的前8位(最低字节)由Memcached.php保留。其他8位(16位的一半)可由您的应用程序使用。

文档

目前最佳且仅存在的文档是此项目的内联文档。因此,请查看源代码以了解Memcached.php如何内部工作。

测试

Memcached.php进行了单元测试,代码覆盖率很高。要详细了解,请查看此始终更新的代码覆盖率报告

运行测试
您将在tests/目录中找到包括测试套件的PHPUnit配置。要运行这些配置,请在cli上执行以下命令

phpunit -c tests/phpunit.xml --testdox

测试

单元测试针对现有的和真实的Memcached守护程序执行。请注意,您需要在运行单元测试的主机上运行一个正在运行的Memcached守护程序,并监听默认端口(11211)。结果,由于单元测试绑定到正在运行的Memcached守护程序和网络,因此它们并不是那么隔离。

版本控制

为了保持版本的一致性,我决定使用 Semantic Versioning 2.0.0 http://semver.org。它易于理解,非常常见,并从许多其他软件项目中广为人知。

路线图

  • 强化代码 - 更高的稳定性!
  • \Clickalicious\Memcached\Proxy
    这应该成为一个代理实现,能够作为测试(主要模拟/存根)的MemcacheMemcached(PECL)扩展(模拟)。
  • \Clickalicious\Memcached\Server
    这应该成为一个虚拟(模拟)模式,模拟完整的Memcached后端。
  • 添加压缩支持,以便能够操作PECL Memcached存储的数据(FastLZ、zlib、LZW)
  • 用正则表达式替换用于数据分析的explode和数组操作。
  • 提高覆盖率并覆盖(目前未使用的压缩类)更多部分。

如果您也对这些功能感兴趣,请告知我。也许我们可以调整优先级并加快进度...

参与 & 分享

... 嗯。如果你也是代码猴子 - 也许我们可以打造一股力量 ;) 如果你愿意参与以下任何一项 代码评论文档Wiki错误报告单元测试错误修复反馈 和/或 批评,也请告诉我!

赞助商

感谢我们的赞助商和支持者

版权

图标由 Freepik 制作,并经 CC 3.0 BY 许可