#![allow(clippy::unit_arg)] // want to allow this for `black_box()` #![cfg(feature = "cluster")] use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput}; use redis::cluster::cluster_pipe; use support::*; #[path = "../tests/support/mod.rs"] mod support; const PIPELINE_QUERIES: usize = 100; fn bench_set_get_and_del(c: &mut Criterion, con: &mut redis::cluster::ClusterConnection) { let key = "test_key"; let mut group = c.benchmark_group("cluster_basic"); group.bench_function("set", |b| { b.iter(|| { redis::cmd("SET").arg(key).arg(42).execute(con); black_box(()) }) }); group.bench_function("get", |b| { b.iter(|| black_box(redis::cmd("GET").arg(key).query::(con).unwrap())) }); let mut set_and_del = || { redis::cmd("SET").arg(key).arg(42).execute(con); redis::cmd("DEL").arg(key).execute(con); }; group.bench_function("set_and_del", |b| { b.iter(|| { set_and_del(); black_box(()) }) }); group.finish(); } fn bench_pipeline(c: &mut Criterion, con: &mut redis::cluster::ClusterConnection) { let mut group = c.benchmark_group("cluster_pipeline"); group.throughput(Throughput::Elements(PIPELINE_QUERIES as u64)); let mut queries = Vec::new(); for i in 0..PIPELINE_QUERIES { queries.push(format!("foo{i}")); } let build_pipeline = || { let mut pipe = cluster_pipe(); for q in &queries { pipe.set(q, "bar").ignore(); } }; group.bench_function("build_pipeline", |b| { b.iter(|| { build_pipeline(); black_box(()) }) }); let mut pipe = cluster_pipe(); for q in &queries { pipe.set(q, "bar").ignore(); } group.bench_function("query_pipeline", |b| { b.iter(|| { pipe.query::<()>(con).unwrap(); black_box(()) }) }); group.finish(); } fn bench_cluster_setup(c: &mut Criterion) { let cluster = TestClusterContext::new(6, 1); cluster.wait_for_cluster_up(); let mut con = cluster.connection(); bench_set_get_and_del(c, &mut con); bench_pipeline(c, &mut con); } #[allow(dead_code)] fn bench_cluster_read_from_replicas_setup(c: &mut Criterion) { let cluster = TestClusterContext::new_with_cluster_client_builder(6, 1, |builder| { builder.read_from_replicas() }); cluster.wait_for_cluster_up(); let mut con = cluster.connection(); bench_set_get_and_del(c, &mut con); bench_pipeline(c, &mut con); } criterion_group!( cluster_bench, bench_cluster_setup, // bench_cluster_read_from_replicas_setup ); criterion_main!(cluster_bench);