pub struct HttpCache {
entries: Cache<CacheKey, Arc<RwLock<Vec<CachedResource>>>, UnitWeighter>,
}Expand description
A simple memory cache.
Elements will be evicted based on the cache heuristic. We weight elements
by the number of entries per given url. We evict currently a whole url.
The cache makes extensive use of Arc::unwrap_or_clone or and Arc::into_inner
to modify the cached entries. This is ok because CachedResource are cheap to clone
Fields§
§entries: Cache<CacheKey, Arc<RwLock<Vec<CachedResource>>>, UnitWeighter>cached responses.
Implementations§
Source§impl HttpCache
impl HttpCache
Sourcepub(crate) async fn update_awaiting_consumers(
&self,
request: &Request,
response: &Response,
)
pub(crate) async fn update_awaiting_consumers( &self, request: &Request, response: &Response, )
Wake-up consumers of cached resources whose response body was still receiving data when the resource was constructed, and whose response has now either been completed or cancelled.
Sourcepub(crate) fn cache_entry_descriptors(&self) -> Vec<CacheEntryDescriptor>
pub(crate) fn cache_entry_descriptors(&self) -> Vec<CacheEntryDescriptor>
Returns descriptors for cache entries currently stored in this cache.
Sourcepub async fn store(&self, request: &Request, response: &Response)
pub async fn store(&self, request: &Request, response: &Response)
Insert a response for request into the cache (used by tests that need direct access).
Sourcepub async fn construct_response(
&self,
request: &Request,
done_chan: &mut DoneChannel,
) -> Option<Response>
pub async fn construct_response( &self, request: &Request, done_chan: &mut DoneChannel, ) -> Option<Response>
Try to construct a cached response for request.
Invalidate cache entries referenced by Location/Content-Location headers.
async fn invalidate_entry(&self, key: &CacheKey)
Sourcepub async fn get_or_guard(
&self,
entry_key: CacheKey,
) -> CachedResourcesOrGuard<'_>
pub async fn get_or_guard( &self, entry_key: CacheKey, ) -> CachedResourcesOrGuard<'_>
If the value exist in the cache, return it. If the value does not exist, return a guard you can use to insert values in the cache. If the guard is alive, all other accesses to this function will block.
Trait Implementations§
Source§impl MallocSizeOf for HttpCache
impl MallocSizeOf for HttpCache
Source§fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
Auto Trait Implementations§
impl Freeze for HttpCache
impl !RefUnwindSafe for HttpCache
impl Send for HttpCache
impl Sync for HttpCache
impl Unpin for HttpCache
impl !UnwindSafe for HttpCache
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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