This version should reduce compilation times for most use cases.
- RPITIT / AFIT
- Set MSRV to 1.75
- Upgrade
rustls
to 0.23 - Upgrade
redis-protocol
to 5.0.0 - Split public interfaces with new feature flags.
- Add
ClusterDiscoveryPolicy
configuration options. - Add
SORT
andSORT_RO
- Add
cluster_hash
policy toOptions
- Change tracing span names to follow OpenTelemetry naming conventions.
- Callers that use certain managed services or Kubernetes-based deployment models should review the
new
ClusterDiscoveryPolicy
. - Double-check the new feature flags. The
codec
feature was also moved to redis-protocol. - Rustls - Check the new aws-lc-rs requirements or switch
back to
rustls/ring
. - Note the new tracing span names.
- Add
TransactionInterface
toRedisPool
- Add conversion from
HashMap
toMultipleOrderedPairs
. - Remove
lazy_static
- Update examples
- Fix tracing span annotations.
- Box large futures to reduce stack usage.
- Fix cluster replica failover at high concurrency.
- Fix potential race condition initializing the mocking layer.
- Add a shorthand
init
interface. - Fix cluster replica failover with unresponsive connections.
- Fix RESP3 connection init when used without a password.
- Remove the
globals
interface. - Support unix domain sockets.
- Add a Redis TimeSeries interface.
- Improve unresponsive connection checks.
- Move several feature flags to configuration options.
- Add a benchmarking tool.
- Update to Rustls 0.22.
- Add several new connection configuration options.
- Add a
fail_fast
flag to commands. - Switch to crossbeam types internally.
Using ..Default::default()
with the various configuration structs can avoid most of the breaking changes here.
Notable changes:
- Several configuration options were moved from
globals
toConnectionConfig
andPerformanceConfig
. - Several feature flags were moved to configuration fields, including:
ignore-auth-error
pool-prefer-active
reconnect-on-auth-error
auto-client-setname
- The
on_message
andon_keyspace_event
functions were renamed and moved to theEventInterface
. They now use the same naming conventions as the other event streams.
- Fix intermittent cluster routing errors
- Fix cluster failover in transactions
- Fix panic when reconnect delay jitter is 0
- Support percent encoding in URLs
- Support tuples for
RedisValue
andMultipleKeys
- Make
CLIENT ID
checks optional - Update dependencies
- Added a new client builder and configuration interface.
- Reworked or removed the majority of the
globals
interface. - Support multiple IP addresses in the
Resolve
interface. - Add
with_options
command configuration interface. - Replaced the
no-client-setname
feature flag withauto-client-setname
. - Add an interface to configure TCP socket options.
- Removed the automatic
serde_json::Value
->RedisValue
type conversion logic.- This unintentionally introduced some ambiguity on certain interfaces.
- The
RedisValue
->serde_json::Value
type conversion logic was not changed.
- Reworked the majority of the
RedisPool
interface. - Moved and refactored the
on_*
functions into a newEventInterface
. - Fixed bugs with the
Replica
routing implementation. - Fixed bugs related to parsing single-element arrays.
- Changed several
FromRedis
type conversion rules. See below or theFromRedis
docs for more information. - Add a RedisJSON interface.
- Add a RESP2 and RESP3 codec interface.
Notable interface changes:
ArcStr
has been replaced withbytes_utils::Str
.- Timeout arguments or fields now all use
std::time::Duration
. - Many of the old global or performance config values can now be set on individual commands via the
with_options
interface. - The
RedisPool
interface now directly implementsClientLike
rather than relying onDeref
shenanigans. - The
on_*
event functions were moved and renamed. Reconnection events now include the associatedServer
. - The
tls_server_name
field onServer
is now properly gated by the TLS feature flags. - Mocks are now optional even when the feature flag is enabled.
Notable implementation Changes:
Pipeline
andTransaction
structs can now be reused. Callingexec
,all
,last
, ortry_all
no longer drains the inner command buffer.- Many of the default timeout values have been lowered significantly, often from 60 sec to 10 sec.
- In earlier versions the
FromRedis
trait implemented a few inconsistent or ambiguous type conversions policies.- Most of these were consolidated under the
default-nil-types
feature flag. - It is recommended that callers review the updated
FromRedis
docs or see the unit tests in responses.
- Most of these were consolidated under the
- The
connect
function can now be called more than once to force reset all client state.
- Fix a bug with connection errors unexpectedly ending the connection task.
- Update various dependencies
- Move
pretty-env-logger
todev-dependencies
- Update rustfmt.toml
- Fix cluster replica discovery with Elasticache
- Fix cluster replica
READONLY
usage - Fix compilation error with
full-tracing
- Support
Vec<(T1, T2, ...)>
withFromRedis
- Fix cluster failover with paused nodes
- Add
Pipeline::try_all
- Add missing pubsub commands
- Improve docs, examples
- Add a client tracking interface.
- Add a global config value for broadcast channel capacity.
- Add an interface to interact with individual cluster nodes.
- Fix missing
impl StreamInterface for Transaction
- Add all
RedisClient
command traits toSubscriberClient
- Refactored the connection and protocol layer.
- Add a manual
Pipeline
interface for pipelining commands within a task. - Add a
Replica
client for interacting with replica nodes. - Rework the
Transaction
interface to buffer commands in memory before EXEC/DISCARD. - Rework the cluster discovery and failover implementation.
- Rework the MOVED/ASK implementation to more quickly and reliably follow cluster redirects.
- Rework the sentinel interface to more reliably handle failover scenarios.
- Fix several bugs related to detecting closed connections.
- Support the
functions
interface. - Add
Script
,Library
, andFunction
structs. - Add
Message
andMessageKind
pubsub structs. - Add a DNS configuration interface.
- Rework the
native-tls
interface to support fully customizable TLS configurations. - Add
rustls
support.- Note: both TLS feature flags can be used at the same time.
- Add a mocking layer interface.
Potentially breaking changes in 6.x:
- Switched from
(String, u16)
tuples to theServer
struct for all server identifiers. - New TLS feature flags:
enable-rustls
andenable-native-tls
.vendored-tls
is nowvendored-openssl
- New TLS configuration process: see the example.
- New transaction interface.
Transaction
commands are now buffered in memory before callingexec()
ordiscard()
.
- New backpressure configuration options, most notably the
Drain
policy. This is now the default. - Changed the type and fields on
BackpressurePolicy::Sleep
. - New custom command interface for managing cluster hash slots.
- Removed or renamed some fields on
RedisConfig
. - Changed the pubsub receiver interface to use
Message
instead of(String, RedisValue)
tuples. - Changed the
on_*
family of functions to return a BroadcastReceiver. - The
FromRedis
trait convertsRedisValue::Null
to"nil"
withString
andStr
.
- Reduce number of
tokio
features - Use 6379 as default cluster port in
from_url
- Fix RESP3 auth error (aembke#54)
- Reduce number of
tokio
features - Use 6379 as default cluster port in
from_url
- Fix RESP3 auth error (aembke#54)
- Reduce number of
tokio
features - Use 6379 as default cluster port in
from_url
- Fix RESP3 auth error (aembke#54)
- Update
redis-protocol
andnom
- Add
no-client-setname
feature flag
- Bug fixes
- Support URL parsing into a
RedisConfig
- Update
bzpopmin
andbzpopmax
return type - Remove unimplemented
mocks
feature
- Rewrite the protocol parser, so it can decode frames without moving or copying the underlying bytes
- Change most command implementations to avoid unnecessary allocations when using static str slices
- Rewrite the public interface to use different traits for different parts of the redis interface
- Relax some restrictions on certain commands being used in a transaction
- Implement the Streams interface (XADD, XREAD, etc.)
- RESP3 support
- Move most perf configuration options from
globals
to client-specific config structs - Add backpressure configuration options to the client config struct
- Fix bugs that can occur when using non-UTF8 byte arrays as keys
- Add the
serde-json
feature - Handle more complicated failure modes with Redis clusters
- Add a more robust and specialized pubsub subscriber client
- Ergonomics improvements on the public interfaces
- Improve docs
- More tests
- Fix authentication bug with
sentinel-auth
tests - Update tests and CI config for
sentinel-auth
feature - Add more testing scripts, update docs
- Switch to CircleCI
- Add
sentinel-auth
feature
- Add
NotFound
error kind variant - Use
NotFound
errors when castingnil
server responses to non-nullable types
- Remove some unnecessary async locks
- Fix client pool
wait_for_connect
implementation
- Fix aembke#11
- Support Sentinel clients
- Fix broken doc links
- Support Redis Sentinel
- Sentinel tests
- Move metrics behind compiler flag
- Add generic response interface.
- Add tests
See below.
- Add support for the
MONITOR
command.
- Redo cluster state change implementation to diff
CLUSTER NODES
changes - MOVED/ASK errors no longer initiate reconnection logic
- Fix chaos monkey tests
- Extend and refactor RedisConfig options
- Change RedisKey to work with bytes, not str
- Support unblocking clients with a control connection
- First draft of chaos monkey tests
- Custom reconnect errors feature
- Rewrite to use async/await
- Add Lua support
- Add transaction support
- Add hyperloglog, geo, acl, memory, slowlog, and cluster command support
- Add tests
- Add pipeline_test application
See the old repository at azuqua/fred.rs.