Skip to content

Releases: StackExchange/StackExchange.Redis

3.1.0

Choose a tag to compare

@mgravell mgravell released this 31 Jul 09:05
bf8fac8

What's Changed

This is a major feature, with extensive documentation.

Note that it currently has an [Experimental] marker, linking here, but: this is purely for an abundance of caution; it is considered released and fully supported.

(engineering)

  • CI: stop dpkg starting redis-server (Windows/WSL install hang on 8.10) by @mgravell in #3145
  • Make the previous "we will remove this in 3.0" features errors rather than warnings, and reframe as "...in 3.2"

available on NuGet

Full Changelog: 3.0.25...3.1.0

3.0.25

Choose a tag to compare

@mgravell mgravell released this 29 Jul 13:34
817419b

What's Changed

  • Allow reasonable CLIENT commands to proceed without admin mode enabled by @mgravell in #3129
  • Server 8.10 HIMPORT support by @mgravell in #3136
  • Server 8.10 - LMOVEM, XREAD, XREADGROUP, SDIFFCARD, SUNIONCARD by @mgravell in #3135
  • fix: Queue batch commands to backlog during MOVED reconnection by @advaMosh in #3134
  • Sentinel: re-elect primary on failover between already-known nodes by @rebaseandpanic in #3130
  • Remove [Experimental] on established server features for Server 8.4, 8.6 and 8.8 by @mgravell in #3137
  • update CI image; 2022 being super flakey by @mgravell in #3142
  • update 8.10 test validation image by @mgravell in #3143

New Contributors

Full Changelog: 3.0.17...3.0.25

3.1.1-g7441909d06

3.1.1-g7441909d06 Pre-release
Pre-release

Choose a tag to compare

@mgravell mgravell released this 17 Jul 15:19
7441909

NuGet: https://www.nuget.org/packages/StackExchange.Redis/3.1.1-g7441909d06

This is a preview release of the Active:Active functionality in SE.Redis, built from the Active:Active PR branch.

These features are fully documented, but the main docs content builds from main only; you can preview
the proposed documentation here
.

Included:

  • connection-groups (think "multi-geo", "active-active", etc)
    • health-checks (active) and circuit-breaker (passive) support for stability monitoring
    • weight and latency prioritization
  • automatic retry including over failovers - works with "regular" connections or connection-groups

Known limitations:

  • when using automatic retries (WithRetry(...)), transactions (CreateTransaction) are not available; this should be available soon; there is no plan to support batches (CreateBatch), due to ordering/correctness concerns
  • when using connection-groups, individual (i.e. single-channel) pub/sub unsubscribe operations are not supported

Note that the feature is marked [Experimental]; the suppress build warnings, see SER007

3.0.17

Choose a tag to compare

@mgravell mgravell released this 10 Jul 20:24
0b03ed1

What's Changed

New Contributors

Full Changelog: 3.0.11...3.0.17

3.0.11

Choose a tag to compare

@mgravell mgravell released this 29 Jun 00:53
eab8a35

What's Changed

  • Support ReadOnlySequence<byte> with RedisValue by @pairbit in #3112
  • add package logo by @mgravell in #3115
  • Optimize RedisValue / reader logic by using canonical parser and new ShortBlob storage kind by @mgravell in #3114

Full Changelog: 3.0.7...3.0.11

3.0.7

Choose a tag to compare

@mgravell mgravell released this 24 Jun 14:46
3.0.7
466c4b7

What's Changed

  • avoid unobserved task exceptions during connection teardown by @mgravell in #3108
  • use MemoryPool<byte> sources for request/response buffering by @mgravell in #3107
    • see ConfigurationOptions.RequestBufferPool and ConfigurationOptions.ResponseBufferPool
  • Stabilize CI, especially on Windows by @mgravell in #3109

Full Changelog: 3.0.0_main...3.0.7

2.13.17

Choose a tag to compare

@mgravell mgravell released this 27 May 13:09
2.13.17
6e0df97

What's Changed

New Contributors

Full Changelog: 2.13.10...2.13.17

3.0.0

Choose a tag to compare

@mgravell mgravell released this 12 Jun 15:11
3.0.0
2be2ae6

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.

Additionally, v3 uses RESP3 by default; see notes here

addendum, one change discovered:

  • Execute[Async] now detects and respects "admin" commands, i.e. those protected by AllowAdmin; for example, in 2.x, db.Execute("FLUSHALL"); would work even if AllowAdmin was not enabled - this will now throw at the client without issuing the command to the server

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

3.0.47-preview Pre-release
Pre-release

Choose a tag to compare

@mgravell mgravell released this 01 Jun 13:25
3.0.47-preview
5eda048

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

Choose a tag to compare

@mgravell mgravell released this 21 May 16:03
2.13.10
3d1b0da

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