Fred
A Redis client for Rust based on Futures and Tokio that supports PubSub commands, clustered Redis deployments, and more.
Install
With cargo edit.
cargo add fred
Features
- Supports clustered Redis deployments.
- Optional built-in reconnection logic with multiple backoff policies.
- Publish-Subscribe interface.
- Support TLS for ElastiCache, etc.
- Gracefully handle cluster rebalancing without client errors.
- Flexible interfaces for different use cases.
Example
extern crate fred;
extern crate tokio_core;
extern crate futures;
use RedisClient;
use RedisClientOwned;
use *;
use Core;
use ;
See examples for more.
Redis Cluster
Clustered Redis deployments are supported by this module by specifying a RedisConfig::Clustered
variant when using connect
or connect_with_policy
. When creating a clustered configuration only one valid host from the cluster is needed, regardless of how many nodes exist in the cluster. When the client first connects to a node it will use the CLUSTER NODES
command to inspect the state of the cluster.
In order to simplify error handling and usage patterns this module caches the state of the cluster in memory and maintains connections to each master node in the cluster. When a command is received the client hashes the key or key hash tag to find the node that should receive the request and then dispatches the request to that node. In the event that a node returns a MOVED
or ASK
error the client will pause to rebuild the in-memory cluster state. When the local cluster state and new connections have been fully rebuilt the client will begin processing commands again. Any requests sent while the in-memory cache is being rebuilt will be queued up and replayed when the connection is available again.
Additionally, this module will not acknowledge requests as having finished until a response arrives, so in the event that a connection dies while a request is in flight it will be retried when the connection comes back up.
Logging
This module uses pretty_env_logger for logging. To enable logs use the environment
variable RUST_LOG
with a value of trace
, debug
, warn
, error
, or info
. See the documentation for env_logger for more information.
Features
Name | Default | Description |
---|---|---|
enable-tls | Enable TLS support. | |
ignore-auth-error | x | Ignore auth errors that occur when a password is supplied but not required. |
Tests
To run the unit and integration tests:
cargo test -- --test-threads=1
Note a local Redis server must be running on port 6379 and a clustered deployment must be running on ports 30001 - 30006 for the integration tests to pass.
Beware: the tests will periodically run flushall
.
TODO
- More commands.
- Blocking commands.
- Distribute reads among slaves.
- Pipelined requests.
- Lua.