Skip to content

Releases: StackExchange/StackExchange.Redis

2.0.600

10 Jan 21:08
Compare
Choose a tag to compare
  • Adds: ulong support to RedisValue and RedisResult (#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 TextWriter once we've returned from a method that accepted one

2.6.86

10 Jan 21:56
02c29ef
Compare
Choose a tag to compare
  • Fix #1520 & #1660: When MOVED is encountered from a cluster, a reconfigure will happen proactively to react to cluster changes ASAP (#2286 by @NickCraver)
  • Fix #2249: Properly handle a fail state (new ClusterNode.IsFail property) for CLUSTER NODES and expose fail? as a property (IsPossiblyFail) as well (#2288 by @NickCraver)
  • Adds: IConnectionMultiplexer.ServerMaintenanceEvent (was on ConnectionMultiplexer but not the interface) (#2306 by @NickCraver)
  • Adds: To timeout messages, additional debug information: Sync-Ops (synchronous operations), Async-Ops (asynchronous operations), and Server-Connected-Seconds (how long the connection in question has been connected, or "n/a") (#2300 by @NickCraver)

2.6.80

10 Jan 21:55
5263608
Compare
Choose a tag to compare
  • Adds: last-in and cur-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

10 Jan 21:54
85c1b2b
Compare
Choose a tag to compare
  • Fix: MOVED with NoRedirect (and other non-reachable errors) should respect the IncludeDetailInExceptions setting (#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

10 Jan 21:53
d1b802b
Compare
Choose a tag to compare
  • 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: IConnectionMultiplexer now implements IAsyncDisposable (#2161 by @kimsey0)
  • Adds: IConnectionMultiplexer.GetServers() to get all IServer instances 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 replica errors (#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

10 Jan 21:51
0ebe530
Compare
Choose a tag to compare
  • URGENT Fix: #2167, #2176: fix error in batch/transaction handling that can result in out-of-order instructions (#2177 by @mgravell)
  • Fix: #2164: fix LuaScript.Prepare for scripts that don't have parameters (#2166 by @mgravell)

2.6.45

10 Jan 21:50
Compare
Choose a tag to compare
  • 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 null vs. 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 COPY with .KeyCopy()/.KeyCopyAsync() (#2064 by @Avital-Fine)
  • Adds: Support for LMOVE with .ListMove()/.ListMoveAsync() (#2065 by @Avital-Fine)
  • Adds: Support for ZRANDMEMBER with .SortedSetRandomMember()/.SortedSetRandomMemberAsync(), .SortedSetRandomMembers()/.SortedSetRandomMembersAsync(), and .SortedSetRandomMembersWithScores()/.SortedSetRandomMembersWithScoresAsync() (#2076 by @Avital-Fine)
  • Adds: Support for SMISMEMBER with .SetContains()/.SetContainsAsync() (#2077 by @Avital-Fine)
  • Adds: Support for ZDIFF, ZDIFFSTORE, ZINTER, ZINTERCARD, and ZUNION with .SortedSetCombine()/.SortedSetCombineAsync(), .SortedSetCombineWithScores()/.SortedSetCombineWithScoresAsync(), and .SortedSetIntersectionLength()/.SortedSetIntersectionLengthAsync() (#2075 by @Avital-Fine)
  • Adds: Support for SINTERCARD with .SetIntersectionLength()/.SetIntersectionLengthAsync() (#2078 by @Avital-Fine)
  • Adds: Support for LPOS with .ListPosition()/.ListPositionAsync() and .ListPositions()/.ListPositionsAsync() (#2080 by @slorello89)
  • Adds: Support for ZMSCORE with .SortedSetScores()/.SortedSetScoresAsync() (#2082 by @ttingen)
  • Adds: Support for NX | XX | GT | LT to EXPIRE, EXPIREAT, PEXPIRE, and PEXPIREAT with .KeyExpire()/.KeyExpireAsync() (#2083 by @Avital-Fine)
  • Adds: Support for EXPIRETIME, and PEXPIRETIME with .KeyExpireTime()/.KeyExpireTimeAsync() (#2083 by @Avital-Fine)
  • Fix: For streams, properly hash XACK, XCLAIM, and XPENDING in cluster scenarios to eliminate MOVED retries (#2085 by @nielsderdaele)
  • Adds: Support for OBJECT REFCOUNT with .KeyRefCount()/.KeyRefCountAsync() (#2087 by @Avital-Fine)
  • Adds: Support for OBJECT ENCODING with .KeyEncoding()/.KeyEncodingAsync() (#2088 by @Avital-Fine)
  • Adds: Support for GEOSEARCH with .GeoSearch()/.GeoSearchAsync() (#2089 by @slorello89)
  • Adds: Support for GEOSEARCHSTORE with .GeoSearchAndStore()/.GeoSearchAndStoreAsync() (#2089 by @slorello89)
  • Adds: Support for HRANDFIELD with .HashRandomField()/.HashRandomFieldAsync(), .HashRandomFields()/.HashRandomFieldsAsync(), and .HashRandomFieldsWithValues()/.HashRandomFieldsWithValuesAsync() (#2090 by @slorello89)
  • Adds: Support for LMPOP with .ListLeftPop()/.ListLeftPopAsync() and .ListRightPop()/.ListRightPopAsync() (#2094 by @slorello89)
  • Adds: Support for ZMPOP with .SortedSetPop()/.SortedSetPopAsync() (#2094 by @slorello89)
  • Adds: Support for XAUTOCLAIM with .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 XREAD and XREADGROUP commands (#2093 by @nielsderdaele)
  • Adds: Support for LCS with .StringLongestCommonSubsequence()/.StringLongestCommonSubsequence(), .StringLongestCommonSubsequenceLength()/.StringLongestCommonSubsequenceLengthAsync(), and .StringLongestCommonSubsequenceWithMatches()/.StringLongestCommonSubsequenceWithMatchesAsync() (#2104 by @Avital-Fine)
  • Adds: Support for OBJECT FREQ with .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_RO with .Sort()/.SortAsync() (#2111 by @slorello89)
  • Adds: Support for BIT | BYTE to BITCOUNT and BITPOS with .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, and CH on ZADD with .SortedSetAdd()/.SortedSetAddAsync() and .SortedSetUpdate()/.SortedSetUpdateAsync() (#2136 by @Avital-Fine)
  • Adds: Support for COMMAND COUNT, COMMAND GETKEYS, and COMMAND LIST, with .CommandCount()/.CommandCountAsync(), .CommandGetKeys()/.CommandGetKeysAsync(), and .CommandList()/.CommandListAsync() (#2143 by @shacharPash)

2.5.61

10 Jan 21:46
b159173
Compare
Choose a tag to compare
  • Adds: GETEX support with .StringGetSetExpiry()/.StringGetSetExpiryAsync() (#1743 by @benbryant0)
  • Fix #1988: Don't issue SELECT commands if explicitly disabled (#2023 by @NickCraver)
  • Adds: KEEPTTL support on SET operations (#2029 by @NickCraver)
  • Fix: Allow XTRIM MAXLEN argument to be 0 (#2030 by @NicoAvanzDev)
  • Adds: ConfigurationOptions.BeforeSocketConnect for configuring sockets between creation and connection (#2031 by @NickCraver)
  • Fix #1813: Don't connect to endpoints we failed to parse (#2042 by @NickCraver)
  • Fix: ClientKill/ClientKillAsync when using ClientType (#2048 by @NickCraver)
  • Adds: Most ConfigurationOptions changes after ConnectionMultiplexer connections will now be respected, e.g. changing a timeout will work and changing a password for auth rotation would be used at the next reconnect (#2050 by @NickCraver)
    • Obsolete: This change also moves ConnectionMultiplexer.IncludeDetailInExceptions and ConnectionMultiplexer.IncludePerformanceCountersInExceptions to ConfigurationOptions. The old properties are [Obsolete] proxies that work until 3.0 for compatibility.
  • Adds: Support for ZRANGESTORE with .SortedSetRangeAndStore()/.SortedSetRangeAndStoreAsync() (#2052 by @slorello89)

2.5.43

10 Jan 21:45
a2a5ac6
Compare
Choose a tag to compare
  • Adds: Bounds checking for ExponentialRetry backoff policy (#1921 by @gliljas)
  • Adds: DefaultOptionsProvider support for endpoint-based defaults configuration (#1987 by @NickCraver)
  • Adds: Envoy proxy support (#1989 by @rkarthick)
  • Performance: When SUBSCRIBE is disabled, give proper errors and connect faster (#2001 by @NickCraver)
  • Adds: GET on SET command support (present in Redis 6.2+ - #2003 by @martinekvili)
  • Performance: Improves concurrent load performance when backlogs are utilized (#2008 by @NickCraver)
  • Stability: Improves cluster connections when CLUSTER command is disabled (#2014 by @tylerohlsen)
  • Logging: Improves connection logging and adds overall timing to it (#2019 by @NickCraver)

2.2.79

10 Jan 21:40
ef1178e
Compare
Choose a tag to compare
  • NRediSearch: Support on json index (#1808 by @AvitalFineRedis)
  • NRediSearch: Support sortable TagFields and unNormalizedForm for Tag & Text Fields (#1862 by @slorello89 & @AvitalFineRedis)
  • Fix: Potential errors getting socket bytes (#1836 by @NickCraver)
  • Logging: Adds (.NET Version and timestamps) for better debugging (#1796 by @philon-msft)
  • Adds: Condition APIs (transactions), now supports StreamLengthEqual and variants (#1807 by @AlphaGremlin)
  • Adds: Support for count argument to ListLeftPop, ListLeftPopAsync, ListRightPop, and ListRightPopAsync (#1850 by @jjfmarket)
  • Fix: Potential task/thread exhaustion from the backlog processor (#1854 by @mgravell)
  • Adds: Support for listening to Azure Maintenance Events (#1876 by @amsoedal)
  • Adds: StringGetDelete/StringGetDeleteAsync APIs for Redis GETDEL command(#1840 by @WeihanLi)