pub struct Cache { /* private fields */ }
Expand description
The main component of forceps
, and acts as the API for interacting with the on-disk cache.
This structure includes the async read
, write
, and remove
operations which are the basic
operations of the cache. It also includes some misc functions to interact with metadata and
evict items from the cache.
§Eviction
This cache can evict items with a number of different eviction algorithms. To see more, see
evict_with
and the evictors
module.
§Memory Cache
An in-memory cache can be optionally enabled as a layer over the regular on-disk cache. The
memcache provides fast HIT
s for recently used entries, circumventing filesystem operations
altogether. To enable, use the CacheBuilder
::memory_lru_max_size
method.
§Examples
use forceps::Cache;
let cache = Cache::new("./cache")
.build()
.await
.unwrap();
Implementations§
Source§impl Cache
impl Cache
Sourcepub fn new<P: AsRef<Path>>(path: P) -> CacheBuilder
pub fn new<P: AsRef<Path>>(path: P) -> CacheBuilder
Creates a new CacheBuilder
, which can be used to customize and create a Cache
instance. This function is an alias for CacheBuilder::new
.
The path
supplied is the base directory of the cache instance.
§Examples
use forceps::Cache;
let builder = Cache::new("./cache");
// Use other methods for configuration
Sourcepub async fn read<K: AsRef<[u8]>>(&self, key: K) -> Result<Bytes>
pub async fn read<K: AsRef<[u8]>>(&self, key: K) -> Result<Bytes>
Reads an entry from the database, returning a vector of bytes that represent the entry.
§Not Found
If the entry is not found, then it will return
Err(
Error::NotFound
)
.
§Metadata
This function will not perform a metadata read or write unless the track_access
build option is set. If the option is set, then it will perform a blocking read/write to
write new values to track the last access time and the total hits.
§Examples
use forceps::Cache;
let cache = Cache::new("./cache")
.build()
.await
.unwrap();
let value = cache.read(b"MY_KEY").await.unwrap();
assert_eq!(value.as_ref(), b"Hello World");
Sourcepub async fn write<K: AsRef<[u8]>, V: AsRef<[u8]>>(
&self,
key: K,
value: V,
) -> Result<Metadata>
pub async fn write<K: AsRef<[u8]>, V: AsRef<[u8]>>( &self, key: K, value: V, ) -> Result<Metadata>
Writes an entry with the specified key to the cache database. This will replace the previous entry if it exists, otherwise it will store a completely new one.
§Examples
use forceps::Cache;
let cache = Cache::new("./cache")
.build()
.await
.unwrap();
cache.write(b"MY_KEY", b"Hello World").await.unwrap();
Sourcepub async fn remove<K: AsRef<[u8]>>(&self, key: K) -> Result<Metadata>
pub async fn remove<K: AsRef<[u8]>>(&self, key: K) -> Result<Metadata>
Removes an entry from the cache, returning its Metadata
.
This will remove the entry from both the main cache database and the metadata database.
Please note that this will return Error::NotFound
if either the main database or the
meta database didn’t find the entry.
§Examples
use forceps::Cache;
let cache = Cache::new("./cache")
.build()
.await
.unwrap();
let metadata = cache.remove(b"MY_KEY").await.unwrap();
assert_eq!(metadata.get_size(), b"Hello World".len() as u64);
Sourcepub fn read_metadata<K: AsRef<[u8]>>(&self, key: K) -> Result<Metadata>
pub fn read_metadata<K: AsRef<[u8]>>(&self, key: K) -> Result<Metadata>
Queries the index database for metadata on the entry with the corresponding key.
This will return the metadata for the associated key. For information about what metadata
is stored, look at Metadata
.
§Non-Async
Note that this function is not an async call. This is because the backend database used,
sled
, is not async-compatible. However, these calls are instead very fast.
§Not Found
If the entry is not found, then it will return
Err(
Error::NotFound
)
.
§Examples
use forceps::Cache;
let cache = Cache::new("./cache")
.build()
.await
.unwrap();
let meta = cache.read_metadata(b"MY_KEY").unwrap();
assert_eq!(meta.get_size(), b"Hello World".len() as u64);
Sourcepub fn metadata_iter(&self) -> impl Iterator<Item = Result<(Vec<u8>, Metadata)>>
pub fn metadata_iter(&self) -> impl Iterator<Item = Result<(Vec<u8>, Metadata)>>
An iterator over the entire metadata database, which provides metadata for every entry.
This iterator provides every key in the database and the associated metadata for that key. This is not an iterator over the actual values of the database.
§Non-Async
Note that this function is not an async call. This is because the backend database used,
sled
, is not async-compatible. However, these calls are instead very fast.
§Examples
use forceps::Cache;
let cache = Cache::new("./cache")
.build()
.await
.unwrap();
for result in cache.metadata_iter() {
let (key, meta) = result.unwrap();
println!("{}", String::from_utf8_lossy(&key))
}
Sourcepub async fn evict_with<E>(&self, evictor: E) -> Result<u64, E::Err>where
E: Evictor,
pub async fn evict_with<E>(&self, evictor: E) -> Result<u64, E::Err>where
E: Evictor,
Runs the specified eviction algorithm over this instance cache instance.
Eviction algorithms will remove items out of the cache until certain a condition has been
met, usually a size requirement. See the evictors
module for more information and
examples.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for Cache
impl !RefUnwindSafe for Cache
impl Send for Cache
impl Sync for Cache
impl Unpin for Cache
impl !UnwindSafe for Cache
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.