Skip to main content

Manager

Struct Manager 

Source
pub struct Manager<const N: usize>(/* private fields */);
Expand description

A shared LRU cache manager designed to manage a large volume of assets.

  • Space optimized in-memory LRU (see pingora_lru).
  • Instead of a single giant LRU, this struct shards the assets into N independent LRUs.

This allows EvictionManager::save() not to lock the entire cache manager while performing serialization.

Implementations§

Source§

impl<const N: usize> Manager<N>

Source

pub fn with_capacity(limit: usize, capacity: usize) -> Self

Create a Manager with the given size limit and estimated per shard capacity.

The capacity is for preallocating to avoid reallocation cost when the LRU grows.

Source

pub fn with_capacity_and_watermark( limit: usize, capacity: usize, watermark: Option<usize>, ) -> Self

Create a Manager with an optional watermark in addition to weight limit.

When watermark is set, the underlying LRU will also evict to keep total item count under or equal to that watermark.

Source

pub fn shards(&self) -> usize

Get the number of shards

Source

pub fn shard_weight(&self, shard: usize) -> usize

Get the weight (total size) of a specific shard

Source

pub fn shard_len(&self, shard: usize) -> usize

Get the number of items in a specific shard

Source

pub fn get_shard_for_key(&self, key: &CompactCacheKey) -> usize

Get the shard index for a given cache key

This allows callers to know which shard was affected by an operation without acquiring any locks.

Source

pub fn serialize_shard(&self, shard: usize) -> Result<Vec<u8>>

Serialize the given shard

Source

pub fn deserialize_shard(&self, buf: &[u8]) -> Result<()>

Deserialize a shard

Shard number is not needed because the key itself will hash to the correct shard.

Source

pub fn peek_weight(&self, item: &CompactCacheKey) -> Option<usize>

Peek the weight associated with a cache key without changing its LRU order.

Trait Implementations§

Source§

impl<const N: usize> EvictionManager for Manager<N>

Source§

fn total_size(&self) -> usize

Total size of the cache in bytes tracked by this eviction manager
Source§

fn total_items(&self) -> usize

Number of assets tracked by this eviction manager
Source§

fn evicted_size(&self) -> usize

Number of bytes that are already evicted Read more
Source§

fn evicted_items(&self) -> usize

Number of assets that are already evicted Read more
Source§

fn admit( &self, item: CompactCacheKey, size: usize, _fresh_until: SystemTime, ) -> Vec<CompactCacheKey>

Admit an item Read more
Source§

fn increment_weight( &self, item: &CompactCacheKey, delta: usize, max_weight: Option<usize>, ) -> Vec<CompactCacheKey>

Adjust an item’s weight upwards by a delta. If the item is not already admitted, nothing will happen. Read more
Source§

fn remove(&self, item: &CompactCacheKey)

Remove an item from the eviction manager. Read more
Source§

fn access( &self, item: &CompactCacheKey, size: usize, _fresh_until: SystemTime, ) -> bool

Access an item that should already be in cache. Read more
Source§

fn peek(&self, item: &CompactCacheKey) -> bool

Peek into the manager to see if the item is already tracked by the system Read more
Source§

fn save<'life0, 'life1, 'async_trait>( &'life0 self, dir_path: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Serialize to save the state of this eviction manager to disk Read more
Source§

fn load<'life0, 'life1, 'async_trait>( &'life0 self, dir_path: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

The counterpart of Self::save().

Auto Trait Implementations§

§

impl<const N: usize> !Freeze for Manager<N>

§

impl<const N: usize> !RefUnwindSafe for Manager<N>

§

impl<const N: usize> Send for Manager<N>

§

impl<const N: usize> Sync for Manager<N>

§

impl<const N: usize> Unpin for Manager<N>

§

impl<const N: usize> UnwindSafe for Manager<N>

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