Skip to main content

Cache

Struct Cache 

Source
pub struct Cache { /* private fields */ }

Implementations§

Source§

impl Cache

Source

pub fn open(path: &Path, max_size_mb: usize) -> Result<Self>

Opens the cache, without fsyncing on every commit.

A durable commit costs ~2.0 ms for a 49-row entry against ~55 µs without one — 97% of a cache write, and far more than the query whose result is being stored. Paying it makes populating the cache several times more expensive than not having a cache at all.

MDB_NOSYNC drops the D of ACID and keeps the rest: LMDB still writes whole pages and flips the meta page atomically, so the database stays structurally valid — a system crash can cost the most recent commits, not the store. That is the right trade for this data, because every entry is a copy of something Postgres can produce again, so losing one costs a cache miss. Drop flushes, so an ordinary shutdown keeps everything anyway; only a power loss or a kill -9 forfeits the last writes.

Deliberately not combined with MDB_WRITEMAP. The two together do risk real corruption on a system crash, and the writable mmap buys nothing once the fsync is gone.

Source

pub fn get(&self, key: &str) -> Result<Option<CachedEntry>>

Source

pub fn put( &self, key: &str, rows: Vec<DecodedValue>, tags: Vec<String>, ) -> Result<()>

Source

pub fn flush(&self) -> Result<()>

Forces everything committed so far to disk. Called on Drop, so an ordinary shutdown loses nothing; call it directly to checkpoint sooner.

Source

pub fn invalidate(&self, tags: &[String]) -> Result<()>

Evicts every cache entry tagged with any of tags — called from the LISTEN/NOTIFY invalidation path after a write commits.

Source

pub fn stat(&self) -> Result<CacheStats>

Current size of the cache — see CacheStats.

Source

pub fn clear(&self) -> Result<()>

Evicts every cache entry, unconditionally — used by the pylon cache purge CLI command. Unlike invalidate, this doesn’t require knowing any tags up front.

Trait Implementations§

Source§

impl Drop for Cache

Source§

fn drop(&mut self)

Flush on the way out, so the deferred sync open selects costs nothing on an ordinary shutdown — only an abrupt one (power loss, SIGKILL) forfeits the most recent writes.

Errors are swallowed deliberately: this runs during teardown, where there is nobody left to report to, and a cache that failed to persist is a cache miss rather than a fault.

Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl Freeze for Cache

§

impl RefUnwindSafe for Cache

§

impl Send for Cache

§

impl Sync for Cache

§

impl Unpin for Cache

§

impl UnsafeUnpin for Cache

§

impl UnwindSafe for Cache

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
Source§

impl<T> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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.

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> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
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 = !

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

fn try_from(value: U) -> Result<T, !>

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.