DMSCCacheManager

Struct DMSCCacheManager 

Source
pub struct DMSCCacheManager { /* private fields */ }
Expand description

Cache manager that coordinates different cache backends with consistency support

This struct provides a unified interface for cache operations while ensuring cache consistency across multiple instances through event-driven architecture. It wraps any backend implementing the DMSCCache trait and adds consistency guarantees.

Implementations§

Source§

impl DMSCCacheManager

Source

pub fn new(backend: Arc<dyn DMSCCache + Send + Sync>) -> Self

Create a new cache manager with the specified backend

Parameters:

  • backend: The underlying cache backend implementation

Returns:

  • A new instance of DMSCCacheManager
Source

pub async fn start_consistency_listener(&mut self) -> JoinHandle<()>

Start the cache consistency event listener

This method starts a background task that listens for cache consistency events and applies them to the underlying cache backend. This ensures that all cache instances remain consistent across the system.

Returns:

  • A JoinHandle for the background task
Source

pub fn subscribe(&self) -> Receiver<DMSCCacheEvent>

Subscribe to cache consistency events

This method allows external components to subscribe to cache consistency events, enabling them to react to cache changes in real-time.

Returns:

  • A broadcast receiver for cache events
Source

pub fn publish_event(&self, event: DMSCCacheEvent)

Publish a cache consistency event

This method publishes a cache event to all subscribers, ensuring cache consistency across all instances.

Parameters:

  • event: The cache event to publish
Source

pub async fn get<T: DeserializeOwned>(&self, key: &str) -> DMSCResult<Option<T>>

Get a value from cache

This method retrieves a value from the cache using the specified key. If the key exists and the value is valid, it is deserialized and returned. Otherwise, None is returned.

Parameters:

  • key: The cache key to retrieve

Returns:

  • Ok(Some(T)) if the key exists and the value is valid
  • Ok(None) if the key does not exist
  • Err(DMSCError) if an error occurs during retrieval or deserialization
Source

pub async fn set<T: Serialize>( &self, key: &str, value: &T, ttl_seconds: Option<u64>, ) -> DMSCResult<()>

Set a value in cache with optional TTL

This method stores a value in the cache with the specified key and optional TTL. It also publishes an invalidate event to ensure cache consistency across all instances.

Parameters:

  • key: The cache key to set
  • value: The value to store (must implement Serialize)
  • ttl_seconds: Optional time-to-live in seconds

Returns:

  • Ok(()) if the value was successfully stored
  • Err(DMSCError) if an error occurs during serialization or storage
Source

pub async fn delete(&self, key: &str) -> DMSCResult<bool>

Delete a value from cache

This method deletes a value from the cache using the specified key. It also publishes an invalidate event to ensure cache consistency across all instances.

Parameters:

  • key: The cache key to delete

Returns:

  • Ok(true) if the key was found and deleted
  • Ok(false) if the key didn’t exist
  • Err(DMSCError) if an error occurs during deletion
Source

pub async fn exists(&self, key: &str) -> bool

Check if a key exists in cache

This method checks if the specified key exists in the cache.

Parameters:

  • key: The cache key to check

Returns:

  • true if the key exists, false otherwise
Source

pub async fn clear(&self) -> DMSCResult<()>

Clear all cache entries

This method clears all entries from the cache. It also publishes a clear event to ensure cache consistency across all instances.

Returns:

  • Ok(()) if the cache was successfully cleared
  • Err(DMSCError) if an error occurs during clearing
Source

pub async fn invalidate_pattern(&self, pattern: &str) -> DMSCResult<()>

Invalidate cache entries matching a pattern

This method invalidates all cache entries matching the specified pattern. It publishes an invalidate pattern event to ensure cache consistency across all instances.

Parameters:

  • pattern: The pattern to match cache keys (supports wildcards depending on backend)

Returns:

  • Ok(()) if the invalidation event was successfully published
Source

pub async fn stats(&self) -> DMSCCacheStats

Get cache statistics

This method retrieves statistics about the cache, including hit rate, miss rate, and the number of entries.

Returns:

  • A DMSCCacheStats struct containing the cache statistics
Source

pub async fn cleanup_expired(&self) -> DMSCResult<usize>

Cleanup expired cache entries

This method removes all expired entries from the cache.

Returns:

  • Ok(usize) with the number of expired entries cleaned up
  • Err(DMSCError) if an error occurs during cleanup
Source

pub async fn get_or_set<T, F>( &self, key: &str, ttl_seconds: Option<u64>, factory: F, ) -> DMSCResult<T>

Get a value from cache or set it if it doesn’t exist

This method retrieves a value from the cache using the specified key. If the key exists and the value is valid, it is returned. Otherwise, the provided factory function is called to generate the value, which is then stored in the cache and returned.

Parameters:

  • key: The cache key to retrieve or set
  • ttl_seconds: Optional time-to-live in seconds for the new value
  • factory: A function that generates the value if it doesn’t exist in cache

Returns:

  • Ok(T) with the retrieved or generated value
  • Err(DMSCError) if an error occurs during retrieval, generation, or storage

Trait Implementations§

Source§

impl<'py> IntoPyObject<'py> for DMSCCacheManager

Source§

type Target = DMSCCacheManager

The Python output type
Source§

type Output = Bound<'py, <DMSCCacheManager as IntoPyObject<'py>>::Target>

The smart pointer type to use. Read more
Source§

type Error = PyErr

The type returned in the event of a conversion error.
Source§

fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>

Performs the conversion.
Source§

impl PyClass for DMSCCacheManager

Source§

type Frozen = False

Whether the pyclass is frozen. Read more
Source§

impl PyClassImpl for DMSCCacheManager

Source§

const IS_BASETYPE: bool = false

#[pyclass(subclass)]
Source§

const IS_SUBCLASS: bool = false

#[pyclass(extends=…)]
Source§

const IS_MAPPING: bool = false

#[pyclass(mapping)]
Source§

const IS_SEQUENCE: bool = false

#[pyclass(sequence)]
Source§

const IS_IMMUTABLE_TYPE: bool = false

#[pyclass(immutable_type)]
Source§

const RAW_DOC: &'static CStr = /// any backend implementing the DMSCCache trait and adds consistency guarantees.

Docstring for the class provided on the struct or enum. Read more
Source§

const DOC: &'static CStr

Fully rendered class doc, including the text_signature if a constructor is defined. Read more
Source§

type BaseType = PyAny

Base class
Source§

type ThreadChecker = SendablePyClass<DMSCCacheManager>

This handles following two situations: Read more
Source§

type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild

Immutable or mutable
Source§

type Dict = PyClassDummySlot

Specify this class has #[pyclass(dict)] or not.
Source§

type WeakRef = PyClassDummySlot

Specify this class has #[pyclass(weakref)] or not.
Source§

type BaseNativeType = PyAny

The closest native ancestor. This is PyAny by default, and when you declare #[pyclass(extends=PyDict)], it’s PyDict.
Source§

fn items_iter() -> PyClassItemsIter

Source§

fn lazy_type_object() -> &'static LazyTypeObject<Self>

§

fn dict_offset() -> Option<isize>

§

fn weaklist_offset() -> Option<isize>

Source§

impl PyClassNewTextSignature for DMSCCacheManager

Source§

const TEXT_SIGNATURE: &'static str = "()"

Source§

impl PyMethods<DMSCCacheManager> for PyClassImplCollector<DMSCCacheManager>

Source§

fn py_methods(self) -> &'static PyClassItems

Source§

impl PyTypeInfo for DMSCCacheManager

Source§

const NAME: &'static str = "DMSCCacheManager"

Class name.
Source§

const MODULE: Option<&'static str> = ::core::option::Option::None

Module name, if any.
Source§

fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject

Returns the PyTypeObject instance for this type.
§

fn type_object(py: Python<'_>) -> Bound<'_, PyType>

Returns the safe abstraction over the type object.
§

fn is_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type or a subclass of this type.
§

fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type.
Source§

impl DerefToPyAny for DMSCCacheManager

Source§

impl ExtractPyClassWithClone for DMSCCacheManager

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<'py, T> IntoPyObjectExt<'py> for T
where T: IntoPyObject<'py>,

§

fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>

Converts self into an owned Python object, dropping type information.
§

fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>

Converts self into an owned Python object, dropping type information and unbinding it from the 'py lifetime.
§

fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>

Converts self into a Python object. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PyErrArguments for T
where T: for<'py> IntoPyObject<'py> + Send + Sync,

§

fn arguments(self, py: Python<'_>) -> Py<PyAny>

Arguments for exception
§

impl<T> PyTypeCheck for T
where T: PyTypeInfo,

§

const NAME: &'static str = T::NAME

👎Deprecated since 0.27.0: Use ::classinfo_object() instead and format the type name at runtime. Note that using built-in cast features is often better than manual PyTypeCheck usage.
Name of self. This is used in error messages, for example.
§

fn type_check(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of Self, which may include a subtype. Read more
§

fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>

Returns the expected type as a possible argument for the isinstance and issubclass function. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> Ungil for T
where T: Send,