#![allow(clippy::disallowed_names)]
use fred::{interfaces::TrackingInterface, prelude::*, types::RespVersion};
async fn resp3_tracking_interface_example() -> Result<(), Error> {
let client = Builder::default_centralized()
.with_config(|config| {
config.version = RespVersion::RESP3;
})
.build()?;
client.init().await?;
let _invalidate_task = client.on_invalidation(|invalidation| {
println!("{}: Invalidate {:?}", invalidation.server, invalidation.keys);
Ok(())
});
client.start_tracking(None, false, false, false, false).await?;
client.get::<(), _>("foo").await?;
let foo: i64 = client
.with_options(&Options {
caching: Some(true),
..Default::default()
})
.incr("foo")
.await?;
let bar: i64 = client
.with_options(&Options {
caching: Some(false),
..Default::default()
})
.incr("bar")
.await?;
println!("foo: {}, bar: {}", foo, bar);
client.stop_tracking().await?;
Ok(())
}
async fn resp2_basic_interface_example() -> Result<(), Error> {
let subscriber = Client::default();
let client = subscriber.clone_new();
subscriber.init().await?;
client.init().await?;
let mut invalidations = subscriber.invalidation_rx();
let _invalidate_task = tokio::spawn(async move {
while let Ok(invalidation) = invalidations.recv().await {
println!("{}: Invalidate {:?}", invalidation.server, invalidation.keys);
}
});
subscriber.subscribe("__redis__:invalidate").await?;
let (_, connection_id) = subscriber
.connection_ids()
.into_iter()
.next()
.expect("Failed to read subscriber connection ID");
let _: () = client
.client_tracking("on", Some(connection_id), None, false, false, false, false)
.await?;
println!("Tracking info: {:?}", client.client_trackinginfo::<Value>().await?);
println!("Redirection: {}", client.client_getredir::<i64>().await?);
let pipeline = client.pipeline();
let _: () = pipeline.client_caching(true).await?;
let _: () = pipeline.incr("foo").await?;
println!("Foo: {}", pipeline.last::<i64>().await?);
Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Error> {
resp3_tracking_interface_example().await?;
resp2_basic_interface_example().await?;
Ok(())
}