Documentation
¶
Index ¶
- Variables
- type Balance
- func (b *Balance) FindVictim(shardKey uint64) (*model.Entry, bool)
- func (b *Balance) Mem() int64
- func (b *Balance) MostLoaded(offset int) (*ShardNode, bool)
- func (b *Balance) Push(entry *model.Entry)
- func (b *Balance) Rebalance()
- func (b *Balance) Register(shard *sharded.Shard[*model.Entry])
- func (b *Balance) Remove(shardKey uint64, el *list.Element[*model.Entry])
- func (b *Balance) Update(existing *model.Entry)
- type Balancer
- type Dump
- type Dumper
- type Evict
- type EvictionStat
- type Evictor
- type InMemoryStorage
- func (s *InMemoryStorage) Clear()
- func (s *InMemoryStorage) Close() error
- func (s *InMemoryStorage) Dump(ctx context.Context) error
- func (s *InMemoryStorage) Get(req *model.Entry) (ptr *model.Entry, found bool)
- func (s *InMemoryStorage) Len() int64
- func (s *InMemoryStorage) Load(ctx context.Context) error
- func (s *InMemoryStorage) LoadVersion(ctx context.Context, v string) error
- func (s *InMemoryStorage) Mem() int64
- func (s *InMemoryStorage) Rand() (entry *model.Entry, ok bool)
- func (s *InMemoryStorage) RealLen() int64
- func (s *InMemoryStorage) RealMem() int64
- func (s *InMemoryStorage) Remove(entry *model.Entry) (freedBytes int64, hit bool)
- func (s *InMemoryStorage) Run()
- func (s *InMemoryStorage) Set(new *model.Entry) (persisted bool)
- func (s *InMemoryStorage) ShouldEvict() bool
- func (s *InMemoryStorage) Stat() (bytes int64, length int64)
- func (s *InMemoryStorage) WalkShards(ctx context.Context, fn func(key uint64, shard *sharded.Shard[*model.Entry]))
- type Refresh
- type Refresher
- type ShardNode
- type Storage
Constants ¶
This section is empty.
Variables ¶
var ErrRefreshUpstreamBadStatusCode = errors.New("invalid upstream status code")
Functions ¶
This section is empty.
Types ¶
type Balance ¶
type Balance struct {
// contains filtered or unexported fields
}
Balance maintains per-Shard LRUStorage lists and provides efficient selection of loaded shards for eviction. - memList orders shardNodes by usage (most loaded in front). - shards is a flat array for O(1) access by Shard index. - shardedMap is the underlying data storage (map of all entries).
func NewBalancer ¶
NewBalancer creates a new Balance instance and initializes memList.
func (*Balance) MostLoaded ¶ added in v1.0.1
MostLoaded returns the first non-empty Shard node from the front of memList, optionally skipping a number of nodes by offset (for concurrent eviction fairness).
func (*Balance) Push ¶ added in v1.0.1
Push inserts a response into the appropriate Shard's LRUStorage list and updates counters. Returns the affected ShardNode for further operations.
type Dump ¶ added in v1.1.1
type Dump struct {
// contains filtered or unexported fields
}
type Evict ¶ added in v0.9.8
type Evict struct {
// contains filtered or unexported fields
}
func NewEvictor ¶ added in v0.9.8
func (*Evict) Run ¶ added in v0.9.8
func (e *Evict) Run()
Run is the main background eviction loop for one worker. Each worker tries to bring Weight usage under the threshold by evicting from most loaded shards.
func (*Evict) ShouldEvict ¶ added in v0.9.8
ShouldEvict [HOT PATH METHOD] (max stale value = 25ms) checks if current Weight usage has reached or exceeded the threshold.
type EvictionStat ¶ added in v0.9.8
type EvictionStat struct {
// contains filtered or unexported fields
}
EvictionStat carries statistics for each eviction batch.
type InMemoryStorage ¶ added in v1.0.1
type InMemoryStorage struct {
// contains filtered or unexported fields
}
InMemoryStorage is a Weight-aware, sharded InMemoryStorage cache with background eviction and refreshItem support.
func NewStorage ¶
func NewStorage(ctx context.Context, cfg config.Config, upstream upstream.Upstream) *InMemoryStorage
NewStorage constructs a new InMemoryStorage cache instance and launches eviction and refreshItem routines.
func (*InMemoryStorage) Clear ¶ added in v1.0.1
func (s *InMemoryStorage) Clear()
func (*InMemoryStorage) Close ¶ added in v1.1.1
func (s *InMemoryStorage) Close() error
func (*InMemoryStorage) Dump ¶ added in v1.1.1
func (s *InMemoryStorage) Dump(ctx context.Context) error
func (*InMemoryStorage) Get ¶ added in v1.0.1
Get retrieves a response by request and bumps its InMemoryStorage position. Returns: (response, releaser, found).
func (*InMemoryStorage) Len ¶ added in v1.0.1
func (s *InMemoryStorage) Len() int64
func (*InMemoryStorage) Load ¶ added in v1.1.1
func (s *InMemoryStorage) Load(ctx context.Context) error
func (*InMemoryStorage) LoadVersion ¶ added in v1.1.1
func (s *InMemoryStorage) LoadVersion(ctx context.Context, v string) error
func (*InMemoryStorage) Mem ¶ added in v1.0.1
func (s *InMemoryStorage) Mem() int64
func (*InMemoryStorage) Rand ¶ added in v1.0.1
func (s *InMemoryStorage) Rand() (entry *model.Entry, ok bool)
Rand returns a random item from storage.
func (*InMemoryStorage) RealLen ¶ added in v1.0.1
func (s *InMemoryStorage) RealLen() int64
func (*InMemoryStorage) RealMem ¶ added in v1.0.1
func (s *InMemoryStorage) RealMem() int64
func (*InMemoryStorage) Remove ¶ added in v1.0.1
func (s *InMemoryStorage) Remove(entry *model.Entry) (freedBytes int64, hit bool)
func (*InMemoryStorage) Run ¶ added in v1.0.3
func (s *InMemoryStorage) Run()
func (*InMemoryStorage) Set ¶ added in v1.0.1
func (s *InMemoryStorage) Set(new *model.Entry) (persisted bool)
Set inserts or updates a response in the cache, updating Weight usage and InMemoryStorage position. On 'wasPersisted=true' must be called Entry.Finalize, otherwise Entry.Finalize.
func (*InMemoryStorage) ShouldEvict ¶ added in v1.0.1
func (s *InMemoryStorage) ShouldEvict() bool
ShouldEvict [HOT PATH METHOD] (max stale value = 25ms) checks if current Weight usage has reached or exceeded the threshold.
func (*InMemoryStorage) Stat ¶ added in v1.0.1
func (s *InMemoryStorage) Stat() (bytes int64, length int64)
func (*InMemoryStorage) WalkShards ¶ added in v1.0.1
type Refresh ¶ added in v1.0.1
type Refresh struct {
// contains filtered or unexported fields
}
Refresh is responsible for background refreshing of cache entries. It periodically samples random shards and randomly selects "cold" entries (from the end of each shard's InMemoryStorage list) to refreshItem if necessary. Communication: provider->consumer (MPSC).
type ShardNode ¶
type ShardNode struct {
Shard *sharded.Shard[*model.Entry] // Reference to the actual Shard (map + sync)
// contains filtered or unexported fields
}
ShardNode represents a single Shard's LRUStorage and accounting info. Each Shard has its own LRUStorage list and a pointer to its element in the balancer's memList.
type Storage ¶
type Storage interface {
Run()
Close() error
// Get attempts to retrieve a cached response for the given request.
// Returns the response, a releaser for safe concurrent access, and a hit/miss flag.
Get(*model.Entry) (entry *model.Entry, hit bool)
// Set stores a new response in the cache and returns a releaser for managing resource lifetime.
// 1. You definitely cannot use 'inEntry' after use in Set due to it can be removed, you will receive a cache entry on hit!
// 2. Use Release and Remove for manage Entry lifetime.
Set(inEntry *model.Entry) (persisted bool)
// Remove is removes one element.
Remove(*model.Entry) (freedBytes int64, hit bool)
// Clear is removes all cache entries from the storage.
Clear()
// Stat returns bytes usage and num of items in storage.
Stat() (bytes int64, length int64)
// Len - return stored value (refreshes every 100ms).
Len() int64
RealLen() int64
// Mem - return stored value (refreshes every 100ms).
Mem() int64
// RealMem - calculates and return value.
RealMem() int64
// Rand returns a random elem from the map.
Rand() (entry *model.Entry, ok bool)
WalkShards(ctx context.Context, fn func(key uint64, shard *sharded.Shard[*model.Entry]))
// Dumper functionality
Dump(ctx context.Context) error
Load(ctx context.Context) error
LoadVersion(ctx context.Context, v string) error
}
Storage is a generic interface for cache storages. It supports typical Get/Set operations with reference management.