Repository navigation
Releases
Releases · cachewerk/relay
v0.61.0
Added
- Added support for phpser serializer
- Added
reconnect()method (preserving event listeners)
Changed
- Reject
RESETandCLIENT CAPA REDIRECTviarawCommand() - Gracefully handle malformed invalidation replies
- Various internal performance improvements
Fixed
- Fixed various Valkey
CAPA REDIRECTissues - Fixed invalidations on idle TLS connections
- Keep hash-field existence and cached values consistent after
H[M]GETandHEXISTS - Preserve negative integer hash-field names in
HSETEXarray arguments - Accept
OPT_READ_TIMEOUT = -1to disable read timeouts - Fixed cluster initialization after automatic primary failover
- Fixed cluster database selection after
MOVEDorASKredirects - Fixed parsing of
tls-portfromCLUSTER SHARDS - Reset negative
*SCANcursors before sending commands - Fixed invalidation callbacks not firing on every worker
- Fixed an off-by-one error involving raw
HRANDFIELDlogic
v0.60.0
Added
- Added startup-only
relay.huge_pagesconfiguration directive - Added
relative_hitsandrelative_missestoRelay\Relay::stats() - Added global and per-endpoint eviction stats to
Relay\Relay::stats() - Added Redis 8.8
AGGREGATE COUNTsupport forZINTER[STORE]andZUNION[STORE] - Added PHP 8.6 macOS builds
Changed
- Switched to OpenSSL 4 for macOS builds
- Upgraded PHP 8.6 builds to
8.6.0RC3API - Accelerate cluster slot hashing with startup-selected SIMD CRC16
relay.prefault=populatenow uses faster writable kernel prefaulting on Linux- Each endpoint now owns one shared cache with independent leases for its writers
Relay\Relay::stats()reports directly on each endpoint- Marked
Relay\{Relay, Cluster, Sentinel, Table, AdaptiveCache}as non-serializable - Cap
relay.initial_readersto32768 - Improved
Relay\Clusterinitialization failure logging - Various performance improvements (evictions, invalidations, cache reads)
Fixed
- Restored
-headerpad_max_install_namesto macOS builds - Reselect database in every reconnect pathway
- Fixed
INCREXto match the released Redis 8.8 syntax - Fixed possible buffer overrun when gathering eviction sample keys
- Fixed possible crash in invalidation callbacks that mutate invalidations themselves
- Fixed handling of malformed RESP reply shapes
- Fixed segfault if serialization throws an exception
- Fixed segfault when calling
Relay\Sentinelmethods before the object is constructed - Fixed segfault in
Relay\Clustersubscribe commands before the object is constructed - Prevented child processes from tearing down a parent's persistent connection
- Reject RESP replies nested deeper than 1024 levels instead of overflowing the stack
- Always invalidate keys
*EXPIRE*d in transactions to avoid serving stale data
Removed
relay.*_endpoint_dbshave been removed and will be ignored
v0.50.2
v0.50.0
Added
- Added EL10 builds
- Added
HIMPORTcommand - Added
Relay\Cluster::MSETEX - Added
Relay\Cluster::FCALL(_RO) - Added
Relay\Cluster::OPT_NODE_READ_TIMEOUTfor faster node failover - Added
Relay\Cluster::OPT_MULTIKEY_REORDERING - Added
Relay\Tablefixed-resolution/retention metric series - Added
infolog level
Changed
- Switched to
8.6.0beta2API for PHP 8.6 builds - Use configurable exponential backoff with jitter for unhealthy cluster node health checks
- Use a hardcoded upper bound for cluster redirects before giving up
- Flush all existing databases when calling
flushMemory(), not just active ones - Made
SMISMEMBER,BITPOSandTYPEcacheable - Made
ZRANK,ZREVRANK,ZCOUNT,ZSCOREandZMSCOREcacheable - Made Cluster reject
UNWATCHin aMULTItransaction in PhpRedis compatibility mode - Switched to incremental flushing of in-memory caches
- Over 40 additional internal improvements
Fixed
- Fixed a few
ZSETcaching edge cases - Fixed
[B]LMOVEMcompatibility with PhpRedis - Fixed a possible memory leak if a worker is terminated while in an EBR critical section
- Fixed command arity as reported by Redis
- Fixed a crash after manually disabling client tracking
- Fixed cluster cross-slot command aggregation
- Fixed an erroneous
relayLinkReleasebased on hiredis reader state - Fixed a signal sequencing issue that could cause an infinite loop
- Fixed a small
SIGIOrace when arming file descriptors to receive signals - Fixed boolean INI parsing so it will work for PHP 7.4 - 8.6
- Fixed
@returndocblock ofRelay\Table::fullscan() - Fixed
CLUSTER SHARDSparsing logic to be more robust and correct - Fixed possible crashes in
VSETATTR - Fixed session
max_execution_timehandling to match PhpRedis - Fixed
Relay\Clusterreturning a barefalsewithout setting the last error or throwing - Fixed our
WRONGTYPEmessage so it matches the server - Fixed raw
BITPOSandGETBITreporting nothing when Relay rejects the arguments itself - Fixed
Relay\Cluster::rawCommand()not validating command arity - Fixed
SMISMEMBERreturn type when responding from cache - Fixed leaving replicas in
MULTIstate after aDISCARD - Fixed
Relay\Clustertransaction bookkeeping for broadcast commands - Fixed lazy reconnect and node introspection after
Relay\Cluster::close() - Fixed
HGETDELandHGETEXinvalidating the wrong cache entry - Fixed crashes from malformed raw
MSET(EX|NX)andHGET(EX|DEL)arguments - Fixed
Relay\Cluster::rawCommand()crashing for commands without a dedicated command-table entry - Fixed event listener handling for queued flush events, dropped connections, and callbacks that modify listener registrations
- Fixed
Relay\Cluster::getOption(OPT_ADAPTIVE_CACHE)panicking - Fixed
Relay\Relay::option()crashing when explicitly passednull - Fixed options argument validation for
GEORADIUS(BYMEMBER)andGEOSEARCH(STORE) - Fixed assertion involving
SELECTwith wildly wrong dbs in a transaction - Fixed several edge cases and issues in
Relay\Cluster::fullscan() - Fixed handling a failed
DISCARDduring a transaction inRelay\Cluster - Fixed crash when
Relay\Clusterconnects to an incomplete/initializing cluster - Fixed a null pointer dereference when executing a transaction against a cluster that is still spinning up
- Ensure our signal handlers only run on the main PHP lifecycle thread
- Fixed a memory leak in CROSSSLOT errors
- Fixed memory leaks in
Relay\Clustersubscription callbacks and repeated allow/ignore pattern updates
v0.40.0
Added
- Added support for multiple cluster databases (Valkey 9.0+)
- Added
OPT_REPLICA_FAILOVERandFAILOVER_DISTRIBUTE_REPLICASconstant aliases - Added
relay.prefaultini setting - Added
SUNIONCARDandSDIFFCARDcommands - Added
LMOVEMandBLMOVEMcommands - Added in-memory caching to
PFCOUNTcommand - Added PHP 8.6 builds
Changed
- Removed
LZ4andZSTDdependencies and detect them on startup - Major performance and memory efficiency improvements
- Dramatically improved cluster command distribution and failover handling
- Changed the default
max_endpoint_dbsfrom 32 to 1
Fixed
- Reworked
SIGIOandatexitHandlerlogic - Restored missing
FullscanGeneratorstubs - Fixed issues with
ck_rhsby upgradingrelay-pkg.so's bundledlibckto an unreleased version - Fixed
zstdfallback compression bug - Fixed assertion on
Relay\Clustercommand failure - Fixed an assertion in an error state in
relaySyncObject - Fixed issues detecting worker counts
v0.30.0
This release contains a major API redesign and breaking changes in Relay\Table.
Added
- Added support for
INCREXandXNACKcommands
Changed
⚠️ RedesignedRelay\TableAPI and switched to shared memory model- Made
igbinaryandmsgpackextensions optional and detected at runtime - Redesigned internal
HASHandSETdata structures for size and performance - Various performance, recovery and memory efficiency improvements
Fixed
- Fixed invalidation polling on TLS connections
- Fixed segfault with unserializable inputs
- Fixed arity and reply type of various commands
- Fixed
OPT_FAILOVERandOPT_DISTRIBUTEstub values - Fixed
Relay::_uncompress()compatibility with PhpRedis - Fixed
relay-pkg.sobuilds exporting bundledhiredissymbols
v0.22.0
Added
- Added the optional
FPHAargument toJSON.SETcommand - Added missing PhpRedis backoff algorithms for compatibility
- Added
OPT_FAILOVERcluster option for fine-grained failover control - Added
OPT_DISTRIBUTEcluster option for controlling read distribution across replicas
Changed
- Reduced memory usage across various components
- Improved cluster command distribution and error recovery
- Disable Zend signals in all ZTS builds
- Switch to
mixedarguments forSLOWLOGcommand - Changed
NUM_REQUESTStoTOKENSforGCRAcommand
Fixed
- Fixed session handler in PHP 8.6
- Fixed a possible assertion failure after a cluster link failure
v0.21.0
Added
- Added support for
HOTKEYSandGCRAcommands - Added support for
DELEXandDELIFEQ - Added support for Valkey's
CLUSTERSCANcommand - Added
relay.max_db_writersini directive
Changed
- Switched to multi-writer model for shared caches
- Serve cached keys from cluster replicas
- Improved cluster initialization by using
CLUSTER SHARDScommand when available - Modernized session locking
- Various internal improvements and fixes
Fixed
- Fixed arity and options array handling for
DELEXcommand - Fixed a segfault with raw
MSETEXcommand - Fixed a memory leak when reconnecting an already connected object
- Allow passing
nulltoRelay\Clusterseeds and also using a name - Fixed incorrect database number warning
v0.20.0
Added
- Added stable PHP 8.5 builds
- Added ZTS builds for some distros
- Added
WAITcommand toRelay\Cluster - Added
DIGESTcommand - Added
IFEQ,IFNE,IFDEQ,IFDNESEToptions - Added
DELEXcommand - Added
MSETEXcommand - Added support for Dragonfly's
ZDIFF WITHSCORESreply
Changed
⚠️ Return Redis maps as numeric arrays for raw commands in PhpRedis compatibility mode⚠️ Establish connections lazily in PhpRedis compatibility mode- Restored PHP 7.4 builds for macOS
Fixed
- Fixed
hGetWithMeta()sometimes returning an incorrect value - Fixed reply type for
VINFOcommand - Fixed a segfault caused by a null pointer dereference in
Cluster
v0.12.1
Added
- Added
hGetWithMeta()method
Changed
- Improved PhpRedis compatibility for
Relay\Cluster::config() - Deprecated
pclose()in favor ofclose() - Call
SELECT 0when stashing connections
Fixed
- Fixed handling arguments of
hsetex()method - Fixed arity for some vectorset commands
- Fixed wrong reply format of raw
GETEXcommand - Fixed
HEXISTSwhen we have limited cached information about a key - Fixed literal reply type for
SELECTandWATCHcommands