pub struct ValueCache<V> { /* private fields */ }Expand description
Values by key, each with its own time to live, at most capacity of
them (the oldest goes first when full, after anything expired). Cheap
to clone; clones share the entries.
use std::time::Duration;
use rust_web_server::cache::ValueCache;
let cache: ValueCache<String> = ValueCache::new(1000);
let a = cache.fetch_or("greeting:en", Duration::from_secs(60), || "Hello".to_string());
let b = cache.fetch_or("greeting:en", Duration::from_secs(60), || unreachable!("cached"));
assert_eq!(a, b);The value is computed outside the lock: two threads missing the same key
at once both compute it (the last one stored wins). Errors from
try_fetch_or aren’t cached.
Implementations§
Source§impl<V> ValueCache<V>where
V: Clone,
impl<V> ValueCache<V>where
V: Clone,
Sourcepub fn new(capacity: usize) -> ValueCache<V>
pub fn new(capacity: usize) -> ValueCache<V>
At most capacity entries (at least 1).
Sourcepub fn fetch_or(
&self,
key: &str,
ttl: Duration,
compute: impl FnOnce() -> V,
) -> V
pub fn fetch_or( &self, key: &str, ttl: Duration, compute: impl FnOnce() -> V, ) -> V
The cached value, or compute() stored for ttl and returned.
Sourcepub fn try_fetch_or<E>(
&self,
key: &str,
ttl: Duration,
compute: impl FnOnce() -> Result<V, E>,
) -> Result<V, E>
pub fn try_fetch_or<E>( &self, key: &str, ttl: Duration, compute: impl FnOnce() -> Result<V, E>, ) -> Result<V, E>
fetch_or for a computation that can fail: an
Err is returned and nothing is stored.
Sourcepub async fn fetch_or_async<F, Fut>(
&self,
key: &str,
ttl: Duration,
compute: F,
) -> V
pub async fn fetch_or_async<F, Fut>( &self, key: &str, ttl: Duration, compute: F, ) -> V
fetch_or with an async computation (a query).
Sourcepub async fn try_fetch_or_async<E, F, Fut>(
&self,
key: &str,
ttl: Duration,
compute: F,
) -> Result<V, E>
pub async fn try_fetch_or_async<E, F, Fut>( &self, key: &str, ttl: Duration, compute: F, ) -> Result<V, E>
try_fetch_or with an async computation.
Sourcepub fn invalidate(&self, key: &str) -> bool
pub fn invalidate(&self, key: &str) -> bool
Remove key; whether it was there.
Sourcepub fn invalidate_prefix(&self, prefix: &str) -> usize
pub fn invalidate_prefix(&self, prefix: &str) -> usize
Remove every key starting with prefix ("user:42:"); how many.
pub fn clear(&self)
pub fn is_empty(&self) -> bool
Trait Implementations§
Source§impl<V> Clone for ValueCache<V>
impl<V> Clone for ValueCache<V>
Source§fn clone(&self) -> ValueCache<V>
fn clone(&self) -> ValueCache<V>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<V> Forget for ValueCache<V>
impl<V> Freeze for ValueCache<V>
impl<V> RefUnwindSafe for ValueCache<V>
impl<V> Send for ValueCache<V>
impl<V> Sync for ValueCache<V>
impl<V> Unpin for ValueCache<V>
impl<V> UnsafeUnpin for ValueCache<V>
impl<V> UnwindSafe for ValueCache<V>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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> ⓘ
Converts
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> ⓘ
Converts
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
Available on crate feature
map-response-body only.Apply a transformation to the response body. Read more
Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
Available on crate feature
trace only.High level tracing that classifies responses using HTTP status codes. Read more
Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
Available on crate feature
trace only.High level tracing that classifies responses using gRPC headers. Read more