Rework argument parsing for `ZRANGE` so we can pass either a string or
an integer so everything will work even when using strict types.
Additionally update our docs to use the correct mechanism for adding
the `BYSCORE` option.
Fixes#2291
* Use our common command handler logic for SELECT.
* Shift updating `redis_sock->dbNumber` from the command itself to the
reply handler, so we aren't erroneously pointing to a non-existent
database before the command succeeds.
* Add ini setting redis.session.early_refresh to allow for session TTL updates on session start ( requires redis server version 6.2 or greater )
* Enable cluster session support for strict mode sessions ( via PS_VALIDATE_SID_FUNC )
* Cluster sessions used to write on every session, now we only write if the session has been modified.
* Send EXPIRE instead of SETEX if sessioh has not been changed
* If early refresh is enabled use GETEX for initial session read
* When strict sessions are enabled, check whether the session exists first, validate sid and regenerate if necessary
* Implement `ZDIFF`, `ZINTER`, `ZUNION`, `ZMSCORE`, and
`ZRANDMEMBER` for `RedisCluster`.
* Refactor `ZUNIONSTORE` command and switch to using our centralized
zset option parsing handler.
See #1894
* Create inline wrappers of the low-level php_stream_* functions that
also keep track of the number of bytes written/read.
* Change the logic to aggregate network traffic until the user
explicitly "resets" it. I think this will be a more common use-case
(running many commands and then seeing overall network IO).
See #2106
Let gen_stub.php define the constants for us, including deriving their
actual values from C defines.
As a side-effect we have to drop support for PHP < 7.2 as it does not
have interned strings.
- Finish adding docblocks with examples for all of the stream commands.
- Fix XAUTOCLAIM response handler (the reply has a slightly different
structure to XCLAIM.