skp_cache/
lib.rs

1//! skp-cache: Advanced, modular caching library for Rust
2//!
3//! # Features
4//!
5//! - **Multi-tier caching** (L1 Memory + L2 Redis)
6//! - **Dependency graph-based invalidation**
7//! - **Pluggable serialization** (JSON, MessagePack, Bincode)
8//! - **Metrics integration**
9//! - **Stampede protection**
10//!
11//! # Quick Start
12//!
13//! ```rust,no_run
14//! use skp_cache::prelude::*;
15//!
16//! #[tokio::main]
17//! async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
18//!     let backend = MemoryBackend::new(MemoryConfig::default());
19//!     let cache = CacheManager::new(backend);
20//!
21//!     cache.set("key", &42i32, CacheOpts::new().ttl_secs(60)).await?;
22//!     
23//!     match cache.get::<i32>("key").await? {
24//!         CacheResult::Hit(entry) => println!("Got: {}", entry.value),
25//!         CacheResult::Miss => println!("Cache miss"),
26//!         _ => {}
27//!     }
28//!     
29//!     Ok(())
30//! }
31//! ```
32
33mod manager;
34
35// Re-export core
36pub use skp_cache_core::*;
37
38// Re-export storage
39#[cfg(feature = "memory")]
40pub use skp_cache_storage::{MemoryBackend, MemoryConfig};
41
42#[cfg(feature = "redis")]
43pub use skp_cache_storage::{RedisBackend, RedisConfig};
44
45#[cfg(feature = "multitier")]
46pub use skp_cache_storage::{MultiTierBackend, CircuitBreaker};
47
48#[cfg(feature = "derive")]
49pub use skp_cache_derive::CacheKey;
50
51// Export manager
52pub use manager::{CacheManager, CacheManagerConfig};
53pub use manager::{Loader, ReadThroughCache, CacheManagerReadThroughExt};
54pub use manager::CacheGroup;
55
56/// Prelude for convenient imports
57pub mod prelude {
58    pub use crate::{
59        CacheError, CacheKey, CacheManager, CacheManagerConfig, CacheOpts, CacheResult,
60        JsonSerializer, Result, Serializer, Loader, ReadThroughCache, CacheManagerReadThroughExt,
61        CacheGroup,
62    };
63
64    #[cfg(feature = "memory")]
65    pub use crate::{MemoryBackend, MemoryConfig};
66
67    #[cfg(feature = "redis")]
68    pub use crate::{RedisBackend, RedisConfig};
69
70    #[cfg(feature = "multitier")]
71    pub use crate::{MultiTierBackend, CircuitBreaker};
72
73    #[cfg(feature = "msgpack")]
74    pub use crate::MsgPackSerializer;
75
76    #[cfg(feature = "bincode")]
77    pub use crate::BincodeSerializer;
78
79    #[cfg(feature = "derive")]
80    pub use crate::CacheKey as DeriveCacheKey;
81}
82
83#[cfg(test)]
84mod tests;