- Support SCAN functions in mocks
- Fix intermittent transaction timeouts
- Fix reconnection errors when no connections exist
- Reduced memory footprint and significant write throughput improvements
- Rename common interfaces to remove
Redis
prefixes - Add
WITHSCORES
toZRANK
andZREVRANK
- Add
GT|LT|NX|XX
options toEXPIRE
andEXPIREAT
- Add
scan_page
interface - Add optional message to
PING
- Remove deprecated or redundant config options
- Refactor public types into submodules
- Add
i-hexpire
feature flag - Support async blocks in
on_*
event handler functions - Add an interface to cancel scanning functions
- Update
rustls-native-certs
to 0.8 - Support
valkey://
scheme inConfig::from_url
. - Support combining
Options
andReplicas
clients
This update contains some significant performance improvements in the form of reduced Tokio scheduling overhead and reduced memory usage during the frame encoding process. It also contains several cosmetic changes designed to support future scenarios where Valkey and Redis start to diverge from one another.
The compiler should guide callers through most of these changes.
- The
auto_pipeline
config option was removed. All clients now automatically pipeline commands across Tokio tasks. - The
BackpressureConfig
struct was removed. Callers should usemax_command_buffer_len
instead. - The
HEXPIRE
,HTTL
, etc, commands are now gated by ani-hexpire
feature flag. Note that this requires Redis > =7.2.5. - Some potentially redundant
ReplicaConfig
fields were removed. The client now uses the associatedReconnectPolicy
fields instead, where applicable. - The
types
module was becoming too large and needed refactoring. Many types were moved to submodules, which likely requires changes to certain import statements. - Many of the common public types were renamed to remove the
Redis
prefix, such asRedisConfig
,RedisClient
,RedisPool
, etc. rustls-native-certs
was upgraded to 8.x.- The
specialize-into-bytes
feature flag was removed. This is now the default behavior. - The
on_error
anderror_rx
event handler interface now contains an optional server identifier.
- In the past
fred
spawned a separate task per connection in order to read from all sockets concurrently. In 10.0.0 each client reads and writes to all connections in a single task. - Write throughput is improved by a factor of 3-5x depending on the use case.
- All transactions are now pipelined automatically.
- Change scanning functions to automatically continue when the current page is dropped
- Add
scan_buffered
andscan_cluster_buffered
interfaces - Add
specialize-into-bytes
feature flag
- Add
SETNX
,ECHO
,TYPE
,EXPIRETIME
, andPEXPIRETIME
commands - Add hashmap expiration commands (
HTTL
,HEXPIRE
, etc) - Change
active_connections
to preempt reconnections
- Fix docs.rs documentation features
- Add initial support for the Glommio runtime
- Add
credential-provider
feature - Fix pipeline processing in mocks
- Support pipelined transactions
- Fix
FT.AGGREGATE
command withSORTBY
operation
- Fix tracing span names and missing fields
- Add RediSearch interface.
- Adapt testing and CI processes to test Redis and Valkey
- Add
FromIterator
impl toRedisMap
- Add
ExclusivePool
client - Support
redis+unix
config URLs for Unix domain sockets - Add
PEXPIRE
andPEXPIREAT
- Replace
trust-dns-resolver
withhickory-resolver
- Fix
bytes_utils
min version - Fix rustls reexports with
enable-rustls-ring
- Add
enable-rustls-ring
feature flag
- Fix
partial-tracing
imports
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 (#54)
- Reduce number of
tokio
features - Use 6379 as default cluster port in
from_url
- Fix RESP3 auth error (#54)
- Reduce number of
tokio
features - Use 6379 as default cluster port in
from_url
- Fix RESP3 auth error (#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 #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.