#[non_exhaustive]pub struct Cache<S, I>where
S: CacheStore,{
pub store: S,
pub issuer: I,
pub skipper: Box<dyn Skipper>,
/* private fields */
}Expand description
Cache middleware.
§Example
use std::time::Duration;
use salvo_cache::{Cache, MokaStore, RequestIssuer};
use salvo_core::Router;
let cache = Cache::new(
MokaStore::builder()
.time_to_live(Duration::from_secs(60))
.build(),
RequestIssuer::default(),
);
let router = Router::new().hoop(cache);Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.store: SCache store.
issuer: ICache issuer.
skipper: Box<dyn Skipper>Skipper.
Implementations§
Source§impl<S, I> Cache<S, I>where
S: CacheStore,
impl<S, I> Cache<S, I>where
S: CacheStore,
Sourcepub fn cache_private(self, cache_private: bool) -> Self
pub fn cache_private(self, cache_private: bool) -> Self
Allow caching requests or responses that contain private-user cache signals.
By default, requests with Authorization or Cookie, and responses with Set-Cookie,
Vary, or Cache-Control: private, are not cached. Enabling this lifts those
privacy restrictions. Cache-Control: no-store/no-cache responses are never
cached regardless of this setting.
Sourcepub fn max_in_flight(self, max_in_flight: usize) -> Self
pub fn max_in_flight(self, max_in_flight: usize) -> Self
Sets the maximum number of distinct cache keys tracked for concurrent miss coalescing.
When this limit is reached, misses for new keys bypass coalescing and execute normally.
Existing in-flight keys can still be followed. Set to 0 to disable miss coalescing.
Trait Implementations§
Source§impl<S, I> Handler for Cache<S, I>
impl<S, I> Handler for Cache<S, I>
Source§fn handle<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
req: &'life1 mut Request,
depot: &'life2 mut Depot,
res: &'life3 mut Response,
ctrl: &'life4 mut FlowCtrl,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn handle<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
req: &'life1 mut Request,
depot: &'life2 mut Depot,
res: &'life3 mut Response,
ctrl: &'life4 mut FlowCtrl,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Handles one HTTP request.
Source§fn arc(self) -> ArcHandlerwhere
Self: Sized,
fn arc(self) -> ArcHandlerwhere
Self: Sized,
Wrap to
ArcHandler.Source§fn hooped(self) -> HoopedHandlerwhere
Self: Sized,
fn hooped(self) -> HoopedHandlerwhere
Self: Sized,
Wraps this handler in a
HoopedHandler.Source§fn hoop<H>(self, hoop: H) -> HoopedHandler
fn hoop<H>(self, hoop: H) -> HoopedHandler
Hoop this handler with middleware.
Auto Trait Implementations§
impl<S, I> !RefUnwindSafe for Cache<S, I>
impl<S, I> !UnwindSafe for Cache<S, I>
impl<S, I> Freeze for Cache<S, I>
impl<S, I> Send for Cache<S, I>where
I: Send,
impl<S, I> Sync for Cache<S, I>where
I: Sync,
impl<S, I> Unpin for Cache<S, I>
impl<S, I> UnsafeUnpin for Cache<S, I>where
S: UnsafeUnpin,
I: UnsafeUnpin,
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