pub struct RedisClusterBuilder { /* private fields */ }Expand description
Builder for a Redis Cluster.
§Example
use redis_server_wrapper::RedisCluster;
let cluster = RedisCluster::builder()
.masters(3)
.replicas_per_master(1)
.base_port(7000)
.start()
.await
.unwrap();
assert!(cluster.is_healthy().await);
// Stopped automatically on Drop.Implementations§
Source§impl RedisClusterBuilder
impl RedisClusterBuilder
Sourcepub fn replicas_per_master(self, n: u16) -> Self
pub fn replicas_per_master(self, n: u16) -> Self
Set the number of replicas per master (default: 0).
Sourcepub fn base_port(self, port: u16) -> Self
pub fn base_port(self, port: u16) -> Self
Set the base port for cluster nodes (default: 7000).
Nodes are assigned consecutive ports starting at this value.
Sourcepub fn bind(self, bind: impl Into<String>) -> Self
pub fn bind(self, bind: impl Into<String>) -> Self
Set the bind address for all cluster nodes (default: "127.0.0.1").
Sourcepub fn password(self, password: impl Into<String>) -> Self
pub fn password(self, password: impl Into<String>) -> Self
Set a requirepass password for all cluster nodes.
Sourcepub fn logfile(self, path: impl Into<String>) -> Self
pub fn logfile(self, path: impl Into<String>) -> Self
Set the log file path for all cluster nodes.
Sourcepub fn save(self, save: bool) -> Self
pub fn save(self, save: bool) -> Self
Set the RDB save policy for all cluster nodes.
true omits the save directive (Redis defaults apply).
false emits save "" to disable RDB entirely.
Sourcepub fn save_schedule(self, schedule: Vec<(u64, u64)>) -> Self
pub fn save_schedule(self, schedule: Vec<(u64, u64)>) -> Self
Set a custom RDB save schedule for all cluster nodes.
Sourcepub fn appendonly(self, appendonly: bool) -> Self
pub fn appendonly(self, appendonly: bool) -> Self
Enable or disable AOF persistence for all cluster nodes.
Sourcepub fn cluster_node_timeout(self, ms: u64) -> Self
pub fn cluster_node_timeout(self, ms: u64) -> Self
Set the cluster node timeout in milliseconds for all nodes (default: 5000).
Sourcepub fn cluster_require_full_coverage(self, require: bool) -> Self
pub fn cluster_require_full_coverage(self, require: bool) -> Self
Require full hash slot coverage for the cluster to accept writes.
Sourcepub fn cluster_allow_reads_when_down(self, allow: bool) -> Self
pub fn cluster_allow_reads_when_down(self, allow: bool) -> Self
Allow reads when the cluster is down.
Sourcepub fn cluster_allow_pubsubshard_when_down(self, allow: bool) -> Self
pub fn cluster_allow_pubsubshard_when_down(self, allow: bool) -> Self
Allow pubsub shard channels when the cluster is down.
Sourcepub fn cluster_allow_replica_migration(self, allow: bool) -> Self
pub fn cluster_allow_replica_migration(self, allow: bool) -> Self
Allow automatic replica migration between masters.
Sourcepub fn cluster_migration_barrier(self, barrier: u32) -> Self
pub fn cluster_migration_barrier(self, barrier: u32) -> Self
Set the minimum number of replicas a master must retain before one can migrate.
Sourcepub fn cluster_announce_hostname(self, hostname: impl Into<String>) -> Self
pub fn cluster_announce_hostname(self, hostname: impl Into<String>) -> Self
Set the hostname each node announces to the cluster.
Sourcepub fn cluster_preferred_endpoint_type(
self,
endpoint_type: impl Into<String>,
) -> Self
pub fn cluster_preferred_endpoint_type( self, endpoint_type: impl Into<String>, ) -> Self
Set the preferred endpoint type for cluster redirections (e.g. "ip", "hostname").
Sourcepub fn cluster_replica_no_failover(self, no_failover: bool) -> Self
pub fn cluster_replica_no_failover(self, no_failover: bool) -> Self
Prevent replicas from attempting automatic failover.
Manual failover via CLUSTER FAILOVER still works.
Sourcepub fn cluster_replica_validity_factor(self, factor: u32) -> Self
pub fn cluster_replica_validity_factor(self, factor: u32) -> Self
Set the replica validity factor for failover eligibility.
A replica will not failover if it has been disconnected from the master
for more than (node-timeout * factor) + repl-ping-replica-period seconds.
Set to 0 to allow any replica to failover regardless of staleness.
Sourcepub fn cluster_announce_ip(self, ip: impl Into<String>) -> Self
pub fn cluster_announce_ip(self, ip: impl Into<String>) -> Self
Set the IP address nodes announce for client redirects (MOVED/ASKING).
Sourcepub fn cluster_announce_port(self, port: u16) -> Self
pub fn cluster_announce_port(self, port: u16) -> Self
Set the client port nodes announce for redirects.
Sourcepub fn cluster_announce_bus_port(self, port: u16) -> Self
pub fn cluster_announce_bus_port(self, port: u16) -> Self
Set the cluster bus port nodes announce for gossip.
Sourcepub fn cluster_announce_tls_port(self, port: u16) -> Self
pub fn cluster_announce_tls_port(self, port: u16) -> Self
Set the TLS client port nodes announce for redirects.
Sourcepub fn cluster_announce_human_nodename(self, name: impl Into<String>) -> Self
pub fn cluster_announce_human_nodename(self, name: impl Into<String>) -> Self
Set a friendly node name broadcast for debugging/admin display.
Sourcepub fn cluster_port(self, port: u16) -> Self
pub fn cluster_port(self, port: u16) -> Self
Set a dedicated cluster bus port (default: client port + 10000).
Sourcepub fn cluster_link_sendbuf_limit(self, limit: u64) -> Self
pub fn cluster_link_sendbuf_limit(self, limit: u64) -> Self
Set the maximum memory for a cluster bus link’s output buffer.
When exceeded, the link is disconnected. Set to 0 for unlimited.
Sourcepub fn cluster_compatibility_sample_ratio(self, ratio: u32) -> Self
pub fn cluster_compatibility_sample_ratio(self, ratio: u32) -> Self
Set the cluster compatibility sample ratio.
Sourcepub fn cluster_slot_migration_handoff_max_lag_bytes(self, bytes: u64) -> Self
pub fn cluster_slot_migration_handoff_max_lag_bytes(self, bytes: u64) -> Self
Set the maximum replication lag in bytes before slot migration handoff.
Sourcepub fn cluster_slot_migration_write_pause_timeout(self, ms: u64) -> Self
pub fn cluster_slot_migration_write_pause_timeout(self, ms: u64) -> Self
Set the write pause timeout in milliseconds during slot migration.
Sourcepub fn cluster_slot_stats_enabled(self, enable: bool) -> Self
pub fn cluster_slot_stats_enabled(self, enable: bool) -> Self
Enable per-slot statistics tracking.
Sourcepub fn min_replicas_to_write(self, n: u32) -> Self
pub fn min_replicas_to_write(self, n: u32) -> Self
Set the minimum number of connected replicas before the master accepts writes.
Useful for split-brain protection: a partitioned master with no reachable replicas stops accepting writes, reducing data loss during partitions.
Sourcepub fn min_replicas_max_lag(self, seconds: u32) -> Self
pub fn min_replicas_max_lag(self, seconds: u32) -> Self
Set the maximum replication lag (seconds) before a replica is considered disconnected.
Used with min_replicas_to_write to determine if enough replicas are connected.
Sourcepub fn repl_diskless_sync(self, enable: bool) -> Self
pub fn repl_diskless_sync(self, enable: bool) -> Self
Enable or disable diskless replication sync.
Diskless sync is faster but uses more memory during transfer.
Sourcepub fn repl_diskless_sync_delay(self, seconds: u32) -> Self
pub fn repl_diskless_sync_delay(self, seconds: u32) -> Self
Set the delay in seconds before starting a diskless replication transfer.
Allows batching multiple replicas syncing at once.
Sourcepub fn repl_ping_replica_period(self, seconds: u32) -> Self
pub fn repl_ping_replica_period(self, seconds: u32) -> Self
Set how often replicas ping the master (seconds).
Used in the replica validity calculation:
(node-timeout * validity-factor) + repl-ping-replica-period.
Sourcepub fn repl_timeout(self, seconds: u32) -> Self
pub fn repl_timeout(self, seconds: u32) -> Self
Set the replication timeout in seconds.
If a replica doesn’t hear from master for this long, it considers the link dead.
Sourcepub fn tls_cert_file(self, path: impl Into<PathBuf>) -> Self
pub fn tls_cert_file(self, path: impl Into<PathBuf>) -> Self
Set the TLS certificate file path for all cluster nodes.
Sourcepub fn tls_key_file(self, path: impl Into<PathBuf>) -> Self
pub fn tls_key_file(self, path: impl Into<PathBuf>) -> Self
Set the TLS private key file path for all cluster nodes.
Sourcepub fn tls_ca_cert_file(self, path: impl Into<PathBuf>) -> Self
pub fn tls_ca_cert_file(self, path: impl Into<PathBuf>) -> Self
Set the TLS CA certificate file path for all cluster nodes.
Sourcepub fn tls_ca_cert_dir(self, path: impl Into<PathBuf>) -> Self
pub fn tls_ca_cert_dir(self, path: impl Into<PathBuf>) -> Self
Set the TLS CA certificate directory for all cluster nodes.
Sourcepub fn tls_auth_clients(self, auth: bool) -> Self
pub fn tls_auth_clients(self, auth: bool) -> Self
Require TLS client authentication for all cluster nodes.
Sourcepub fn tls_replication(self, enable: bool) -> Self
pub fn tls_replication(self, enable: bool) -> Self
Use TLS for replication traffic between cluster nodes.
Sourcepub fn tls_cluster(self, enable: bool) -> Self
pub fn tls_cluster(self, enable: bool) -> Self
Use TLS for cluster bus communication between nodes.
Sourcepub fn with_node_config(
self,
f: impl FnMut(NodeContext) -> RedisServer + Send + 'static,
) -> Self
pub fn with_node_config( self, f: impl FnMut(NodeContext) -> RedisServer + Send + 'static, ) -> Self
Set a per-node configuration callback.
The callback receives a NodeContext containing the pre-configured
RedisServer builder (with all uniform settings already applied) and
metadata about the node’s position in the cluster. It must return the
(possibly modified) RedisServer builder.
§Example
use redis_server_wrapper::RedisCluster;
let cluster = RedisCluster::builder()
.masters(3)
.replicas_per_master(1)
.base_port(7000)
.with_node_config(|ctx| {
let is_replica = ctx.is_replica();
let index = ctx.index;
let mut server = ctx.server;
if is_replica {
server = server.cluster_replica_no_failover(true);
}
if index == 0 {
server = server.maxmemory("512mb");
}
server
})
.start()
.await
.unwrap();Sourcepub fn extra(self, key: impl Into<String>, value: impl Into<String>) -> Self
pub fn extra(self, key: impl Into<String>, value: impl Into<String>) -> Self
Set an arbitrary config directive for all cluster nodes.
Sourcepub fn redis_server_bin(self, bin: impl Into<String>) -> Self
pub fn redis_server_bin(self, bin: impl Into<String>) -> Self
Set a custom redis-server binary path.
Sourcepub fn redis_cli_bin(self, bin: impl Into<String>) -> Self
pub fn redis_cli_bin(self, bin: impl Into<String>) -> Self
Set a custom redis-cli binary path.
Sourcepub async fn start(self) -> Result<RedisClusterHandle>
pub async fn start(self) -> Result<RedisClusterHandle>
Start all nodes and form the cluster.
Auto Trait Implementations§
impl Freeze for RedisClusterBuilder
impl !RefUnwindSafe for RedisClusterBuilder
impl Send for RedisClusterBuilder
impl !Sync for RedisClusterBuilder
impl Unpin for RedisClusterBuilder
impl UnsafeUnpin for RedisClusterBuilder
impl !UnwindSafe for RedisClusterBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more