laravie/predis-async

Predis 的异步版本

v0.4.1 2021-05-30 03:04 UTC

This package is auto-updated.

Last update: 2024-08-29 04:34:15 UTC


README

tests Latest Stable Version Total Downloads Latest Unstable Version License Coverage Status

作为 Redis 的全功能 PHP 客户端库 Predis 的异步(非阻塞)版本,它基于 React 构建在 ReactPHP 之上,ReactPHP 是一个面向 PHP 的以事件为核心的框架,旨在通过非阻塞 I/O 提供创建可重用库和长时间运行应用程序所需的一切。默认情况下,Predis\Async 不需要任何额外的 C 扩展即可工作,但可以选择性地与 phpiredis 配对,以合理地降低序列化和解析 Redis 协议的开销。

Predis\Async 目前处于开发中,但已经工作得相当好。客户端基础正在 React 提供的事件循环抽象之上构建,ReactPHP 是一个面向 PHP 的以事件为核心的框架,旨在通过非阻塞 I/O 提供创建可重用库和长时间运行应用程序所需的一切。这个库在 HHVM 上进行了部分测试,但对该运行时的支持应被视为实验性的。

欢迎并感谢贡献,如果您遇到奇怪的行为或明显的错误,请随时提交 pull request 或 报告问题

主要功能

  • 支持广泛的 Redis 版本(从 2.0 到 3.0 和不稳定版)使用配置文件。
  • 对所有已知 Redis 命令使用可自定义的前缀策略进行透明键前缀。
  • 对 Redis > = 2.0 的 MULTI / EXEC 事务进行抽象。
  • 对 Redis > = 2.0 的 PUBLISH / SUBSCRIBE 上下文进行抽象。
  • 对 Redis > = 1.2 的 MONITOR 上下文进行抽象。
  • 对 Redis > = 2.6 的 Lua 脚本进行抽象。
  • 可以使用 TCP/IP 或 UNIX 域套接字连接到 Redis。
  • Redis 连接可以延迟建立,在客户端连接时命令会被排队。
  • 灵活的系统用于定义和注册支持的命令或配置文件的自定义集合。

安装

Predis\Async 在 Packagist 上可用。不需要加载 phpiredis 扩展,因为客户端将使用纯 PHP 协议解析器继续工作,但如果在运行时检测到该扩展,则将自动优先使用较慢的默认选项。可以通过将 ['phpiredis' => false] 放入客户端选项数组中,强制客户端在检测到扩展时使用纯 PHP 协议解析器。

示例

<?php
require __DIR__.'/../autoload.php';

$loop = new React\EventLoop\StreamSelectLoop();
$client = new Predis\Async\Client('tcp://127.0.0.1:6379', $loop);

$client->connect(function ($client) use ($loop) {
    echo "Connected to Redis, now listening for incoming messages...\n";

    $logger = new Predis\Async\Client('tcp://127.0.0.1:6379', $loop);

    $client->pubSubLoop('nrk:channel', function ($event) use ($logger) {
        $logger->rpush("store:{$event->channel}", $event->payload, function () use ($event) {
            echo "Stored message `{$event->payload}` from {$event->channel}.\n";
        });
    });
});

$loop->run();

与 Predis 的区别

作为一个异步客户端实现,Predis\Async 的底层设计不同于 Predis,Predis 是一个阻塞实现。某些功能尚未实现(或无法实现),例如,您将找不到用于管道化命令和创建客户端分片集群的常用抽象。尽管如此,它们具有共同的风格和一些基本类,因此如果您以前使用过 Predis,那么您应该会感到很自在。

贡献

如果您想参与Predis\Async的开发,强烈建议您首先运行测试套件以确保一切正常,并报告任何异常行为或错误。在修改代码时,请确保在开发环境中运行解释器,将error_reporting变量设置为E_ALL | E_STRICT,以避免PHP发出警告或通知。

向Predis\Async贡献的最佳方式是在GitHub上分叉项目,在您新创建的仓库中创建新的分支以修复或添加功能(可能包括覆盖您修改的测试),然后提交一个新的pull request,并描述所做的更改。当然,您也可以使用您偏好的任何其他Git托管服务。

在提交pull request之前,请遵循一些基本的提交指南

项目

作者

许可证

Predis\Async的代码在MIT许可证的条款下分发(见LICENSE)。