Struct TinyUfo

Source
pub struct TinyUfo<K, T> { /* private fields */ }
Expand description

TinyUfo cache

Implementations§

Source§

impl<K: Hash, T: Clone + Send + Sync + 'static> TinyUfo<K, T>

Source

pub fn new(total_weight_limit: usize, estimated_size: usize) -> Self

Create a new TinyUfo cache with the given weight limit and the given size limit of the ghost queue.

Source

pub fn new_compact(total_weight_limit: usize, estimated_size: usize) -> Self

Create a new TinyUfo cache but with more memory efficient data structures. The trade-off is that the the get() is slower by a constant factor. The cache hit ratio could be higher as this type of TinyUFO allows to store more assets with the same memory.

Source

pub fn get(&self, key: &K) -> Option<T>

Read the given key

Return Some(T) if the key exists

Source

pub fn put(&self, key: K, data: T, weight: u16) -> Vec<KV<T>>

Put the key value to the TinyUfo

Return a list of KV of key and T that are evicted

Source

pub fn remove(&self, key: &K) -> Option<T>

Remove the given key from the cache if it exists

Returns Some(T) if the key was found and removed, None otherwise

Source

pub fn force_put(&self, key: K, data: T, weight: u16) -> Vec<KV<T>>

Always put the key value to the TinyUfo

Return a list of KV of key and T that are evicted

Similar to Self::put but guarantee the assertion of the asset. In Self::put, the TinyLFU check may reject putting the current asset if it is less popular than the once being evicted.

In some real world use cases, a few reads to the same asset may be pending for the put action to be finished so that they can read the asset from cache. Neither the above behaviors are ideal for this use case.

Compared to Self::put, the hit ratio when using this function is reduced by about 0.5pp or less in under zipf workloads.

Auto Trait Implementations§

§

impl<K, T> !Freeze for TinyUfo<K, T>

§

impl<K, T> !RefUnwindSafe for TinyUfo<K, T>

§

impl<K, T> Send for TinyUfo<K, T>
where K: Send, T: Send + Sync,

§

impl<K, T> Sync for TinyUfo<K, T>
where K: Sync, T: Sync + Send,

§

impl<K, T> Unpin for TinyUfo<K, T>
where K: Unpin, T: Unpin,

§

impl<K, T> !UnwindSafe for TinyUfo<K, T>

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.