Async Redis client implementation, built on top of ReactPHP.
MIT License
This is a compatibility release that contains backported features from the v3 branch.
Once v3 is released, it will be the way forward for this project.
Feature: Forward compatibility with Promise v3.
(#152 by @clue)
Feature: Full PHP 8.3 compatibility and update test suite.
(#151 by @clue)
Feature: Simplify usage by supporting new default loop and new Socket API.
(#114 and #115 by @SimonFrings)
// old (still supported)
$factory = new Clue\React\Redis\Factory($loop);
// new (using default loop)
$factory = new Clue\React\Redis\Factory();
Feature: Improve error reporting, include Redis URI and socket error codes in all connection errors.
(#116 by @clue)
Documentation improvements and updated examples.
(#117 by @clue, #112 by @Nyholm and #113 by @PaulRotmann)
Improve test suite and use GitHub actions for continuous integration (CI).
(#111 by @SimonFrings)
Fix: Fix dangling timer when lazy connection closes with pending commands.
(#105 by @clue)
Improve test suite and add .gitattributes
to exclude dev files from exports.
Prepare PHP 8 support, update to PHPUnit 9 and simplify test matrix.
(#96 and #97 by @clue and #99, #101 and #104 by @SimonFrings)
Feature: Add new createLazyClient()
method to connect only on demand and
implement "idle" timeout to close underlying connection when unused.
(#87 and #88 by @clue and #82 by @WyriHaximus)
$client = $factory->createLazyClient('redis://localhost:6379');
$client->incr('hello');
$client->end();
Feature: Support cancellation of pending connection attempts.
(#85 by @clue)
$promise = $factory->createClient($redisUri);
$loop->addTimer(3.0, function () use ($promise) {
$promise->cancel();
});
Feature: Support connection timeouts.
(#86 by @clue)
$factory->createClient('localhost?timeout=0.5');
Feature: Improve Exception messages for connection issues.
(#89 by @clue)
$factory->createClient('redis://localhost:6379')->then(
function (Client $client) {
// client connected (and authenticated)
},
function (Exception $e) {
// an error occurred while trying to connect (or authenticate) client
echo $e->getMessage() . PHP_EOL;
if ($e->getPrevious()) {
echo $e->getPrevious()->getMessage() . PHP_EOL;
}
}
);
Improve test suite structure and add forward compatibility with PHPUnit 7 and PHPUnit 6
and test against PHP 7.1, 7.2, and 7.3 on TravisCI.
(#83 by @WyriHaximus and #84 by @clue)
Improve documentation and update project homepage.
(#81 and #90 by @clue)
Feature: Update Socket dependency to support hosts file on all platforms
(#66 by @clue)
This means that connecting to hosts such as localhost
(and for example
those used for Docker containers) will now work as expected across all
platforms with no changes required:
$factory->createClient('localhost');
A major compatibility release to update this package to support all latest
ReactPHP components!
This update involves a minor BC break due to dropped support for legacy
versions. We've tried hard to avoid BC breaks where possible and minimize impact
otherwise. We expect that most consumers of this package will actually not be
affected by any BC breaks, see below for more details.
BC break: Remove all deprecated APIs, default to redis://
URI scheme
and drop legacy SocketClient in favor of new Socket component.
(#61 by @clue)
All of this affects the
Factory
only, which is mostly considered
"advanced usage". If you're affected by this BC break, then it's
recommended to first update to the intermediary v1.2.0 release, which
allows you to use theredis://
URI scheme and a standard
ConnectorInterface
and then update to this version without causing a
BC break.
BC break: Remove uneeded data
event and support for advanced MONITOR
command for performance and consistency reasons and
remove underdocumented isBusy()
method.
(#62, #63 and #64 by @clue)
Feature: Forward compatibility with upcoming Socket v1.0 and v0.8 and EventLoop v1.0 and Evenement v3
(#65 by @clue)
Feature: Support redis[s]://
URI scheme and deprecate legacy URIs
(#60 by @clue)
$factory->createClient('redis://:secret@localhost:6379/4');
$factory->createClient('redis://localhost:6379?password=secret&db=4');
Feature: Factory accepts Connector from Socket and deprecate legacy SocketClient
(#59 by @clue)
If you need custom connector settings (DNS resolution, TLS parameters, timeouts,
proxy servers etc.), you can explicitly pass a custom instance of the
ConnectorInterface
:
$connector = new \React\Socket\Connector($loop, array(
'dns' => '127.0.0.1',
'tcp' => array(
'bindto' => '192.168.10.1:0'
),
'tls' => array(
'verify_peer' => false,
'verify_peer_name' => false
)
));
$factory = new Factory($loop, $connector);
Feature: Update SocketClient dependency to latest version
(#58 by @clue)
Improve test suite by adding PHPUnit to require-dev,
fix HHVM build for now again and ignore future HHVM build errors,
lock Travis distro so new defaults will not break the build and
skip functional integration tests by default
(#52, #53, #56 and #57 by @clue)
First stable release, now following SemVer
BC break: Consistent public API, mark internal APIs as such
(#38 by @clue)
// old
$client->on('data', function (MessageInterface $message, Client $client) {
// process an incoming message (raw message object)
});
// new
$client->on('data', function (MessageInterface $message) use ($client) {
// process an incoming message (raw message object)
});
Contains no other changes, so it's actually fully compatible with the v0.5.2 release.
Client
class has been renamed to StreamingClient
.Client
interface.message
event to data
.Factory
now accepts a LoopInterface
as first argument.close
event will be emitted once when invoking the Client::close()
Note: This is an intermediary release to ease upgrading to the imminent v0.5 release.