pub struct ProxyCachePlugin {
role: Role,
id: String,
cache_key: Vec<String>,
cache_ttl: Duration,
cache_statuses: Vec<u16>,
cache_methods: Vec<String>,
hide_cache_headers: bool,
resources: Arc<PluginResources>,
}Expand description
One node of a proxy-cache lookup/store pair.
Holds a handle to the process-wide crate::traffic::CacheRegistry; the
key is derived per request from cache_key, namespaced by id.
Fields§
§role: Role§id: StringShared cache namespace — links the lookup and store nodes.
cache_key: Vec<String>Cache-key components, each interpolated and joined per request.
cache_ttl: DurationFreshness lifetime for stored entries.
cache_statuses: Vec<u16>Response statuses eligible for caching.
cache_methods: Vec<String>HTTP methods eligible for caching (uppercase).
hide_cache_headers: boolWhen set, hides upstream cache headers from served cache hits.
resources: Arc<PluginResources>Implementations§
Source§impl ProxyCachePlugin
impl ProxyCachePlugin
Sourcepub fn from_config(
config: &HashMap<String, Value>,
resources: &Arc<PluginResources>,
) -> Result<Self, String>
pub fn from_config( config: &HashMap<String, Value>, resources: &Arc<PluginResources>, ) -> Result<Self, String>
Builds one node of the pair from node config.
Accepted keys:
phase/role(string, required):lookup(before upstream) orstore(after upstream).id(string, required): shared cache namespace; the lookup and store nodes of one pair must use the sameid.cache_key(array of string templates or a single string, default["$request_method", "$host", "$uri"]): components interpolated (seecrate::vars::interpolate) and joined to form the key. Both nodes must configure it identically.cache_ttl(integer seconds, default300): freshness lifetime.cache_http_statuses(array, default[200, 301, 404]): statuses eligible for caching. (cache_http_status, APISIX’s singular spelling, is also accepted.)cache_method(array, default["GET", "HEAD"]): cacheable methods.hide_cache_headers(bool, defaultfalse): stripcache-control/expiresfrom served cache hits.
# before upstream
type: proxy-cache
config:
phase: lookup
id: catalog
cache_key: ["$request_method", "$host", "$uri"]
cache_ttl: 300
---
# after upstream
type: proxy-cache
config:
phase: store
id: catalog
cache_key: ["$request_method", "$host", "$uri"]
cache_ttl: 300
cache_http_statuses: [200, 301, 404]Sourcefn method_cacheable(&self, ctx: &Context) -> bool
fn method_cacheable(&self, ctx: &Context) -> bool
Whether this request’s method is cacheable.
Sourcefn derive_key(&self, ctx: &Context) -> String
fn derive_key(&self, ctx: &Context) -> String
Derives the cache key: id namespace + interpolated cache_key
components joined by a control-char separator (outside the character set
of any header/method/path, so components can’t collide).
Trait Implementations§
Source§impl Plugin for ProxyCachePlugin
impl Plugin for ProxyCachePlugin
Source§fn plugin_type(&self) -> &str
fn plugin_type(&self) -> &str
Source§fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl Freeze for ProxyCachePlugin
impl !RefUnwindSafe for ProxyCachePlugin
impl Send for ProxyCachePlugin
impl Sync for ProxyCachePlugin
impl Unpin for ProxyCachePlugin
impl UnsafeUnpin for ProxyCachePlugin
impl !UnwindSafe for ProxyCachePlugin
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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