Skip to main content

S3FIFOCache

Struct S3FIFOCache 

Source
pub struct S3FIFOCache<K, V>
where K: Eq + Hash,
{ /* private fields */ }
Expand description

A cache implementation based on the S3-FIFO (Simple Scalable Static FIFO) algorithm.

S3-FIFO uses a three-queue architecture to achieve high hit rates by separating transient “one-hit wonders” from frequently accessed data.

§Architecture

  1. Small Queue: An intake FIFO for new entries (probationary area).
  2. Main Queue: A FIFO for entries that have proven their value (protected area).
  3. Ghost Queue: Tracks hashes of recently evicted items to facilitate re-insertion directly into the Main Queue.

Implementations§

Source§

impl<K, V> S3FIFOCache<K, V>
where K: Eq + Hash,

Source

pub fn new( capacity: usize, backoff_config: BackoffConfig, metrics_config: MetricsConfig, ) -> Self

Creates a new S3Cache with the specified capacity.

The total capacity is partitioned between a 10% small probationary segment and a 90% main protected segment. All slots are initialized as empty and their indices are added to the available pool.

Source

pub fn get<Q>(&self, key: &Q) -> Option<Ref<K, V>>
where Key<K>: Borrow<Q>, Q: Eq + Hash + ?Sized,

Retrieves a reference to an entry associated with the provided key.

If the entry exists and is valid, its access frequency is atomically incremented. This protects the entry from being removed during the next space-reclamation cycle.

Source

pub fn insert_with( &self, key: K, value: V, expired_at: Option<Instant>, admission: impl Fn(&K, &K) -> bool, )

Handles the admission of new entries into the probationary segment.

If the segment is full, this function triggers space reclamation. The entry is stored in a slot obtained from the available pool and then appended to the small queue.

Source

pub fn remove<Q>(&self, key: &Q) -> bool
where Key<K>: Borrow<Q>, Q: Eq + Hash + ?Sized,

Trait Implementations§

Source§

impl<K, V> CacheEngine<K, V> for S3FIFOCache<K, V>
where K: Eq + Hash,

Source§

fn get<Q>(&self, key: &Q) -> Option<Ref<K, V>>
where Key<K>: Borrow<Q>, Q: Eq + Hash + ?Sized,

Retrieves a protected reference to a cached value. Read more
Source§

fn insert_with<A>( &self, key: K, value: V, expired_at: Option<Instant>, admission: A, )
where A: Fn(&K, &K) -> bool,

Inserts a key-value pair with a custom admission policy. Read more
Source§

fn remove<Q>(&self, key: &Q) -> bool
where Key<K>: Borrow<Q>, Q: Eq + Hash + ?Sized,

Removes an entry from the cache. Read more
Source§

fn capacity(&self) -> usize

Returns the total number of slots allocated for the cache.
Source§

fn metrics(&self) -> MetricsSnapshot

Returns a snapshot of internal cache statistics.
Source§

fn insert(&self, key: K, value: V, expired_at: Option<Instant>)

Inserts a key-value pair into the cache. Read more

Auto Trait Implementations§

§

impl<K, V> !Freeze for S3FIFOCache<K, V>

§

impl<K, V> !RefUnwindSafe for S3FIFOCache<K, V>

§

impl<K, V> Send for S3FIFOCache<K, V>
where V: Send + Sync, K: Sync + Send,

§

impl<K, V> Sync for S3FIFOCache<K, V>
where V: Send + Sync, K: Sync + Send,

§

impl<K, V> Unpin for S3FIFOCache<K, V>

§

impl<K, V> UnsafeUnpin for S3FIFOCache<K, V>

§

impl<K, V> UnwindSafe for S3FIFOCache<K, V>

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, 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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