pingora_cache::predictor

Struct Predictor

Source
pub struct Predictor<const N_SHARDS: usize> { /* private fields */ }
Expand description

Cacheability Predictor

Remembers previously uncacheable assets. Allows bypassing cache / cache lock early based on historical precedent.

NOTE: to simply avoid caching requests with certain characteristics, add checks in request_cache_filter to avoid enabling cache in the first place. The predictor’s bypass mechanism handles cases where the request looks cacheable but its previous responses suggest otherwise. The request could be cacheable in the future.

Implementations§

Source§

impl<const N_SHARDS: usize> Predictor<N_SHARDS>
where [LruShard<()>; N_SHARDS]: Default,

Source

pub fn new( shard_capacity: usize, skip_custom_reasons_fn: Option<CustomReasonPredicate>, ) -> Predictor<N_SHARDS>

Create a new Predictor with N_SHARDS * shard_capacity total capacity for uncacheable cache keys.

  • shard_capacity: defines number of keys remembered as uncacheable per LRU shard.
  • skip_custom_reasons_fn: an optional predicate used in mark_uncacheable that can customize which Custom NoCacheReasons ought to be remembered as uncacheable. If the predicate returns true, then the predictor will skip remembering the current cache key as uncacheable (and avoid bypassing cache on the next request).

Trait Implementations§

Source§

impl<const N_SHARDS: usize> CacheablePredictor for Predictor<N_SHARDS>
where [LruShard<()>; N_SHARDS]: Default,

Source§

fn cacheable_prediction(&self, key: &CacheKey) -> bool

Return true if likely cacheable, false if likely not.
Source§

fn mark_cacheable(&self, key: &CacheKey) -> bool

Mark cacheable to allow next request to cache. Returns false if the key was already marked cacheable.
Source§

fn mark_uncacheable( &self, key: &CacheKey, reason: NoCacheReason, ) -> Option<bool>

Mark uncacheable to actively bypass cache on the next request. May skip marking on certain NoCacheReasons. Returns None if we skipped marking uncacheable. Returns Some(false) if the key was already marked uncacheable.

Auto Trait Implementations§

§

impl<const N_SHARDS: usize> !Freeze for Predictor<N_SHARDS>

§

impl<const N_SHARDS: usize> !RefUnwindSafe for Predictor<N_SHARDS>

§

impl<const N_SHARDS: usize> Send for Predictor<N_SHARDS>

§

impl<const N_SHARDS: usize> Sync for Predictor<N_SHARDS>

§

impl<const N_SHARDS: usize> Unpin for Predictor<N_SHARDS>

§

impl<const N_SHARDS: usize> UnwindSafe for Predictor<N_SHARDS>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more