clickalicious / memcached.php
Memcached.php - 支持 Memcached 协议的纯 PHP Memcached 客户端。
Requires
- php: >=5.4.0
- gpupo/cache: ^1.2
Requires (Dev)
- phpunit/phpunit: ^4.8
- satooshi/php-coveralls: ^1.0
This package is not auto-updated.
Last update: 2024-09-14 15:37:30 UTC
README
纯 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 foo 的 value
$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%
测试覆盖率 - 通过第三方进行安全检查(请与我联系)
安装
推荐通过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
这应该成为一个代理实现,能够作为测试(主要模拟/存根)的Memcache
或Memcached
(PECL)扩展(模拟)。 -
\Clickalicious\Memcached\Server
这应该成为一个虚拟(模拟)模式,模拟完整的Memcached
后端。 - 添加压缩支持,以便能够操作PECL Memcached存储的数据(FastLZ、zlib、LZW)
- 用正则表达式替换用于数据分析的explode和数组操作。
- 提高覆盖率并覆盖(目前未使用的压缩类)更多部分。
如果您也对这些功能感兴趣,请告知我。也许我们可以调整优先级并加快进度...
参与 & 分享
... 嗯。如果你也是代码猴子 - 也许我们可以打造一股力量 ;) 如果你愿意参与以下任何一项 代码、评论、文档、Wiki、错误报告、单元测试、错误修复、反馈 和/或 批评,也请告诉我!
赞助商
感谢我们的赞助商和支持者