Documentation
¶
Overview ¶
Package cache implements a caching family of filters.
Index ¶
Constants ¶
const (
Name = filters.CacheName
)
Variables ¶
This section is empty.
Functions ¶
func NewCacheFilter ¶
NewCacheFilter returns a Spec for the cache() filter. maxBytes is the in-memory storage budget for the shared LRU cache backing all filter instances created from this Spec. listenAddr is Skipper's own listener address (e.g. ":9090"); revalidation requests are sent back through Skipper so the full filter chain runs.
Route usage (RFC mode — upstream Cache-Control is fully authoritative):
-> cache() -> "https://example.org"
Route usage (force mode — operator TTL is authoritative, upstream directives ignored):
-> cache("5m", "15s", "30s") -> "https://example.org"
Combining force mode with stale-if-error:
-> cache("5m", "15s", "30s", "60s") -> "https://example.org"
Types ¶
type Entry ¶
type Entry struct {
// StatusCode is the HTTP status code of the cached response.
StatusCode int
// Payload is the serialised response body.
Payload []byte
// Header contains the response headers as stored at cache time.
Header http.Header
// CreatedAt is the wall-clock time at which this entry was stored.
CreatedAt time.Time
// TTL is the freshness lifetime of the entry.
TTL time.Duration
// StaleWhileRevalidate is the window after TTL expiry during which a stale
// response may be served while a background revalidation is in flight.
StaleWhileRevalidate time.Duration
// ETag is the entity tag from the upstream response, used for conditional
// revalidation (If-None-Match).
ETag string
// LastModified is the Last-Modified value from the upstream response, used
// for conditional revalidation (If-Modified-Since).
LastModified string
// VaryHeaders lists the request header names captured from the original
// request that were used to derive the cache key, matching the upstream
// Vary response header.
VaryHeaders []string
// CorrectedInitialAge is the age correction term defined in RFC 9111 §4.2.3.
// When zero, setAgeHeader falls back to the legacy elapsed-time formula.
CorrectedInitialAge time.Duration
// ResponseTime is the local time at which the upstream response was received,
// used together with CorrectedInitialAge for RFC 9111 §4.2.3 age calculation.
ResponseTime time.Time
// StaleIfError extends the hard-expiry retention window so the entry remains
// retrievable during upstream error periods (RFC 5861 stale-if-error).
StaleIfError time.Duration
}
Entry holds a cached HTTP response and the metadata required for freshness evaluation, conditional revalidation, and Age header calculation.
type LRUStorage ¶
type LRUStorage struct {
// contains filtered or unexported fields
}
LRUStorage wraps ShardedByteLRU and implements Storage. It owns all cache semantics (serialisation, TTL expiry); ShardedByteLRU remains a pure byte store.
func NewLRUStorage ¶
func NewLRUStorage(totalMaxBytes int64, onEvict func()) *LRUStorage
NewLRUStorage returns an LRUStorage backed by a ShardedByteLRU sized to totalMaxBytes.
type ShardedByteLRU ¶
type ShardedByteLRU struct {
// contains filtered or unexported fields
}
ShardedByteLRU manages an array of LRU shards to reduce lock contention in highly concurrent reverse proxy environments.
func NewShardedByteLRU ¶
func NewShardedByteLRU(totalMaxBytes int64, onEvict func()) *ShardedByteLRU
NewShardedByteLRU distributes total allowed memory evenly across all shards.
func (*ShardedByteLRU) Bytes ¶
func (s *ShardedByteLRU) Bytes() int64
Bytes returns the total number of bytes currently stored across all shards.
func (*ShardedByteLRU) Delete ¶
func (s *ShardedByteLRU) Delete(key string)
func (*ShardedByteLRU) ExceedsShard ¶
func (s *ShardedByteLRU) ExceedsShard(data []byte) bool
ExceedsShard reports whether data is too large to fit in any shard.
func (*ShardedByteLRU) Set ¶
func (s *ShardedByteLRU) Set(key string, data []byte)
type Storage ¶
type Storage interface {
// Get returns the entry for key, or (nil, nil) if the key is not found.
Get(ctx context.Context, key string) (*Entry, error)
// Set stores or overwrites the entry for key.
Set(ctx context.Context, key string, entry *Entry) error
// Delete removes the entry for key. It is not an error if the key does not exist.
Delete(ctx context.Context, key string) error
}
Storage is the backing store abstraction for cached entries. Implementations must be safe for concurrent use.