phpredis

PHP · phpredis 5.3.7 · RESP2

所列测试通过

测试连接设置

Ubuntu 24.04 PHP extension

测试目标:127.0.0.1:6379,用户名 default,测试密码 manual-test-only,默认数据库。该密码只用于一次性的本地测试容器。

已验证操作

范围限于下方程序中的确切 API 调用与断言。

可执行测试示例

此程序已在隔离 Docker 镜像中执行。它包含多个客户端分支;本页使用下面列出的参数。依赖和编译步骤位于测试目录的 Dockerfile 中。

php "/clients/php-client.php" phpredis
查看已执行的完整源代码
<?php
// Run: php php-client.php predis|phpredis. Fixture only.
$library=$argv[1]; $checks=[];
function verify($name,$actual,$expected) {global $checks;if($actual!==$expected)throw new Exception($name.': '.json_encode($actual));$checks[]=$name;}
if($library==='predis') {
  require '/clients/vendor/autoload.php';
  $client=new Predis\Client(['scheme'=>'tcp','host'=>'127.0.0.1','port'=>6379,'username'=>'default','password'=>'manual-test-only','read_write_timeout'=>5]);
  $version=Composer\InstalledVersions::getPrettyVersion('predis/predis');
} else {
  $client=new Redis();$client->connect('127.0.0.1',6379,5);$client->auth(['default','manual-test-only']);
  $version=phpversion('redis');
}
try {
  verify('authenticated PING',(string)$client->ping(),$library==='predis'?'PONG':'1');
  $set=$client->set('php:text','Hello 世界');verify('SET',$library==='predis'?(string)$set:$set,$library==='predis'?'OK':true);
  verify('Unicode GET',$client->get('php:text'),'Hello 世界');
  verify('missing GET',$client->get('php:missing'),$library==='predis'?null:false);
  $client->set('php:binary',"\0\xff\r\n");verify('binary round trip',$client->get('php:binary'),"\0\xff\r\n");
  $client->hset('php:hash','field','value');verify('HGET',$client->hget('php:hash','field'),'value');
  if($library==='predis') {
    $values=$client->transaction(function($t){$t->set('php:counter','1');$t->incr('php:counter');});
    verify('MULTI/EXEC',$values[1],2);
    verify('Lua EVAL',$client->eval("return redis.call('GET',KEYS[1])",1,'php:counter'),'2');
  } else {
    $values=$client->multi()->set('php:counter','1')->incr('php:counter')->exec();verify('MULTI/EXEC',$values,[true,2]);
    verify('Lua EVAL',$client->eval("return redis.call('GET',KEYS[1])",['php:counter'],1),'2');
  }
} finally {if($library==='predis')$client->disconnect();else $client->close();}
echo json_encode(['library'=>$library,'version'=>$version,'checks'=>$checks,'status'=>'passed'])."\n";

客户端官方仓库 · 依赖和复现步骤

测试环境与可复现证据

验证时间: 2026-09-21T11:15:27Z · Docker / Linux aarch64 · lavik 0.1.0-beta.1

存储与连接: io_uring · 临时文件、2 个工作线程、单机、明文 TCP、密码认证。此测试不衡量 NVMe 性能。

固定源码: 3955b98d43b312324aa8d52775df52cfb111c0d0

二进制 SHA-256: 8306b37ddf05023f85166a6aa2192b7084757e8defd342b602e6470244aca887

镜像: sha256:fd13690a1931b8abb31b1866baa2a08c7c38e6df93aa78883321d1d3c1cddd00

完整测试记录 · 可执行测试