Releases: StackExchange/StackExchange.Redis
Releases · StackExchange/StackExchange.Redis
2.5.27
- Adds: a backlog/retry mechanism for commands issued while a connection isn't available (#1912 by @NickCraver)
- Commands will be queued if a multiplexer isn't yet connected to a Redis server.
- Commands will be queued if a connection is lost and then sent to the server when the connection is restored.
- All commands queued will only remain in the backlog for the duration of the configured timeout.
- To revert to previous behavior, a new
ConfigurationOptions.BacklogPolicyis available - old behavior is configured viaoptions.BacklogPolicy = BacklogPolicy.FailFast. This backlogs nothing and fails commands immediately if no connection is available.
- Adds: Makes
StreamEntryconstructor public for better unit test experience (#1923 by @WeihanLi) - Fix: Integer overflow error (issue #1926) with 2GiB+ result payloads (#1928 by @mgravell)
- Change: Update assumed redis versions to v2.8 or v4.0 in the Azure case (#1929 by @NickCraver)
- Fix: Profiler showing
EVALinsteadEVALSHA(#1930 by @martinpotter) - Performance: Moved tiebreaker fetching in connections into the handshake phase (streamline + simplification) (#1931 by @NickCraver)
- Stability: Fixed potential disposed object usage around Arenas (pulling in Piplines.Sockets.Unofficial#63 by @mgravell)
- Adds: Thread pool work item stats to exception messages to help diagnose contention (#1964 by @NickCraver)
- Fix/Performance: Overhauls pub/sub implementation for correctness (#1947 by @NickCraver)
- Fixes a race in subscribing right after connected
- Fixes a race in subscribing immediately before a publish
- Fixes subscription routing on clusters (spreading instead of choosing 1 node)
- More correctly reconnects subscriptions on connection failures, including to other endpoints
- Adds "(vX.X.X)" version suffix to the default client ID so server-side
CLIENT LISTcan more easily see what's connected (#1985 by @NickCraver) - Fix: Properly including or excluding key names on some message failures (#1990 by @NickCraver)
- Fix: Correct return of nil results in
LPOP,RPOP,SRANDMEMBER, andSPOP(#1993 by @NickCraver)
2.2.88
- Change: Connection backoff default is now exponential instead of linear (#1896 by @lolodi)
- Adds: Support for
NodeMaintenanceScaleCompleteevent (handles Redis cluster scaling) (#1902 by @NickCraver)
2.1.28
- Fix: Stability in new sentinel APIs
- Fix #1407: Include
SslProtocolosinConfigurationOptions.ToString()(#1408 by @vksampath and Sampath Vuyyuru) - Fix: Clarify messaging around disconnected multiplexers (#1396 by @NickCraver)
- Change: Tweak methods of new sentinel API (this is technically a breaking change, but since this is a new API that was pulled quickly, we consider this to be acceptable)
- Adds: New thread
SocketManagermode (opt-in) to always use the regular thread-pool instead of the dedicated pool - Adds: Improved counters in/around error messages
- Adds: New
Userproperty onConfigurationOptions - Build: Enable deterministic builds (note: this failed; fixed in 2.1.30)
2.0.600
- Adds:
ulongsupport toRedisValueandRedisResult(#1104 by @mgravell) - Fix: Remove odd equality:
"-" != 0(we do, however, still allow"-0", as that is at least semantically valid, and is logically== 0) (related to #1103) - Performance: Rework how pub/sub queues are stored - reduces delegate overheads (related to #1101)
- Fix #1108: Ensure that we don't try appending log data to the
TextWriteronce we've returned from a method that accepted one
2.6.86
- Fix #1520 & #1660: When
MOVEDis encountered from a cluster, a reconfigure will happen proactively to react to cluster changes ASAP (#2286 by @NickCraver) - Fix #2249: Properly handle a
failstate (newClusterNode.IsFailproperty) forCLUSTER NODESand exposefail?as a property (IsPossiblyFail) as well (#2288 by @NickCraver) - Adds:
IConnectionMultiplexer.ServerMaintenanceEvent(was onConnectionMultiplexerbut not the interface) (#2306 by @NickCraver) - Adds: To timeout messages, additional debug information:
Sync-Ops(synchronous operations),Async-Ops(asynchronous operations), andServer-Connected-Seconds(how long the connection in question has been connected, or"n/a") (#2300 by @NickCraver)
2.6.80
- Adds:
last-inandcur-in(bytes) to timeout exceptions to help identify timeouts that were just-behind another large payload off the wire (#2276 by @NickCraver) - Adds: general-purpose tunnel support, with HTTP proxy "connect" support included (#2274 by @mgravell)
- Removes: Package dependency (
System.Diagnostics.PerformanceCounter) (#2285 by @NickCraver)
2.6.70
- Fix:
MOVEDwithNoRedirect(and other non-reachable errors) should respect theIncludeDetailInExceptionssetting (#2267 by @mgravell) - Fix #2251 & #2265: Cluster endpoint connections weren't proactively connecting subscriptions in all cases and taking the full connection timeout to complete as a result (#2268 by @iteplov)
2.6.66
- Fix #2182: Be more flexible in which commands are "primary only" in order to support users with replicas that are explicitly configured to allow writes (#2183 by @slorello89)
- Adds:
IConnectionMultiplexernow implementsIAsyncDisposable(#2161 by @kimsey0) - Adds:
IConnectionMultiplexer.GetServers()to get allIServerinstances for a multiplexer (#2203 by @NickCraver) - Fix #2016: Align server selection with supported commands (e.g. with writable servers) to reduce
Command cannot be issued to a replicaerrors (#2191 by @slorello89) - Performance: Optimization around timeout processing to reduce lock contention in the case of many items that haven't yet timed out during a heartbeat (#2217 by @NickCraver)
- Fix #2223: Resolve sync-context issues (missing
ConfigureAwait(false)) (#2229 by @mgravell) - Fix #1968: Improved handling of EVAL scripts during server restarts and failovers, detecting and re-sending the script for a retry when needed (#2170 by @martintmk)
- Adds:
ConfigurationOptions.SslClientAuthenticationOptions(netcoreapp3.1/net5.0+ only) to give more control over SSL/TLS authentication (#2224 by @NickCraver) - Fix #2240: Improve support for DNS-based IPv6 endpoints (#2241 by @NickCraver)
- Adds:
ConfigurationOptions.HeartbeatInterval(Advanced Setting - see docs) To allow more finite control of the client heartbeat, which encompases how often command timeouts are actually evaluated - still defaults to 1,000 ms (#2243 by @NickCraver) - Fix #1879: Improve exception message when the wrong password is used (#2246 by @NickCraver)
- Fix #2233: Repeated connection to Sentinel servers using the same ConfigurationOptions would fail (#2242 by @NickCraver)
2.6.48
2.6.45
- Adds: Nullable reference type annotations (#2041 by @NickCraver)
- Adds annotations themselves for nullability to everything in the library
- Fixes a few internal edge cases that will now throw proper errors (rather than a downstream null reference)
- Fixes inconsistencies with
nullvs. empty array returns (preferring an not-null empty array in those edge cases) - Note: does not increment a major version (as these are warnings to consumers), because: they're warnings (errors are opt-in), removing obsolete types with a 3.0 rev would be binary breaking (this isn't), and reving to 3.0 would cause binding redirect pain for consumers. Bumping from 2.5 to 2.6 only for this change.
- Adds: Support for
COPYwith.KeyCopy()/.KeyCopyAsync()(#2064 by @Avital-Fine) - Adds: Support for
LMOVEwith.ListMove()/.ListMoveAsync()(#2065 by @Avital-Fine) - Adds: Support for
ZRANDMEMBERwith.SortedSetRandomMember()/.SortedSetRandomMemberAsync(),.SortedSetRandomMembers()/.SortedSetRandomMembersAsync(), and.SortedSetRandomMembersWithScores()/.SortedSetRandomMembersWithScoresAsync()(#2076 by @Avital-Fine) - Adds: Support for
SMISMEMBERwith.SetContains()/.SetContainsAsync()(#2077 by @Avital-Fine) - Adds: Support for
ZDIFF,ZDIFFSTORE,ZINTER,ZINTERCARD, andZUNIONwith.SortedSetCombine()/.SortedSetCombineAsync(),.SortedSetCombineWithScores()/.SortedSetCombineWithScoresAsync(), and.SortedSetIntersectionLength()/.SortedSetIntersectionLengthAsync()(#2075 by @Avital-Fine) - Adds: Support for
SINTERCARDwith.SetIntersectionLength()/.SetIntersectionLengthAsync()(#2078 by @Avital-Fine) - Adds: Support for
LPOSwith.ListPosition()/.ListPositionAsync()and.ListPositions()/.ListPositionsAsync()(#2080 by @slorello89) - Adds: Support for
ZMSCOREwith.SortedSetScores()/.SortedSetScoresAsync()(#2082 by @ttingen) - Adds: Support for
NX | XX | GT | LTtoEXPIRE,EXPIREAT,PEXPIRE, andPEXPIREATwith.KeyExpire()/.KeyExpireAsync()(#2083 by @Avital-Fine) - Adds: Support for
EXPIRETIME, andPEXPIRETIMEwith.KeyExpireTime()/.KeyExpireTimeAsync()(#2083 by @Avital-Fine) - Fix: For streams, properly hash
XACK,XCLAIM, andXPENDINGin cluster scenarios to eliminateMOVEDretries (#2085 by @nielsderdaele) - Adds: Support for
OBJECT REFCOUNTwith.KeyRefCount()/.KeyRefCountAsync()(#2087 by @Avital-Fine) - Adds: Support for
OBJECT ENCODINGwith.KeyEncoding()/.KeyEncodingAsync()(#2088 by @Avital-Fine) - Adds: Support for
GEOSEARCHwith.GeoSearch()/.GeoSearchAsync()(#2089 by @slorello89) - Adds: Support for
GEOSEARCHSTOREwith.GeoSearchAndStore()/.GeoSearchAndStoreAsync()(#2089 by @slorello89) - Adds: Support for
HRANDFIELDwith.HashRandomField()/.HashRandomFieldAsync(),.HashRandomFields()/.HashRandomFieldsAsync(), and.HashRandomFieldsWithValues()/.HashRandomFieldsWithValuesAsync()(#2090 by @slorello89) - Adds: Support for
LMPOPwith.ListLeftPop()/.ListLeftPopAsync()and.ListRightPop()/.ListRightPopAsync()(#2094 by @slorello89) - Adds: Support for
ZMPOPwith.SortedSetPop()/.SortedSetPopAsync()(#2094 by @slorello89) - Adds: Support for
XAUTOCLAIMwith.StreamAutoClaim()/.StreamAutoClaimAsync()and.StreamAutoClaimIdsOnly()/.StreamAutoClaimIdsOnlyAsync()(#2095 by @ttingen) - Fix #2071: Add
.StringSet()/.StringSetAsync()overloads for source compat broken for 1 case in 2.5.61 (#2098 by @NickCraver) - Fix #2086: Correct HashSlot calculations for
XREADandXREADGROUPcommands (#2093 by @nielsderdaele) - Adds: Support for
LCSwith.StringLongestCommonSubsequence()/.StringLongestCommonSubsequence(),.StringLongestCommonSubsequenceLength()/.StringLongestCommonSubsequenceLengthAsync(), and.StringLongestCommonSubsequenceWithMatches()/.StringLongestCommonSubsequenceWithMatchesAsync()(#2104 by @Avital-Fine) - Adds: Support for
OBJECT FREQwith.KeyFrequency()/.KeyFrequencyAsync()(#2105 by @Avital-Fine) - Performance: Avoids allocations when computing cluster hash slots or testing key equality (#2110 by @mgravell)
- Adds: Support for
SORT_ROwith.Sort()/.SortAsync()(#2111 by @slorello89) - Adds: Support for
BIT | BYTEtoBITCOUNTandBITPOSwith.StringBitCount()/.StringBitCountAsync()and.StringBitPosition()/.StringBitPositionAsync()(#2116 by @Avital-Fine) - Adds: Support for pub/sub payloads that are unary arrays (#2118 by @mgravell)
- Fix: Sentinel timer race during dispose (#2133 by @ewisuri)
- Adds: Support for
GT,LT, andCHonZADDwith.SortedSetAdd()/.SortedSetAddAsync()and.SortedSetUpdate()/.SortedSetUpdateAsync()(#2136 by @Avital-Fine) - Adds: Support for
COMMAND COUNT,COMMAND GETKEYS, andCOMMAND LIST, with.CommandCount()/.CommandCountAsync(),.CommandGetKeys()/.CommandGetKeysAsync(), and.CommandList()/.CommandListAsync()(#2143 by @shacharPash)