Struct SegmentedCache

Source
pub struct SegmentedCache<K, V, S: BuildHasher = RandomState, W: Weigher<K, V> = One, L: Lifecycle<K, V> = DefaultLifecycle> { /* private fields */ }

Implementations§

Source§

impl<K, V, S, W, L> SegmentedCache<K, V, S, W, L>
where K: Eq + Hash + Clone, V: Clone, S: BuildHasher + Default, W: Weigher<K, V> + Clone, L: Lifecycle<K, V> + Default,

Source

pub fn new(segments: usize, max_weight: usize) -> Self

Source§

impl<K, V, S, W, L> SegmentedCache<K, V, S, W, L>
where K: Eq + Hash + Clone, V: Clone, S: BuildHasher + Default, W: Weigher<K, V> + Clone, L: Lifecycle<K, V> + Clone,

Source

pub fn new_with_lifecycle( segments: usize, max_weight: usize, lifecycle: L, ) -> Self

Source

pub fn put(&self, key: K, value: V)

Source

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

Source

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

Source

pub fn evict_all(&self)

Clears the cache, via eviction.

If you want to handle the evicted entries, use the Lifecycle trait. The order of eviction is unspecified.

This function does not guarantee that the cache is empty after calling it in the presence of concurrent writes. If you want to empty the cache, you need to stop writes first, and then call this function. If you just want to reset the cache, then you can call this function with concurrent writes. It’s safe, it’s just not going to be empty.

It will block 1/segments of the cache at a time for segment size time, so it’s potentially fairly intrusive with large segments, especially with an expensive on_eviction Lifecycle if you have one.

Trait Implementations§

Source§

impl<K: Debug, V: Debug, S: Debug + BuildHasher, W: Debug + Weigher<K, V>, L: Debug + Lifecycle<K, V>> Debug for SegmentedCache<K, V, S, W, L>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<K, V, S, W, L> Freeze for SegmentedCache<K, V, S, W, L>
where S: Freeze,

§

impl<K, V, S = RandomState, W = One, L = DefaultLifecycle> !RefUnwindSafe for SegmentedCache<K, V, S, W, L>

§

impl<K, V, S, W, L> Send for SegmentedCache<K, V, S, W, L>
where S: Send, L: Send, W: Send, K: Send, V: Send,

§

impl<K, V, S, W, L> Sync for SegmentedCache<K, V, S, W, L>
where S: Sync + Send, L: Send, W: Send, K: Send, V: Send,

§

impl<K, V, S, W, L> Unpin for SegmentedCache<K, V, S, W, L>
where S: Unpin, L: Unpin, W: Unpin, K: Unpin, V: Unpin,

§

impl<K, V, S, W, L> UnwindSafe for SegmentedCache<K, V, S, W, L>

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, 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.