cache

package
v1.10.2-rc.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 23, 2023 License: BSD-3-Clause Imports: 7 Imported by: 85

Documentation

Index

Constants

View Source
const TestSizedIntSize = 8

Variables

View Source
var CacherTests = []struct {
	Size int
	Func func(t *testing.T, c Cacher[ids.ID, TestSizedInt])
}{
	{Size: 1, Func: TestBasic},
	{Size: 2, Func: TestEviction},
}

CacherTests is a list of all Cacher tests

Functions

func TestBasic added in v1.1.4

func TestBasic(t *testing.T, cache Cacher[ids.ID, TestSizedInt])

func TestEviction added in v1.1.4

func TestEviction(t *testing.T, cache Cacher[ids.ID, TestSizedInt])

Types

type Cacher

type Cacher[K comparable, V any] interface {
	// Put inserts an element into the cache. If space is required, elements will
	// be evicted.
	Put(key K, value V)

	// Get returns the entry in the cache with the key specified, if no value
	// exists, false is returned.
	Get(key K) (V, bool)

	// Evict removes the specified entry from the cache
	Evict(key K)

	// Flush removes all entries from the cache
	Flush()

	// Returns fraction of cache currently filled (0 --> 1)
	PortionFilled() float64
}

Cacher acts as a best effort key value store.

func NewSizedLRU added in v1.10.2

func NewSizedLRU[K comparable, V SizedElement](maxSize int) Cacher[K, V]

type Deduplicator

type Deduplicator[K comparable, V Evictable[K]] interface {
	// Deduplicate returns either the provided value, or a previously provided
	// value with the same ID that hasn't yet been evicted
	Deduplicate(V) V

	// Flush removes all entries from the cache
	Flush()
}

Deduplicator acts as a best effort deduplication service

type Evictable

type Evictable[K comparable] interface {
	Key() K
	Evict()
}

Evictable allows the object to be notified when it is evicted

type EvictableLRU

type EvictableLRU[K comparable, _ Evictable[K]] struct {
	Size int
	// contains filtered or unexported fields
}

EvictableLRU is an LRU cache that notifies the objects when they are evicted.

func (*EvictableLRU[_, V]) Deduplicate

func (c *EvictableLRU[_, V]) Deduplicate(value V) V

func (*EvictableLRU[_, _]) Flush

func (c *EvictableLRU[_, _]) Flush()

type LRU

type LRU[K comparable, V any] struct {

	// If set to < 0, will be set internally to 1.
	Size int
	// contains filtered or unexported fields
}

LRU is a key value store with bounded size. If the size is attempted to be exceeded, then an element is removed from the cache before the insertion is done, based on evicting the least recently used value.

func (*LRU[K, _]) Evict

func (c *LRU[K, _]) Evict(key K)

func (*LRU[_, _]) Flush

func (c *LRU[_, _]) Flush()

func (*LRU[K, V]) Get

func (c *LRU[K, V]) Get(key K) (V, bool)

func (*LRU[_, _]) PortionFilled added in v1.10.2

func (c *LRU[_, _]) PortionFilled() float64

func (*LRU[K, V]) Put

func (c *LRU[K, V]) Put(key K, value V)

type SizedElement added in v1.10.2

type SizedElement interface {
	Size() int
}

type TestSizedInt added in v1.10.2

type TestSizedInt struct {
	// contains filtered or unexported fields
}

func (TestSizedInt) Size added in v1.10.2

func (TestSizedInt) Size() int

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL