predis/predis-async

Predis 的异步版本

v0.2.3 2014-10-26 11:51 UTC

This package is not auto-updated.

Last update: 2024-09-18 15:52:19 UTC


README

Software license Latest stable Latest development Monthly installs Build status HHVM support

Predis 的异步(非阻塞)版本,是用于 Redis 的功能齐全的 PHP 客户端库,建立在 React 的基础上,用于处理事件驱动的 I/O。默认情况下,Predis\Async 不需要任何额外的 C 扩展即可工作,但可以选择性地与 phpiredis 配合使用,以合理地降低序列化和解析 Redis 协议的开销。

Predis\Async 目前处于开发中,但已经表现得相当不错。客户端基础正在建立在由 React 提供的事件循环抽象之上,React 是一个面向 PHP 的事件驱动框架,旨在提供创建可重用库和长时间运行的应用程序所需的一切,通过基于非阻塞 I/O 的事件驱动方法。此库在 HHVM 上部分测试过,但对该运行时的支持应被视为实验性的。

欢迎并感谢贡献,如果您遇到奇怪的行为和明显的错误,请随时通过 报告问题 打开 pull-requests。

主要功能

  • 支持广泛的 Redis 版本(从 2.03.0 和不稳定版本)使用配置文件。
  • 对所有已知 Redis 命令使用可自定义的前缀策略进行透明前缀。
  • MULTI / EXEC 事务提供抽象(Redis >= 2.0)。
  • PUBLISH / SUBSCRIBE 上下文提供抽象(Redis >= 2.0)。
  • MONITOR 上下文提供抽象(Redis >= 1.2)。
  • 为 Lua 脚本提供抽象(Redis >= 2.6)。
  • 可以使用 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\Async的开发,强烈建议您首先运行测试套件,以检查一切是否正常,并报告异常行为或错误。在修改代码时,请确保在开发环境中以error_reporting变量设置为E_ALL | E_STRICT的方式运行解释器,以确保PHP不会发出警告或通知。

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

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

项目

作者

许可

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