predis-async

Asynchronous PHP client library for Redis built on top of ReactPHP

Github星跟蹤圖

Predis\Async

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

Asynchronous (non-blocking) version of Predis, the full-featured
PHP client library for Redis, built on top of React to
handle evented I/O. By default Predis\Async does not require any additional C extension to work, but
it can be optionally paired with phpiredis to sensibly lower the
overhead of serializing and parsing the Redis protocol.

Predis\Async is currently under development but already works pretty well. The client foundation is
being built on top of the event loop abstraction offered by React, an
event-oriented framework for PHP that aims to provide everything needed to create reusable libraries
and long-running applications using an evented approach powered by non-blocking I/O. This library is
partially tested on HHVM, but support for this runtime should be considered
experimental.

Contributions are highly welcome and appreciated, feel free to open pull-requests with fixes or just
report issues if you encounter weird behaviors and
blatant bugs.

Main features

  • Wide range of Redis versions supported (from 2.0 to 3.0 and unstable) using profiles.
  • Transparent key prefixing for all known Redis commands using a customizable prefixing strategy.
  • Abstraction for MULTI / EXEC transactions (Redis >= 2.0).
  • Abstraction for PUBLISH / SUBSCRIBE contexts (Redis >= 2.0).
  • Abstraction for MONITOR contexts (Redis >= 1.2).
  • Abstraction for Lua scripting (Redis >= 2.6).
  • Ability to connect to Redis using TCP/IP or UNIX domain sockets.
  • Redis connections can be established lazily, commands are queued while the client is connecting.
  • Flexible system for defining and registering custom sets of supported commands or profiles.

Installing

Predis\Async is available on Packagist. It is
not required to have the phpiredis extension loaded as suggested
since the client will work anyway using a pure-PHP protocol parser, but if the extension is detected
at runtime then it will be automatically preferred over the slower default. It is possible to force
the client to use the pure-PHP protocol parser even when the extension is detected simply by passing
['phpiredis' => false] in the array of client options.

Example

<?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();

Differences with Predis

Being an asynchronous client implementation, the underlying design of Predis\Async is different from
the one of Predis which is a blocking implementation. Certain features have not been implemented yet
(or cannot be implemented at all), just to name a few you will not find the usual abstractions for
pipelining commands and creating cluster of nodes using client-side sharding. That said, they share
a common style and a few basic classes so if you used Predis in the past you should feel at home.

Contributing

If you want to work on Predis\Async, it is highly recommended that you first run the test suite in
order to check that everything is OK, and report strange behaviours or bugs. When modifying the code
please make sure that no warnings or notices are emitted by PHP by running the interpreter in your
development environment with the error_reporting variable set to E_ALL, E_STRICT.

The recommended way to contribute to Predis\Async is to fork the project on GitHub, create new topic
branches on your newly created repository to fix or add features (possibly with tests covering your
modifications) and then open a new pull request with a description of the applied changes. Obviously
you can use any other Git hosting provider of your preference.

Please follow a few basic commit guidelines
before opening pull requests.

Project

Author

License

The code for Predis\Async is distributed under the terms of the MIT license (see LICENSE).

主要指標

概覽
名稱與所有者nrk/predis-async
主編程語言PHP
編程語言PHP (語言數: 2)
平台
許可證MIT License
所有者活动
創建於2012-05-19 14:06:25
推送於2018-09-12 07:32:40
最后一次提交2016-06-13 12:40:03
發布數5
最新版本名稱v0.2.3 (發布於 2014-10-26 12:56:51)
第一版名稱v0.1.0 (發布於 2013-07-27 09:26:42)
用户参与
星數366
關注者數29
派生數59
提交數113
已啟用問題?
問題數21
打開的問題數9
拉請求數2
打開的拉請求數4
關閉的拉請求數4
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?