Crates.io | crude_cache |
lib.rs | crude_cache |
version | 0.1.1 |
source | src |
created_at | 2023-08-14 06:20:00.661347 |
updated_at | 2023-08-15 13:44:19.618917 |
description | A simple utility for good enough concurrent caching needs. |
homepage | |
repository | https://github.com/defic/crude_cache |
max_upload_size | |
id | 943879 |
size | 15,413 |
CrudeCache
is a simple utility for good enough concurrent caching needs. Inspired by Play Framework's cache.getOrElseUpdate.
//Returns non-expired cached item. If one does not exist, new item will be cached & returned
cache.get_or_else_update("cache_key", Duration::from_secs(60), async_function).await
Disclaimer: Please note that CrudeCache
was developed for personal projects, it is not battle-tested in production and might contain bugs. Feedback, suggestions, and contributions are more than welcome.
ShardedMap
, which splits the data across multiple shards (HashMaps
). No bells and whistles, and no resharding.tokio::sync::RwLock
Add this to your Cargo.toml
:
[dependencies]
crude_cache = "0.1.1"
use crude_cache::CrudeCache;
#[derive(Clone)]
pub struct DataService {
cache: Arc<CrudeCache>,
db: Arc<Db>
}
impl DataService {
pub async fn get_big_data(&self) -> SomeBigType {
self.cache.get_or_else_update("big_data", Duration::from_secs(60), || self.db.big_data()).await
}
pub async fn get_other_data(&self) -> OtherType {
self.cache.get_or_else_update("other_data", Duration::from_secs(60), || self.db.other_data()).await
}
}
More sophisticated alternative: