varspool/predisque

基于 Predis 的 Disque 客户端

dev-master / 0.0.x-dev 2017-05-06 23:48 UTC

This package is auto-updated.

Last update: 2024-09-09 22:33:41 UTC


README

Build Status

一个基于 Predis (和依赖于 Predis) 的 PHP 7.1+ Disque 客户端。 predis : redis :: predisque : disque,是的?

该库由以下组成

  • 一组命令(如 Predis\Command\Command),您可以使用这些命令与 Disque 交互,以及一个 Predis 的服务器配置文件
  • 一个默认设置端口 7711 和 Disque 服务器配置文件的 Predisque\Client
  • 一个聚合连接(Predisque\Connection\Aggregate\DisqueCluster),它处理与整个 Disque 集群的通信
    • 支持通过 HELLO 进行发现
    • 如果命令因 ConnectionException 失败则透明地重试命令(因此我们通过切换到另一个节点来处理 -LEAVING 响应)

由于 Predisque 基于功能丰富的 Predis 内核,我们“免费”获得了像管道和底层 Redis 协议的良好支持。(Disque 客户端库可能不应该包含自己的原生 Redis 协议解析器。)

实现了所有 Disque 命令的支持,包括像 DEBUGMONITORCLUSTER INFO 这样奇特的功能。请参阅 TODO.md 了解达到稳定 API 的进度。

尚未稳定,不适合生产使用。

用法

PHP 命名空间是 \Predisque

要创建客户端,实例化一个 new \Predisque\Client(string|array $parameters = [], array $options = [])

方法签名类似于 Predis 客户端:连接参数(主机、端口等)首先给出,可以是数组或 DSN/URI 字符串表示法。然后是一组更通用的选项。所以,以下所有都有相同的结果(连接到单个 Disque 服务器)

$client = new \Predisque\Client();
$client = new \Predisque\Client('tcp://127.0.0.1:7711');
$client = new \Predisque\Client([
    'host' => '127.0.0.1',
    'port' => 7711
]);

连接到多个服务器就像传递一个节点详细信息数组一样简单

$client = new \Predisque\Client(['tcp://127.0.0.1:7711', 'tcp://127.0.0.1:7712', 'tcp://127.0.0.1:7713']);

连接切换

一次只能使用这些连接中的一个,但如果第一个服务器的连接失败,或者它给出了 -LEAVING 响应,则将使用其他连接。此外,集群的 HELLO 响应中的详细信息将用于连接到更多的备用节点(因此请确保所有节点都可以被每个客户端访问)。

您可以使用 discover 选项来控制此行为

$client = new \Predisque\Client('tcp://127.0.0.1:7711', ['discover' => false]);

您还可以通过传递 'cluster' => false 选项来禁用所有 Disque 特定的连接特性(以及聚合连接本身)

$client = new \Predisque\Client('tcp://127.0.0.1:7711', ['cluster' => false]);

测试

警告:测试套件使用 DEBUG FLUSHALL 命令。不要针对您关心的 Disque 实例运行测试。 运行测试将销毁它们使用的 disque 实例上的所有数据。(如果您只是将客户端作为 composer 中的分发版使用,则不会有测试。)

要执行测试套件,运行例如 DISQUE_SERVER_PORT=7711 ./vendor/bin/phpunit - 必须指定端口号,否则将使用无用的默认端口号 12345 以防止意外。