Documentation
¶
Index ¶
- Constants
- Variables
- func MapShardKey(key uint64) uint64
- type Map
- func (smap *Map[V]) Clear()
- func (smap *Map[V]) EvictOne(shardSample, entrySample int) (freed int64, ok bool)
- func (smap *Map[V]) Get(key uint64) (value V, ok bool)
- func (smap *Map[V]) Len() int64
- func (smap *Map[V]) Mem() int64
- func (smap *Map[V]) MostLoaded(bestOf int) *Shard[V]
- func (smap *Map[V]) NextShard() *Shard[V]
- func (smap *Map[V]) Remove(key uint64) (freedBytes int64, hit bool)
- func (smap *Map[V]) Rnd() (value V, ok bool)
- func (smap *Map[V]) ScanOutdatedN(dst []V, shardSample, entriesSample int) (out []V, found int)
- func (smap *Map[V]) Set(key uint64, value V)
- func (smap *Map[V]) Shard(key uint64) *Shard[V]
- func (smap *Map[V]) UpdateAvgEntryWeightGauge() (actual int64)
- func (smap *Map[V]) WalkShards(ctx context.Context, fn func(key uint64, shard *Shard[V]))
- type Shard
- func (sh *Shard[V]) Clear() (freedBytes int64, items int64)
- func (sh *Shard[V]) Get(key uint64) (value V, ok bool)
- func (sh *Shard[V]) GetRand() (value V, ok bool)
- func (sh *Shard[V]) ID() uint64
- func (sh *Shard[V]) Len() int64
- func (sh *Shard[V]) Remove(key uint64) (freedBytes int64, hit bool)
- func (sh *Shard[V]) RemoveLocked(key uint64) (freedBytes int64, hit bool)
- func (sh *Shard[V]) Set(key uint64, v V) (bytesDelta int64, lenDelta int64)
- func (sh *Shard[V]) WalkR(ctx context.Context, fn func(uint64, V) bool)
- func (sh *Shard[V]) WalkW(ctx context.Context, fn func(uint64, V) bool)
- func (sh *Shard[V]) Weight() int64
- type Value
Constants ¶
const NumOfShards = 2048
Variables ¶
var AverageCacheEntryWeight = atomic.Int64{}
Functions ¶
Types ¶
type Map ¶
type Map[V Value] struct { // contains filtered or unexported fields }
Map — шардированная concurrent-мапа с аккуратными глобальными счётчиками.
func (*Map[V]) Clear ¶ added in v1.4.0
func (smap *Map[V]) Clear()
Clear — подчистка всех шардов с корректной агрегацией счётчиков.
func (*Map[V]) EvictOne ¶ added in v1.4.4
EvictOne — удаляет один самый «холодный» ключ по результатам семплинга, с обязательной revalidation под эксклюзивным локом шарда.
func (*Map[V]) MostLoaded ¶ added in v1.4.4
MostLoaded — семплирует S шардов (8) и возвращает самый «тяжёлый» по байтам.
func (*Map[V]) NextShard ¶ added in v1.4.4
NextShard — round-robin без локов (дешёвая энтропия для семплинга).
func (*Map[V]) Rnd ¶ added in v0.9.3
Rnd — недорогое случайное значение (без глобального math/rand).
func (*Map[V]) ScanOutdatedN ¶ added in v1.4.4
ScanOutdatedN - собирает entriesSample кандидатов с shardSample потенциальных шардов.
func (*Map[V]) UpdateAvgEntryWeightGauge ¶ added in v1.5.0
TODO move to separated worker
type Shard ¶
Shard — независимый сегмент шардированной мапы.
func (*Shard[V]) Clear ¶ added in v0.9.7
Clear — полностью очищает шард и возвращает освобождённые байты и количество удалённых элементов.
func (*Shard[V]) GetRand ¶ added in v0.9.5
GetRand — возвращает «случайный» элемент за O(1..N) без глобального rand. Используем небольшой «skip» по счётчику, чтобы не бить в начало map каждый раз.
func (*Shard[V]) RemoveLocked ¶ added in v1.4.4
RemoveLocked — удаление при уже удерживаемом Lock() (атомарный блок с внешними действиями).
func (*Shard[V]) WalkR ¶ added in v1.4.4
WalkR — обход пар (k,v) под RLock. fn должен быть лёгким и не блокироваться надолго.
type Value ¶
type Value interface {
types.Keyed // MapKey() uint64
types.Sized // Weight() int64
types.Refreshable // ShouldBeRefreshed(cfg config.Config) bool
types.Timestampable // TouchedAt() int64 (монотонный, дёшевый)
}
Value — требования к объекту в шардированной мапе. Должен уметь: предоставить ключ, вес, "освежаемость" и "время касания".