add: redis cache support
This commit is contained in:
parent
1d9a96ae69
commit
38dbf10130
13 changed files with 541 additions and 17 deletions
77
crates/core/src/cache/mod.rs
vendored
Normal file
77
crates/core/src/cache/mod.rs
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
#![allow(async_fn_in_trait)]
|
||||
use serde::{Serialize, de::DeserializeOwned};
|
||||
|
||||
pub const EXPIRE_AT: i64 = 3_600_000;
|
||||
|
||||
#[allow(type_alias_bounds)]
|
||||
pub type TimedObject<T: Serialize + DeserializeOwned> = (i64, T);
|
||||
|
||||
#[cfg(feature = "redis")]
|
||||
pub mod redis;
|
||||
|
||||
#[cfg(not(feature = "redis"))]
|
||||
pub mod no_cache;
|
||||
|
||||
/// A simple cache "database".
|
||||
pub trait Cache {
|
||||
type Item;
|
||||
type Client;
|
||||
|
||||
/// Create a new [`Cache`].
|
||||
async fn new() -> Self;
|
||||
/// Get a connection to the cache.
|
||||
async fn get_con(&self) -> Self::Client;
|
||||
|
||||
/// Get a cache object by its identifier
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
async fn get(&self, id: Self::Item) -> Option<String>;
|
||||
/// Set a cache object by its identifier and content
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
/// * `content` - `String` of the object's content
|
||||
async fn set(&self, id: Self::Item, content: Self::Item) -> bool;
|
||||
/// Update a cache object by its identifier and content
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
/// * `content` - `String` of the object's content
|
||||
async fn update(&self, id: Self::Item, content: Self::Item) -> bool;
|
||||
/// Remove a cache object by its identifier
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
async fn remove(&self, id: Self::Item) -> bool;
|
||||
/// Remove a cache object by its identifier('s start)
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id('s start)
|
||||
async fn remove_starting_with(&self, id: Self::Item) -> bool;
|
||||
/// Increment a cache object by its identifier
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
async fn incr(&self, id: Self::Item) -> bool;
|
||||
/// Decrement a cache object by its identifier
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
async fn decr(&self, id: Self::Item) -> bool;
|
||||
|
||||
/// Get a cache object by its identifier
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
async fn get_timed<T: Serialize + DeserializeOwned>(
|
||||
&self,
|
||||
id: Self::Item,
|
||||
) -> Option<TimedObject<T>>;
|
||||
/// Set a cache object by its identifier and content
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `id` - `String` of the object's id
|
||||
/// * `content` - `String` of the object's content
|
||||
async fn set_timed<T: Serialize + DeserializeOwned>(&self, id: Self::Item, content: T) -> bool;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue