Skip to content

Latest commit

 

History

History
482 lines (361 loc) · 52.4 KB

ReleaseNotes.md

File metadata and controls

482 lines (361 loc) · 52.4 KB

Release Notes

Current package versions:

NuGet Stable NuGet Pre-release MyGet
StackExchange.Redis StackExchange.Redis StackExchange.Redis MyGet

Unreleased

  • TLS certificate/TrustIssuer: Check EKU in X509 chain checks when validating certificates (#2670 by NickCraver)

2.7.33

2.7.27

  • Support HeartbeatConsistencyChecks and HeartbeatInterval in Clone() (#2658 by mgravell)
  • Add AddLibraryNameSuffix to multiplexer; allows usage-specific tokens to be appended after connect (#2659 by mgravell)

2.7.23

  • Fix #2653: Client library metadata should validate contents (#2654 by mgravell)
  • Add HeartbeatConsistencyChecks option (opt-in) to enabled per-heartbeat (defaults to once per second) checks to be sent to ensure no network stream corruption has occurred (#2656 by NickCraver)

2.7.20

  • Fix #2642: Detect and support multi-DB pseudo-cluster/proxy scenarios (#2646 by mgravell)

2.7.17

2.7.10

  • Fix #2593: EXPIRETIME and PEXPIRETIME miscategorized as PrimaryOnly commands causing them to fail when issued against a read-only replica (#2593 by slorello89)
  • Fix #2591: Add HELLO to Sentinel connections so they can support RESP3 (#2601 by NickCraver)
  • Fix #2595: Add detection handling for dead sockets that the OS says are okay, seen especially in Linux environments (#2610 by NickCraver)

2.7.4

2.6.122

  • Change: Target net6.0 instead of net5.0, since net5.0 is end of life. (#2497 by eerhardt)
  • Fix: Fix nullability annotation of IConnectionMultiplexer.RegisterProfiler (#2494 by eerhardt)
  • Fix #2520: Improve cluster connections in down scenarios by not re-pinging successful nodes (#2525 by Matiszak)
  • Add: Timer.ActiveCount under POOL in timeout messages on .NET 6+ to help diagnose timer overload affecting timeout evaluations (#2500 by NickCraver)
  • Add: LibraryName configuration option; allows the library name to be controlled at the individual options level (in addition to the existing controls in DefaultOptionsProvider) (#2502 by mgravell)
  • Add: DefaultOptionsProvider.GetProvider allows lookup of provider by endpoint (#2502 by mgravell)

2.6.116

  • Fix #2479: Add RedisChannel.UseImplicitAutoPattern (global) and RedisChannel.IsPattern (#2480 by mgravell)
  • Fix #2479: Mark RedisChannel conversion operators as obsolete; add RedisChannel.Literal and RedisChannel.Pattern helpers (#2481 by mgravell)
  • Fix #2449: Update Pipelines.Sockets.Unofficial to v2.2.8 to support native AOT (#2456 by eerhardt)

2.6.111

  • Fix #2426: Don't restrict multi-slot operations on Envoy proxy; let the proxy decide (#2428 by mgravell)
  • Add: Support for User/Password in DefaultOptionsProvider to support token rotation scenarios (#2445 by NickCraver)
  • Fix #2449: Resolve AOT trim warnings in TryGetAzureRoleInstanceIdNoThrow (#2451 by eerhardt)
  • Adds: Support for HTTP/1.1 200 Connection established in HTTP Tunnel (#2448 by flobernd)
  • Adds: Timeout duration to backlog timeout error messages (#2452 by NickCraver)
  • Adds: DefaultOptionsProvider.LibraryName for specifying lib-name passed to CLIENT SETINFO in Redis 7.2+ (#2453 by NickCraver)

2.6.104

  • Fix #2412: Critical (but rare) GC bug that can lead to async tasks never completing if the multiplexer is not held by the consumer (#2408 by mgravell)
  • Add: Better error messages (over generic timeout) when commands are backlogged and unable to write to any connection (#2408 by NickCraver)
  • Fix #2392: Dequeue all timed out messages from the backlog when not connected (including Fire+Forget) (#2397 by kornelpal)
  • Fix #2400: Expose ChannelMessageQueue as IAsyncEnumerable<ChannelMessage> (#2402 by mgravell)
  • Add: Support for CLIENT SETINFO (lib name/version) during handshake; opt-out is via ConfigurationOptions; also support read of resp, lib-ver and lib-name via CLIENT LIST (#2414 by mgravell)
  • Documentation: clarify the meaning of RedisValue.IsInteger re #2418 (#2420 by mgravell)

2.6.96

2.6.90

  • Adds: Support for EVAL_RO and EVALSHA_RO via IDatabase.ScriptEvaluateReadOnly/IDatabase.ScriptEvaluateReadOnlyAsync (#2168 by shacharPash)
  • Fix #1458: Fixes a leak condition when a connection completes on the TCP phase but not the Redis handshake (#2238 by NickCraver)
  • Internal: ServerSnapshot: Improve API and allow filtering with custom struct enumerator (#2337 by mgravell)

2.6.86

  • 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

  • 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

  • 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

  • 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

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 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

  • 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

2.5.27 (prerelease)

  • 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.BacklogPolicy is available - old behavior is configured via options.BacklogPolicy = BacklogPolicy.FailFast. This backlogs nothing and fails commands immediately if no connection is available.
  • Adds: Makes StreamEntry constructor 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 EVAL instead EVALSHA (#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 MarcGravell)
  • 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 LIST can 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, and SPOP (#1993 by NickCraver)

2.2.88

  • Change: Connection backoff default is now exponential instead of linear (#1896 by lolodi)
  • Adds: Support for NodeMaintenanceScaleComplete event (handles Redis cluster scaling) (#1902 by NickCraver)

2.2.79

2.2.62

2.2.50

2.2.4

2.2.3

2.1.58

  • Fix: [*]SCAN - fix possible NRE scenario if the iterator is disposed with an incomplete operation in flight
  • Fix: [*]SCAN - treat the cursor as an opaque value whenever possible, for compatibility with redis-cluster-proxy
  • Adds: [*]SCAN - include additional exception data in the case of faults

2.1.55

  • Adds: Identification of assembly binding problem on .NET Framework. Drops System.IO.Pipelines to 4.7.1, and identifies new System.Buffers binding failure on 4.7.2

2.1.50

  • Adds: Bind directly to sentinel-managed instances from a configuration string/object (#1431 by ejsmith)
  • Adds: last-delivered-id to StreamGroupInfo (#1477 by AndyPook)
  • Change: Update naming of replication-related commands to reflect Redis 5 naming (#1488 by mgravell & #945 by mgravell)
  • Fix #1460: IServer commands that are database-specific (DBSIZE, FLUSHDB, KEYS, SCAN) now respect the default database on the config (#1468 by mgravell)
  • Library updates

2.1.39

2.1.30

2.1.28

  • Fix: Stability in new sentinel APIs
  • Fix #1407: Include SslProtocolos in ConfigurationOptions.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 SocketManager mode (opt-in) to always use the regular thread-pool instead of the dedicated pool
  • Adds: Improved counters in/around error messages
  • Adds: New User property on ConfigurationOptions
  • Build: Enable deterministic builds (note: this failed; fixed in 2.1.30)

2.1.0

2.0.601

  • Adds: Tracking for current and next messages to help with debugging timeout issues - helpful in cases of large pipeline blockers

2.0.600

  • 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.0.593

  • Performance: Unify spin-wait usage on sync/async paths to one competitor
  • Fix #1101: When a ChannelMessageQueue is involved, unsubscribing via any route should still unsubscribe and mark the queue-writer as complete

2.0.588

  • Stability/Performance: Resolve intermittent stall in the write-lock that could lead to unexpected timeouts even when at low/reasonable (but concurrent) load

2.0.571

  • Performance: Use new arena allocation API to avoid RawResult[] overhead
  • Performance: Massively simplified how ResultBox<T> is implemented, in particular to reduce TaskCompletionSource<T> allocations
  • Performance: Fix sync-over-async issue with async call paths, and fix the SemaphoreSlim problems that this uncovered
  • Performance: Reintroduce the unsent backlog queue, in particular to improve async performance
  • Performance: Simplify how completions are reactivated, so that external callers use their originating pool, not the dedicated IO pools (prevent thread stealing)
  • Fix: Update Pipelines.Sockets.Unofficial to prevent issue with incorrect buffer re-use in corner-case
  • Fix: KeyDeleteAsync could, in some cases, always use DEL (instead of UNLINK)
  • Fix: Last unanswered write time was incorrect
  • Change: Use higher Pipe thresholds when sending

2.0.519

2.0.513

  • Fix #961: fix assembly binding redirect problems; IMPORTANT: this drops to an older System.Buffers version - if you have manually added redirects for 4.0.3.0, you may need to manually update to 4.0.2.0 (or remove completely)
  • Fix #962: Avoid NRE in edge-case when fetching bridge

2.0.505

  • Fix #943: Ensure transaction inner tasks are completed prior to completing the outer transaction task
  • Fix #946: Reinstate missing TryParse methods on RedisValue
  • Fix #940: Off-by-one on pre-boxed integer cache (NRediSearch)

2.0.495

2.0 is a large - and breaking - change. The key focus of this release is stability and reliability.

  • Hard Break: The package identity has changed; instead of StackExchange.Redis (not strong-named) and StackExchange.Redis.StrongName (strong-named), we are now only releasing StackExchange.Redis (strong-named). This is a binary breaking change that requires consumers to be re-compiled; it cannot be applied via binding-redirects
  • Hard Break: The platform targets have been rationalized - supported targets are .NETStandard 2.0 (and above), .NETFramework 4.6.1 (and above), and .NETFramework 4.7.2 (and above) (note - the last two are mainly due to assembly binding problems)
  • Hard Break: The profiling API has been overhauled and simplified; full documentation is provided here
  • Soft Break: The PreserveAsyncOrder behaviour of the pub/sub API has been deprecated; a new API has been provided for scenarios that require in-order pub/sub handling - the Subscribe method has a new overload without a handler parameter which returns a ChannelMessageQueue, which provides async ordered access to messages)
  • Internal: The network architecture has moved to use System.IO.Pipelines; this has allowed us to simplify and unify a lot of the network code, and in particular fix a lot of problems relating to how the library worked with TLS and/or .NETStandard
  • Change: As a result of the System.IO.Pipelines change, the error-reporting on timeouts is now much simpler and clearer; the timeouts documentation has been updated
  • Removed: The HighPriority (queue-jumping) flag is now deprecated
  • Internal: Most buffers internally now make use of pooled memory; RedisValue no longer preemptively allocates buffers
  • Internal: Added new custom thread-pool for handling async continuations to avoid thread-pool starvation issues
  • Internal: All IL generation has been removed; the library should now work on platforms that do not allow runtime-emit
  • Adds: asynchronous operations now have full support for reporting timeouts
  • Adds: new APIs now exist to work with pooled memory without allocations - RedisValue.CreateFrom(MemoryStream) and operator support for Memory<byte> and ReadOnlyMemory<byte>; and IDatabase.StringGetLease[Async](...), IDatabase.HashGetLease[Async](...), Lease<byte>.AsStream())
  • Adds: "streams" support (thanks to ttingen for their contribution)
  • Adds: Various missing commands / overloads have been added; Execute[Async] for additional commands is now available on IServer
  • Fix: A lot of general bugs and issues have been resolved
  • Break: RedisValue.TryParse was accidentally omitted in the overhaul; this has been rectified and will be available in the next build

A more complete list of issues addressed can be seen in this tracking issue

Note: we currently have no plans to do an additional 1.* release. In particular, even though there was a 1.2.7-alpha build on nuget, we do not currently have plans to release 1.2.7.


1.2.6

  • Change: cluster nodes output when using cluster-enabled target and 4.0+ (see redis #4186

1.2.5

  • (Critical) Fix: "poll mode" was disabled in the build for net45/net46 - Impact: IO jams and lack of reader during high load

1.2.4

1.2.3

  • Fix: When using redis-cluster with multiple replicas, use round-robin when selecting replica (#610 by mgravell)
  • Adds: Can specify NoScriptCache flag when using ScriptEvaluate to bypass all cache features (always uses EVAL instead of SCRIPT LOAD and EVALSHA) (#617 by Funbit)

1.2.2 (preview)

  • Break: .NET 4.0 support is not in this build, due to a build issue - looking into solutions
  • Adds: Make performance-counter tracking opt-in (IncludePerformanceCountersInExceptions) as it was causing problems (#587 by AlexanderKot)
  • Adds: Can now specifiy allowed SSL/TLS protocols (#603 by JonCole)
  • Adds: Track message status in exceptions (#576 by deepakverma)
  • Adds: GetDatabase() optimization for DB 0 and low numbered databases: IDatabase instance is retained and recycled (as long as no asyncState is provided)
  • Performance: Improved connection retry policy (#510 by deepakverma, #572 by deepakverma)
  • Adds: Execute/ExecuteAsync API to support "modules"; more info
  • Fix: Timeout link fixed re /docs change (below)
  • NRediSearch added as exploration into "modules"
  • Other changes (not library related)
    • Change: Refactor /docs for github pages
    • Change: Improve release note tracking
    • Build: Rework build process to use csproj

1.2.1

  • Fix: Avoid overlapping per-endpoint heartbeats

1.2.0 (same as 1.2.0-alpha1)

1.1.608

  • Fix: Bug with race condition in servers indexer (related: 1.1.606)

1.1.607

  • Fix: Ensure socket-mode polling is enabled (.net)

1.1.606

  • Fix: Bug with race condition in servers indexer

...and the rest

(We're happy to take PRs for change history going back in time or any fixes here!)