jdwx/redis-pubsub

There is no license information available for the latest version (v0.2.0) of this package.

v0.2.0 2023-04-03 20:40 UTC

This package is auto-updated.

Last update: 2024-09-03 23:36:33 UTC


README

This is a lightweight PHP client for asynchronous Redis pub/sub functionality with TLS and authentication. It uses PHP's inbuilt stream functions and has no external dependencies.

The target use case is for a long-running process that is subscribed to one or more Redis channels and needs to process incoming messages in a timely fashion, but also has other stuff to do.

It also supports a simple publishing interface. This is suitable for apps that need to publish messages to a Redis channel, but don't otherwise interact with Redis.

This is not intended to be a full-featured Redis client. That space is extremely well covered by other extensions and packages.

This package requires PHP 8.0 or later.

Installation

Via composer:

composer require jdwx/redis-pubsub

Usage

Publisher:

use JDWX\RedisPubSub\RedisPubSub;

# By default, a connection is made to localhost:6379 without TLS.
$rps = new RedisPubSub();
$rps->publish( 'test', 'Hello, world!' );

Subscriber:

use JDWX\RedisPubSub\RedisPubSub;

# TLS is enabled by providing the paths to the client certificate and key, and,
# optionally, the CA certificate if the server should be verified.
$rps = new RedisPubSub( 'localhost', 6379, './client.crt', './client.key', './ca.crt' );

# Perform authentication.
$rps->auth( 'password' );

# Subscribe to a channel.
$rps->subscribe( 'test' );

# This will block until a message is received.
$msg = $rps->recv();

# This will not block if there are no pending messages.
$msg = $rps->tryRecv();

# This will wait for up to 5 seconds for a message to return.
$msg = $rps->tryRecv( 5.0 );

# This will wait for a message for up to 5 seconds without returning it.
$msg = $rps->tryWait( 5.0 );

# A callback function.
function MyCallback( array $msg ) : void {
    var_dump( $msg );
}

# This will pass all messages currently in the queue to the callback function,
# one at a time.
$rps->recvAll( 'MyCallback' );

# This will wait 5 seconds for messages to arrive, passing them one at a time
# to the callback function.
$rps->recvAllWait( 5.0, 'MyCallback' );

License

This library is licensed under the BSD 2-clause license. See the LICENSE file for details.