Documentation
¶
Index ¶
- 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 Evict
- type EvictionStat
- type Evictor
- type InMemoryStorage
- func (s *InMemoryStorage) Clear()
- func (s *InMemoryStorage) Get(req *model.Entry) (ptr *model.Entry, found bool)
- func (s *InMemoryStorage) Len() int64
- 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) 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
Constants ¶
This section is empty.
Variables ¶
This section is empty.
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 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
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 Evictor ¶ added in v0.9.8
type Evictor interface {
// contains filtered or unexported methods
}
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.Cache, backend repository.Backender) *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) 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) 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) 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).
func NewRefresher ¶ added in v1.0.1
NewRefresher constructs a Refresh.
type Refresher ¶ added in v1.0.1
type Refresher interface {
// contains filtered or unexported methods
}
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.