Crate fred

source ·
Expand description

§Fred

License License CircleCI Crates.io API docs

An async Redis client for Rust and Tokio.

§Example

use fred::prelude::*;

#[tokio::main]
async fn main() -> Result<(), RedisError> {
  let client = RedisClient::default(); 
  client.init().await?;

  // convert responses to many common Rust types
  let foo: Option<String> = client.get("foo").await?;
  assert!(foo.is_none());

  client.set("foo", "bar", None, None, false).await?;
  // or use turbofish to declare response types
  println!("Foo: {:?}", client.get::<String, _>("foo").await?);

  // or use a lower level interface for responses to defer parsing, etc
  let foo: RedisValue = client.get("foo").await?;
  assert_eq!(foo.as_str().unwrap(), "bar");

  client.quit().await?;
  Ok(())
}

See the examples for more.

§Features

  • RESP2 and RESP3 protocol modes.
  • Clustered, centralized, and sentinel Redis deployments.
  • TLS via native-tls or rustls.
  • Unix sockets.
  • Optional reconnection logic with multiple backoff policies.
  • Publish-Subscribe and keyspace events interfaces.
  • A round-robin client pooling interface.
  • Lua scripts or functions.
  • Streaming results from the MONITOR command.
  • Custom commands.
  • Streaming interfaces for scanning functions.
  • Transactions
  • Pipelining
  • Client Tracking
  • An optional RedisJSON interface.
  • A round-robin cluster replica routing interface.
  • An optional pubsub subscriber client that will automatically manage channel subscriptions.
  • Tracing

§Build Features

NameDefaultDescription
transactionsxEnable a Transaction interface.
enable-native-tlsEnable TLS support via native-tls.
enable-rustlsEnable TLS support via rustls.
vendored-opensslEnable the native-tls/vendored feature.
metricsEnable the metrics interface to track overall latency, network latency, and request/response sizes.
full-tracingEnable full tracing support. This can emit a lot of data.
partial-tracingEnable partial tracing support, only emitting traces for top level commands and network latency.
blocking-encodingUse a blocking task for encoding or decoding frames. This can be useful for clients that send or receive large payloads, but requires a multi-thread Tokio runtime.
network-logsEnable TRACE level logging statements that will print out all data sent to or received from the server. These are the only logging statements that can ever contain potentially sensitive user data.
custom-reconnect-errorsEnable an interface for callers to customize the types of errors that should automatically trigger reconnection logic.
monitorEnable an interface for running the MONITOR command.
sentinel-clientEnable an interface for communicating directly with Sentinel nodes. This is not necessary to use normal Redis clients behind a sentinel layer.
sentinel-authEnable an interface for using different authentication credentials to sentinel nodes.
subscriber-clientEnable a subscriber client interface that manages channel subscription state for callers.
serde-jsonEnable an interface to automatically convert Redis types to JSON via serde-json.
mocksEnable a mocking layer interface that can be used to intercept and process commands in tests.
dnsEnable an interface that allows callers to override the DNS lookup logic.
replicasEnable an interface that routes commands to replica nodes.
client-trackingEnable a client tracking interface.
default-nil-typesEnable a looser parsing interface for nil values.
redis-jsonEnable an interface for RedisJSON.
codecEnable a lower level framed codec interface for use with tokio-util.
sha-1Enable an interface for hashing Lua scripts.
unix-socketsEnable Unix socket support.
time-seriesEnable an interface for Redis Timeseries.

Re-exports§

Modules§

  • Redis client implementations.
  • codeccodec
    Codecs for use with the tokio codec interface.
  • Error structs returned by Redis commands.
  • Traits that implement portions of the Redis interface.
  • mocksmocks
    An interface for mocking Redis commands.
  • monitormonitor
    An interface to run the MONITOR command.
  • Convenience module to import a RedisClient, all possible interfaces, error types, and common argument types or return value types.
  • The structs and enums used by the Redis client.
  • Utility functions used by the client that may also be useful to callers.

Macros§