Skip to content

Releases: StackExchange/StackExchange.Redis

3.0.0

12 Jun 15:11
3.0.0
2be2ae6

Choose a tag to compare

3.0.0 represents an overhaul of the internal IO logic, for both performance and stability reasons.

Intentionally, there are no API changes in this release; it is a direct mirror of 2.13.17, but with the new IO core.

What is the aim of the internals rewrite?

SE.Redis v2 made use of a few concepts internally:

  • the "pipelines" IO layer from System.IO.Pipelines, via Pipelines.Sockets.Unoficial
  • a DOM-based parser built on top of a custom arena allocator

v3 fundamentally revises these engineering decisions:

  • IO and buffer control is taken back directly into the library, allowing for greater control of IO boundaries and the threading model
  • the parser is re-written as a reader-based implementation

This allows for significant performance improvement, especially when processing large / complex results - for example, if we use the LRANGE_600 test from redis-benchmark (or resp-benchmark):

### classic SE.Redis 2.13.17.28173 ###
LRANGE_600:     7,579 requests per second
LRANGE_600:     7,554 requests per second
LRANGE_600:     7,284 requests per second
LRANGE_600:     7,158 requests per second
LRANGE_600:     7,174 requests per second

vs

### classic SE.Redis 3.0.0.11234 ###
LRANGE_600:     16,408 requests per second
LRANGE_600:     17,681 requests per second
LRANGE_600:     17,331 requests per second
LRANGE_600:     17,317 requests per second
LRANGE_600:     16,665 requests per second

(for tests with simpler results, like INCR, results of over 1M requests per second are achievable)


3.0 is the first part of a wave of planned IO work; 3.1 will revise the "write" part of the write loop, moving message serialization out of the critical serialized core of the multiplexer. All of this work is based on extensive prototyping and benchmarking, demonstrating that these approaches, when combined, provide significant throughput and stability improvements.

This release has undergone extensive testing. If you experience problems, please let us know!

3.0.47-preview

01 Jun 13:25
3.0.47-preview
5eda048

Choose a tag to compare

3.0.47-preview Pre-release
Pre-release

What's Changed

This is a preview release of SE.Redis v3. It should be production ready - we're not aware of any blocking issues.

Key changes:

  • Large re-implementation of the entire "read" path
    • No longer uses Pipelines.Sockets.Unofficial
    • Much more efficient for deep/complex results
  • RESP3 is now used by default (see here for more info including how to force RESP2)

2.3.17

27 May 13:09
2.3.17
6e0df97

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 2.13.10...2.3.17

2.13.10

21 May 16:03
2.13.10
3d1b0da

Choose a tag to compare

This release is marked inactive due to a critical bug when using TCP keep-alives on DNS (i.e. named, not IP) endpoints; this is specific to non-Windows platforms, before .NET 10. See #3086 and #3090


What's Changed

  • Fix incorrect routing of some sorted-set and stream commands by @mgravell in #3080
  • ConfigurationOptions: don't serialize (ToString()) or clone Protocol if it comes from the defaults-provider by @mgravell in #3082
  • enable TCP keep-alives by @mgravell in #3078
  • Move CI to 8.8 rc1 by @mgravell in #3079
  • Draft support for 8.8 arrays by @mgravell in #3076

Full Changelog: 2.13.1...2.13.10

2.13.1

12 May 15:34
2.13.1
981ba52

Choose a tag to compare

IMPORTANT: This release changes the default protocol from RESP2 to RESP3 for Azure Managed Redis endpoints (only); this
has scalability and feature advantages, but if you are using modules or ad-hoc commands, please see the RESP3 notes, which includes:

  • the purpose of RESP3
  • scenarios where RESP2 vs RESP3 may be visible
  • how to explicitly choose to remain on RESP2
  • notes on additional libraries such as NRedisStack

What's Changed

Full Changelog: 2.12.27...2.13.1

2.12.27

11 May 08:13
2.12.27
46b60b3

Choose a tag to compare

What's Changed

  • Recognize Azure Managed Redis in new clouds by @philon-msft in #3068
  • Support ZADD INCR by @mgravell in #3071
  • Upgrade version of some packages needing system.memory by @jcaspes in #3056
  • interpreting server_mode field (to support Valkey 8+ cluster) by @wipiano in #3050
  • Run tests using custom images, new composite action: run-tests by @Peter-Sh in #3052
  • (toys) Provide basic modifiable throughput calculator by @mgravell in #3057
  • Investigate (and fix) VADD 8.6.3 CI failure by @mgravell in #3073

Preview ([Experimental]) features for Redis 8.8

New Contributors

Full Changelog: 2.12.14...2.12.27

2.12.14

02 Apr 13:45
2.12.14
e43dd9b

Choose a tag to compare

What's Changed

Impact: "high" if using cluster and high-integrity-mode together (resolves an issue that can mis-report -MOVED responses as integrity failures)

  • Resolve critical failure in high-integrity-mode with -MOVED response by @mgravell in #3049
  • Allow heartbeat to restart the pipe thread with only sync commands by @frobion in #2965
  • GitHubActions logger; exclude passed/skipped by @mgravell in #3045

NuGet link

New Contributors

Full Changelog: 2.12.8...2.12.14

2.12.8

25 Mar 13:37
2.12.8
8af9911

Choose a tag to compare

What's Changed

Full Changelog: 2.12.4...2.12.8

2.12.4

19 Mar 16:56
2.12.4
6f24522

Choose a tag to compare

What's Changed

  • Improve detection of connect/handshake failures and how that impacts the retry-policy by @mgravell in #3038
  • Fix RESP3 client handshakes on non-RESP3 servers by @mgravell in #3037

Full Changelog: 2.12.1...2.12.4

2.12.1

13 Mar 09:06
2.12.1
6eeb04d

Choose a tag to compare

What's Changed

Full Changelog: 2.11.8...2.12.1