pub struct Guard<'a, T> { /* private fields */ }Expand description
The guard struct for the Mutex. It is used to access the value and not for you to initialize it by your own.
Implementations§
source§impl<'a, T> Guard<'a, T>where
T: Serialize + DeserializeOwned,
impl<'a, T> Guard<'a, T>where T: Serialize + DeserializeOwned,
sourcepub fn expand(&mut self)
pub fn expand(&mut self)
Expands the lock time by 2000ms from the point on its called. This is useful if you need to access the value for a longer time.
But use it with caution, because it can lead to deadlocks. To avoid deadlocks, we only allow one extension per lock.
Methods from Deref<Target = Generic<T>>§
sourcepub fn store(&mut self, value: T)
pub fn store(&mut self, value: T)
The store method sets the value of the type.
Examples found in repository?
examples/2services.rs (line 15)
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
fn main() {
thread::scope(|s| {
let client = redis::Client::open("redis://localhost:6379").unwrap();
let client2 = client.clone();
let t1 = s.spawn(move || {
let mut string = String::with_value("Hello".to_string(), "test", client);
println!("Thread1: {}", string.cached().unwrap());
assert_eq!(string, "Hello");
sleep(std::time::Duration::from_secs(1));
string.store("World".to_string());
println!("Thread1: {}", string.cached().unwrap());
assert_eq!(string, "World");
});
let t2 = s.spawn(move || {
sleep(std::time::Duration::from_micros(100));
let mut string = String::with_load("test", client2);
println!("Thread2: {}", string.cached().unwrap());
assert_eq!(string, "Hello");
sleep(std::time::Duration::from_secs(2));
string.acquire();
println!("Thread2: {}", string.cached().unwrap());
assert_eq!(string, "World");
});
t1.join().expect("Failed to join thread1");
t2.join().expect("Failed to join thread2");
});
}sourcepub fn acquire(&mut self) -> &T
pub fn acquire(&mut self) -> &T
The acquire method returns a reference to the value stored in the type. Loads it from the redis directly.
Example
use dtypes::redis::Di32 as i32;
let client = redis::Client::open("redis://localhost:6379").unwrap();
let mut i32 = i32::with_value(1, "test_add", client.clone());
i32 = i32 + i32::with_value(2, "test_add2", client);
assert_eq!(i32.acquire(), &3);Examples found in repository?
examples/2services.rs (line 26)
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
fn main() {
thread::scope(|s| {
let client = redis::Client::open("redis://localhost:6379").unwrap();
let client2 = client.clone();
let t1 = s.spawn(move || {
let mut string = String::with_value("Hello".to_string(), "test", client);
println!("Thread1: {}", string.cached().unwrap());
assert_eq!(string, "Hello");
sleep(std::time::Duration::from_secs(1));
string.store("World".to_string());
println!("Thread1: {}", string.cached().unwrap());
assert_eq!(string, "World");
});
let t2 = s.spawn(move || {
sleep(std::time::Duration::from_micros(100));
let mut string = String::with_load("test", client2);
println!("Thread2: {}", string.cached().unwrap());
assert_eq!(string, "Hello");
sleep(std::time::Duration::from_secs(2));
string.acquire();
println!("Thread2: {}", string.cached().unwrap());
assert_eq!(string, "World");
});
t1.join().expect("Failed to join thread1");
t2.join().expect("Failed to join thread2");
});
}sourcepub fn cached(&self) -> Option<&T>
pub fn cached(&self) -> Option<&T>
The get method returns a reference to the value stored in the type.
Examples found in repository?
examples/2services.rs (line 12)
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
fn main() {
thread::scope(|s| {
let client = redis::Client::open("redis://localhost:6379").unwrap();
let client2 = client.clone();
let t1 = s.spawn(move || {
let mut string = String::with_value("Hello".to_string(), "test", client);
println!("Thread1: {}", string.cached().unwrap());
assert_eq!(string, "Hello");
sleep(std::time::Duration::from_secs(1));
string.store("World".to_string());
println!("Thread1: {}", string.cached().unwrap());
assert_eq!(string, "World");
});
let t2 = s.spawn(move || {
sleep(std::time::Duration::from_micros(100));
let mut string = String::with_load("test", client2);
println!("Thread2: {}", string.cached().unwrap());
assert_eq!(string, "Hello");
sleep(std::time::Duration::from_secs(2));
string.acquire();
println!("Thread2: {}", string.cached().unwrap());
assert_eq!(string, "World");
});
t1.join().expect("Failed to join thread1");
t2.join().expect("Failed to join thread2");
});
}Trait Implementations§
Auto Trait Implementations§
impl<'a, T> !RefUnwindSafe for Guard<'a, T>
impl<'a, T> Send for Guard<'a, T>where T: Send,
impl<'a, T> Sync for Guard<'a, T>where T: Sync,
impl<'a, T> Unpin for Guard<'a, T>
impl<'a, T> !UnwindSafe for Guard<'a, T>
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
Mutably borrows from an owned value. Read more