[−][src]Struct aba_cache::LruAsyncCache
Async version of Cache with LRU eviction strategy
Methods
impl<K: 'static + Hash + Eq + Sync + Send, V: 'static + Clone + Send> Cache<K, V>
[src]
pub fn new(multiply_cap: usize, timeout_secs: u64) -> Arc<Self>
[src]
Create new Cache, which will expiring its entry after timeout_secs
and allocating new slab with capacity multiply_cap
when no space
is ready and no entry expires
pub async fn get<'_, '_, Q: ?Sized>(&'_ self, key: &'_ Q) -> Option<V> where
Arc<K>: Borrow<Q>,
Q: Hash + Eq,
[src]
Arc<K>: Borrow<Q>,
Q: Hash + Eq,
Returns the clone value of the key in the cache or None
if it is not
present in the cache. Moves the key to the head of the LRU list if it exists.
Example
use aba_cache as cache; use cache::LruAsyncCache; #[tokio::main] async fn main() { let cache = LruAsyncCache::new(2, 60); assert_eq!(cache.put(String::from("1"), "a").await, None); assert_eq!(cache.put(String::from("2"), "b").await, None); assert_eq!(cache.put(String::from("2"), "c").await, Some("b")); assert_eq!(cache.put(String::from("3"), "d").await, None); assert_eq!(cache.get(&String::from("1")).await, Some("a")); assert_eq!(cache.get(&String::from("2")).await, Some("c")); assert_eq!(cache.get(&String::from("3")).await, Some("d")); }
pub async fn put<'_>(&'_ self, key: K, value: V) -> Option<V>
[src]
Puts a key-value pair into cache. If the key already exists in the cache, then it updates
the key's value and returns the old value. Otherwise, None
is returned.
Example
use aba_cache as cache; use cache::LruAsyncCache; #[tokio::main] async fn main() { let cache = LruAsyncCache::new(2, 60); assert_eq!(None, cache.put(String::from("1"), "a").await); assert_eq!(None, cache.put(String::from("2"), "b").await); assert_eq!(Some("b"), cache.put(String::from("2"), "beta").await); assert_eq!(cache.get(&String::from("1")).await, Some("a")); assert_eq!(cache.get(&String::from("2")).await, Some("beta")); }
pub async fn capacity<'_>(&'_ self) -> usize
[src]
Returns the maximum number of key-value pairs the cache can hold.
Note that on data insertion, when no space is available and no
entry is timeout, then capacity will be added with multiply_cap
to accomodate.
Example
use aba_cache as cache; use cache::LruAsyncCache; #[tokio::main] async fn main() { let cache = LruAsyncCache::new(2, 60); assert_eq!(cache.capacity().await, 2); cache.put(1, "a").await; assert_eq!(cache.capacity().await, 2); cache.put(2, "b").await; assert_eq!(cache.capacity().await, 2); cache.put(3, "c").await; assert_eq!(cache.capacity().await, 4); }
pub async fn len<'_>(&'_ self) -> usize
[src]
Returns the number of key-value pairs that are currently in the the cache. Note that len should be less than or equal to capacity
Example
use aba_cache as cache; use cache::LruAsyncCache; #[tokio::main] async fn main() { let cache = LruAsyncCache::new(2, 60); assert_eq!(cache.len().await, 0); cache.put(1, "a").await; assert_eq!(cache.len().await, 1); cache.put(2, "b").await; assert_eq!(cache.len().await, 2); assert_eq!(cache.capacity().await, 2); cache.put(3, "c").await; assert_eq!(cache.len().await, 3); assert_eq!(cache.capacity().await, 4); }
pub async fn is_empty<'_>(&'_ self) -> bool
[src]
Returns a bool indicating whether the cache is empty or not.
Example
use aba_cache as cache; use cache::LruAsyncCache; #[tokio::main] async fn main() { let cache = LruAsyncCache::new(2, 60); assert!(cache.is_empty().await); cache.put(String::from("1"), "a").await; assert!(!cache.is_empty().await); }
Auto Trait Implementations
impl<K, V> !RefUnwindSafe for Cache<K, V>
impl<K, V> Send for Cache<K, V> where
K: Send + Sync,
V: Send,
K: Send + Sync,
V: Send,
impl<K, V> Sync for Cache<K, V> where
K: Send + Sync,
V: Send,
K: Send + Sync,
V: Send,
impl<K, V> Unpin for Cache<K, V> where
V: Unpin,
V: Unpin,
impl<K, V> !UnwindSafe for Cache<K, V>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,