Here is a new patch release for v1.1 with more improvements and fixes.
NOTE: We are still missing handlers for commands added in Redis 4, 5 and 6. We will get on par eventually, in the meanwhile you can define your own ones or use Predis\Client::executeRaw(). Read this post for details about how to properly implement support for new commands if you would like to add missing ones and share your work with us by creating pull requests, contributions are always greatly appreciated!
The client can now handle ACL authentication when connecting to Redis 6, just pass both username and password to connection parameters and Predis switches to using the augmented variant of AUTH:
// When using an URI string for parameters:
$client = new Predis\Client('tcp://127.0.0.1?username=myuser&password=mypassword');
// When using a named array parameters:
$client = new Predis\Client([
'username' => 'myuser',
'password' => 'mypassword',
]);
As usual Redis servers protected only by a password can still be accessed with just the password parameter. See the Redis documentation for details Redis ACLs.
FIX: NULL or zero-length string values in password and database do not trigger spurious AUTH and SELECT commands anymore when connecting to Redis.
// Won't trigger `AUTH` and `SELECT`:
$client = new Predis\Client('tcp://127.0.0.1?password=&database=');
// Won't trigger AUTH and SELECT:
$client = new Predis\Client([
'password' => null,
'database' => '',
]);
This fix addresses some old issues with certain libraries and frameworks (see ISSUE #436).
Empty connection parameters do not make much sense anyway so, in the next major release, any field containing NULL or a zero-length string will be stripped away when converting URI strings and named arrays to instances of Predis\Connection\Parameters.
FIX: SORT now always triggers a switch to the master node in replication configurations instead of just when the STORE modifier is specified. The reason for this change is that SORT is always considered to be a write operation and it actually fails with a -READONLY error response when executed against a replica node (ISSUE #554).
FIX: using foreach() on a client instance when it is connected to a single Redis server does not throw an exception anymore but the iteration will run for just one loop returning a new client for the underlying single-node connection (ISSUE #552, PR #556).
$client = new Predis\Client('tcp://127.0.0.1');
foreach ($client as $clientNode) {
// Iterates just once, does not throw an exception anymore.
}
Using foreach() actually makes sense when using aggregate connection backends for client-side sharding or redis-cluster but there is no reason (and it is wrong anyway) to throw an exception in Predis\Client::getIterator() when the client is connected to a single server.
Improved @method annotations for methods responding to Redis commands defined
by Predis\ClientInterface and Predis\ClientContextInterface. (PR #456 and
PR #497, other fixes applied after further analysys).
FIX: the client can now handle ACL authentication when connecting to Redis
6.x simply by passing both username and password to connection parameters.
See the Redis docs for details on this topic.
FIX: NULL or zero-length string values passed to password and database
in the connection parameters list do not trigger spurious AUTH and SELECT
commands anymore when connecting to Redis (ISSUE #436).
FIX: initializing an iteration over a client instance when it is connected
to a standalone Redis server will not throw an exception anymore, instead it
will return an iterator that will run for just one loop returning a new client
instance using the underlying single-node connection (ISSUE #552, PR #556).
FIX: Predis\Cluster\Distributor\HashRingaddNodeToRing() was calculating
the hash required for distribution by using crc32() directly instead of the
method Predis\Cluster\Hash\HashGeneratorInterface::hash() implemented by the
class itself. This bug fix does not have any impact on existing clusters that
use client-side sharding based on this distributor simply because it does not
take any external hash generators so distribution is not going to be affected.
FIX: SORT now always trigger a switch to the master node in replication
configurations instead of just when the STORE modifier is specified, this is
because SORT is always considered to be a write operation and actually fails
with a -READONLY error response when executed against a replica node. (ISSUE
#554).
v1.1.3 (2020-08-18)
Ensure compatibility with PHP 8.
Moved repository from github.com/nrk/predis to github.com/predis/predis.
FIX: Moved cweagans/composer-patches dependency to require-dev.
FIX: Include PHPUnit .patch files in exports.
v1.1.2 (2020-08-11)
FIX: pure CRC16 implementation failed to calculate the correct hash when
Commits
8be2418 Update CHANGELOG and bump VERSION (v1.1.4)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme
Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):
- Update frequency (including time of day and day of week)
- Pull request limits (per update run and/or open at any time)
- Automerge options (never/patch/minor, and dev/runtime dependencies)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)
Bumps predis/predis from 1.1.1 to 1.1.4.
Release notes
Sourced from predis/predis's releases.
Changelog
Sourced from predis/predis's changelog.
Commits
8be2418
Update CHANGELOG and bump VERSION (v1.1.4)b9ebe8a
[tests] Fix mistype in TODO comments.e2d2692
Update README.3092480
Update .gitignore87452e6
Fix authentication to support ACL with Redis 6.0.31baa9b
Do not push AUTH and SELECT on empty "password" and "database".6f94240
[tests] Skip integration tests for PUB/SUB consumer on CI.5e220a0
Update CHANGELOG.0eb2633
Merge remote-tracking branch 'github/pr/554' into v1.1cbbd6bb
Update CHANGELOG.Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Automerge options (never/patch/minor, and dev/runtime dependencies) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired)