Releases: StackExchange/StackExchange.Redis
Release list
3.1.0
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
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
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
What's Changed
- Fix error processing GeoResult by @mgravell in #3124
- Build tools: centralize code-gen indent handling in a CodeWriter by @zhengyazhao in #3121
- Throw a clear error when an Execute command contains whitespace by @arpitjain099 in #3122
New Contributors
- @zhengyazhao made their first contribution in #3121
- @arpitjain099 made their first contribution in #3122
Full Changelog: 3.0.11...3.0.17
3.0.11
3.0.7
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.RequestBufferPoolandConfigurationOptions.ResponseBufferPool
- see
- Stabilize CI, especially on Windows by @mgravell in #3109
Full Changelog: 3.0.0_main...3.0.7
2.13.17
What's Changed
- Fix platform-specific TCP keep-alive issues by @mgravell in #3090
- Tear down connection on write failure to prevent queue desync by @Pranish-Pantha in #3092
- Fix 8.8 ARGREP NOCASE logic inversion and support ARINFO FULL by @mgravell in #3087
- SENTINEL: defensive check around ROLE by @mgravell in #3088
- Add 8.8 add support for INCREX by @mgravell in #3065
New Contributors
- @Pranish-Pantha made their first contribution in #3092
Full Changelog: 2.13.10...2.13.17
3.0.0
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 byAllowAdmin; for example, in 2.x,db.Execute("FLUSHALL");would work even ifAllowAdminwas 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 secondvs
### 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
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
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 cloneProtocolif 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