fred 9.4.0

An async client for Redis and Valkey.
Documentation
## 9.4.0

* Change scanning functions to automatically continue when the current page is dropped
* Add `scan_buffered` and `scan_cluster_buffered` interfaces
* Add `specialize-into-bytes` feature flag

## 9.3.0

* Add `SETNX`, `ECHO`, `TYPE`, `EXPIRETIME`, and `PEXPIRETIME` commands
* Add hashmap expiration commands (`HTTL`, `HEXPIRE`, etc)
* Change `active_connections` to preempt reconnections

## 9.2.1

* Fix docs.rs documentation features

## 9.2.0

* Add initial support for the [Glommio]https://github.com/DataDog/glommio runtime
* Add `credential-provider` feature
* Fix pipeline processing in mocks
* Support pipelined transactions

## 9.1.2

* Fix `FT.AGGREGATE` command with `SORTBY` operation

## 9.1.1

* Fix tracing span names and missing fields

## 9.1.0

* Add [RediSearch]https://github.com/RediSearch/RediSearch interface.
* Adapt testing and CI processes to test Redis and Valkey
* Add `FromIterator` impl to `RedisMap`
* Add `ExclusivePool` client
* Support `redis+unix` config URLs for Unix domain sockets
* Add `PEXPIRE` and `PEXPIREAT`
* Replace `trust-dns-resolver` with `hickory-resolver`

## 9.0.3

* Fix `bytes_utils` min version
* Fix rustls reexports with `enable-rustls-ring`

## 9.0.2

* Add `enable-rustls-ring` feature flag

## 9.0.1

* Fix `partial-tracing` imports

## 9.0.0

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` and `SORT_RO`
* Add `cluster_hash` policy to `Options`
* Change tracing span names to
  follow [OpenTelemetry naming conventions]https://opentelemetry.io/docs/specs/semconv/general/attribute-naming/.

### Upgrading from 8.x

* 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]https://github.com/aembke/redis-protocol.rs.
* Rustls - Check the new [aws-lc-rs]https://aws.github.io/aws-lc-rs/requirements/index.html requirements or switch
  back to `rustls/ring`.
* Note the new [tracing span names]src/trace/README.md.

## 8.0.6

* Add `TransactionInterface` to `RedisPool`

## 8.0.5

* Add conversion from `HashMap` to `MultipleOrderedPairs`.
* Remove `lazy_static`
* Update examples

## 8.0.4

* Fix tracing span annotations.

## 8.0.3

* Box large futures to reduce stack usage.

## 8.0.2

* Fix cluster replica failover at high concurrency.
* Fix potential race condition initializing the mocking layer.

## 8.0.1

* Add a shorthand `init` interface.
* Fix cluster replica failover with unresponsive connections.
* Fix RESP3 connection init when used without a password.

## 8.0.0

* 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]bin/benchmark tool.
* Update to Rustls 0.22.
* Add several new connection configuration options.
* Add a `fail_fast` flag to commands.
* Switch to [crossbeam types]https://crates.io/crates/crossbeam-queue internally.

### Upgrading from 7.x

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` to `ConnectionConfig` and `PerformanceConfig`.
* 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` and `on_keyspace_event` functions were renamed and moved to the `EventInterface`. They now use the
  same naming conventions as the other event streams.

## 7.1.2

* Fix intermittent cluster routing errors

## 7.1.1

* Fix cluster failover in transactions

## 7.1.0

* Fix panic when reconnect delay jitter is 0
* Support percent encoding in URLs
* Support tuples for `RedisValue` and `MultipleKeys`
* Make `CLIENT ID` checks optional
* Update dependencies

## 7.0.0

* Added a new client [builder]src/types/builder.rs 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 with `auto-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 new `EventInterface`.
* Fixed bugs with the `Replica` routing implementation.
* Fixed bugs related to parsing single-element arrays.
* Changed several `FromRedis` type conversion rules. See below or the `FromRedis` docs for more information.
* Add a [RedisJSON]https://github.com/RedisJSON/RedisJSON/ interface.
* Add a RESP2 and RESP3 codec interface.

### Upgrading from 6.x

Notable interface changes:

* `ArcStr` has been replaced with `bytes_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 implements `ClientLike` rather than relying on `Deref` shenanigans.
* The `on_*` event functions were moved and renamed. Reconnection events now include the associated `Server`.
* The `tls_server_name` field on `Server` is now properly gated by the TLS feature flags.
* Mocks are now optional even when the feature flag is enabled.

Notable implementation Changes:

* `Pipeline` and `Transaction` structs can now be reused. Calling `exec`, `all`, `last`, or `try_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]src/modules/response.rs.
* The `connect` function can now be called more than once to force reset all client state.

## 6.3.2

* Fix a bug with connection errors unexpectedly ending the connection task.

## 6.3.1

* Update various dependencies
* Move `pretty-env-logger` to `dev-dependencies`
* Update rustfmt.toml

## 6.3.0

* Fix cluster replica discovery with Elasticache
* Fix cluster replica `READONLY` usage
* Fix compilation error with `full-tracing`
* Support `Vec<(T1, T2, ...)>` with `FromRedis`

## 6.2.1

* Fix cluster failover with paused nodes

## 6.2.0

* Add `Pipeline::try_all`
* Add missing pubsub commands
* Improve docs, examples

## 6.1.0

* Add a [client tracking]https://redis.io/docs/manual/client-side-caching/ 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 to `SubscriberClient`

## 6.0.0

* 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`, and `Function` structs.
* Add `Message` and `MessageKind` 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.

### Updating from 5.x

Potentially breaking changes in 6.x:

* Switched from `(String, u16)` tuples to the `Server` struct for all server identifiers.
* New TLS feature flags: `enable-rustls` and `enable-native-tls`.
    * `vendored-tls` is now `vendored-openssl`
* New TLS configuration process: see the [example]examples/tls.rs.
* New [transaction]examples/transactions.rs interface.
    * `Transaction` commands are now buffered in memory before calling `exec()` or `discard()`.
* 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]examples/custom.rs 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]https://docs.rs/tokio/latest/tokio/sync/broadcast/struct.Receiver.html.
* The `FromRedis` trait converts `RedisValue::Null` to `"nil"` with `String` and `Str`.

## 5.2.0

* Reduce number of `tokio` features
* Use 6379 as default cluster port in `from_url`
* Fix RESP3 auth error (https://github.com/aembke/fred.rs/issues/54)

## 5.2.0

* Reduce number of `tokio` features
* Use 6379 as default cluster port in `from_url`
* Fix RESP3 auth error (https://github.com/aembke/fred.rs/issues/54)

## 5.2.0

* Reduce number of `tokio` features
* Use 6379 as default cluster port in `from_url`
* Fix RESP3 auth error (https://github.com/aembke/fred.rs/issues/54)

## 5.1.0

* Update `redis-protocol` and `nom`
* Add `no-client-setname` feature flag

## 5.0.0

* Bug fixes
* Support URL parsing into a `RedisConfig`
* Update `bzpopmin` and `bzpopmax` return type
* Remove unimplemented `mocks` feature

## 5.0.0-beta.1

* Rewrite the [protocol parser]https://github.com/aembke/redis-protocol.rs, 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

## 4.3.2

* Fix https://github.com/aembke/fred.rs/issues/27
* Fix https://github.com/aembke/fred.rs/issues/26

## 4.3.1

* 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

## 4.3.0

* Add `sentinel-auth` feature

## 4.2.3

* Add `NotFound` error kind variant
* Use `NotFound` errors when casting `nil` server responses to non-nullable types

## 4.2.2

* Remove some unnecessary async locks
* Fix client pool `wait_for_connect` implementation

## 4.2.1

* Fix https://github.com/aembke/fred.rs/issues/11

## 4.2.0

* Support Sentinel clients
* Fix broken doc links

## 4.1.0

* Support Redis Sentinel
* Sentinel tests
* Move metrics behind compiler flag

## 4.0.0

* Add generic response interface.
* Add tests

## 3.0.0

See below.

## 3.0.0-beta.4

* Add support for the `MONITOR` command.

## 3.0.0-beta.3

* Redo cluster state change implementation to diff `CLUSTER NODES` changes
* MOVED/ASK errors no longer initiate reconnection logic
* Fix chaos monkey tests

## 3.0.0-beta.2

* 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

## 3.0.0-beta.1

* 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]bin/pipeline_test application

## < 3.0.0

See the old repository at [azuqua/fred.rs](https://github.com/azuqua/fred.rs).