cache

package
v1.6.0 Latest Latest
Warning

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

Go to latest
Published: Jul 6, 2025 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package cache provides DNS caching functionality for SDNS.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrCacheNotFound error.
	ErrCacheNotFound = errors.New("cache not found")
	// ErrCacheExpired error.
	ErrCacheExpired = errors.New("cache expired")
)

Functions

func Key added in v1.5.1

func Key(q dns.Question, cd ...bool) uint64

Key generates a cache key for DNS queries. This implementation uses object pooling and stack allocation to achieve zero heap allocations. The optional cd parameter indicates if the CD (Checking Disabled) bit should be included.

func KeySimple added in v1.5.1

func KeySimple(q dns.Question, cd ...bool) uint64

KeySimple generates a cache key without pooling for comparison. This is exported for benchmarking purposes only.

func KeyString added in v1.5.1

func KeyString(qname string, qtype, qclass uint16, cd bool) uint64

KeyString is an optimized version for string-based keys. It uses unsafe conversion to avoid allocation when converting string to []byte.

Types

type Cache added in v0.2.4

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

Cache is cache.

func New added in v0.2.4

func New(size int) *Cache

New returns a new cache.

func (*Cache) Add added in v0.2.4

func (c *Cache) Add(key uint64, el any)

(*Cache).Add add adds a new element to the cache. If the element already exists it is overwritten.

func (*Cache) Get added in v0.2.4

func (c *Cache) Get(key uint64) (any, bool)

(*Cache).Get get looks up element index under key.

func (*Cache) Len added in v0.2.4

func (c *Cache) Len() int

(*Cache).Len len returns the number of elements in the cache.

func (*Cache) Remove added in v0.2.4

func (c *Cache) Remove(key uint64)

(*Cache).Remove remove removes the element indexed with key.

func (*Cache) Stop added in v1.6.0

func (c *Cache) Stop()

Stop stops the periodic compaction

type Pair added in v1.6.0

type Pair[V any] struct {
	Key   uint64
	Value V
}

Pair contains a key-value pair

type SegmentUInt64Map added in v1.6.0

type SegmentUInt64Map[V any] struct {
	// contains filtered or unexported fields
}

SegmentUInt64Map is a fast, thread-safe map for int64 keys that uses sharding (segmentation) to reduce lock contention while maintaining the performance benefits of UInt64Map

func NewSegmentUInt64Map added in v1.6.0

func NewSegmentUInt64Map[V any](segmentPower uint8, initialCapacity int) *SegmentUInt64Map[V]

NewSegmentUInt64Map creates a new segmented map for int64 keys segmentPower controls the number of segments (2^segmentPower) initialCapacity is the initial capacity per segment

func (*SegmentUInt64Map[V]) All added in v1.6.0

func (m *SegmentUInt64Map[V]) All() iter.Seq2[uint64, V]

All returns an iterator over all key-value pairs

func (*SegmentUInt64Map[V]) Clear added in v1.6.0

func (m *SegmentUInt64Map[V]) Clear()

Clear removes all entries from the map

func (*SegmentUInt64Map[V]) Del added in v1.6.0

func (m *SegmentUInt64Map[V]) Del(key uint64) bool

Del removes a key from the map

func (*SegmentUInt64Map[V]) ForEach added in v1.6.0

func (m *SegmentUInt64Map[V]) ForEach(f func(uint64, V) bool)

ForEach iterates through all key-value pairs Note: The iteration is not atomic and may miss concurrent updates

func (*SegmentUInt64Map[V]) Get added in v1.6.0

func (m *SegmentUInt64Map[V]) Get(key uint64) (V, bool)

Get retrieves a value by key

func (*SegmentUInt64Map[V]) Has added in v1.6.0

func (m *SegmentUInt64Map[V]) Has(key uint64) bool

Has checks if a key exists in the map

func (*SegmentUInt64Map[V]) Keys added in v1.6.0

func (m *SegmentUInt64Map[V]) Keys() iter.Seq[uint64]

Keys returns an iterator over all keys

func (*SegmentUInt64Map[V]) Len added in v1.6.0

func (m *SegmentUInt64Map[V]) Len() int64

Len returns the number of elements in the map

func (*SegmentUInt64Map[V]) PutIfNotExists added in v1.6.0

func (m *SegmentUInt64Map[V]) PutIfNotExists(key uint64, value V) (V, bool)

PutIfNotExists adds the key-value pair only if the key doesn't already exist Returns the value and true if inserted, or existing value and false if not inserted

func (*SegmentUInt64Map[V]) Set added in v1.6.0

func (m *SegmentUInt64Map[V]) Set(key uint64, value V)

Set adds or updates a key-value pair

func (*SegmentUInt64Map[V]) Values added in v1.6.0

func (m *SegmentUInt64Map[V]) Values() iter.Seq[V]

Values returns an iterator over all values

type SyncUInt64Map added in v1.5.0

type SyncUInt64Map[V any] struct {
	// contains filtered or unexported fields
}

SyncUInt64Map wraps SegmentUInt64Map to provide the expected interface

func NewSyncUInt64Map added in v1.5.0

func NewSyncUInt64Map[V any](sizePower uint) *SyncUInt64Map[V]

NewSyncUInt64Map creates a new map

func (*SyncUInt64Map[V]) All added in v1.5.0

func (m *SyncUInt64Map[V]) All() iter.Seq2[uint64, V]

All returns an iterator

func (*SyncUInt64Map[V]) Compact added in v1.6.0

func (m *SyncUInt64Map[V]) Compact() int

Compact is a no-op for this implementation as it handles memory efficiently

func (*SyncUInt64Map[V]) Del added in v1.5.0

func (m *SyncUInt64Map[V]) Del(key uint64) bool

Del removes a key from the map

func (*SyncUInt64Map[V]) ForEach added in v1.5.0

func (m *SyncUInt64Map[V]) ForEach(f func(uint64, V) bool)

ForEach iterates over all entries

func (*SyncUInt64Map[V]) Get added in v1.5.0

func (m *SyncUInt64Map[V]) Get(key uint64) (V, bool)

Get retrieves a value by key

func (*SyncUInt64Map[V]) Has added in v1.5.0

func (m *SyncUInt64Map[V]) Has(key uint64) bool

Has checks if a key exists

func (*SyncUInt64Map[V]) Len added in v1.5.0

func (m *SyncUInt64Map[V]) Len() int64

Len returns the number of entries

func (*SyncUInt64Map[V]) RandomSample added in v1.5.0

func (m *SyncUInt64Map[V]) RandomSample(maxSample int) []uint64

RandomSample returns a random sample of keys

func (*SyncUInt64Map[V]) Set added in v1.5.0

func (m *SyncUInt64Map[V]) Set(key uint64, value V)

Set adds or updates a key-value pair

func (*SyncUInt64Map[V]) Stop added in v1.6.0

func (m *SyncUInt64Map[V]) Stop()

Stop is a no-op for compatibility

type UInt64Map added in v1.6.0

type UInt64Map[V any] struct {
	// contains filtered or unexported fields
}

UInt64Map is a specialized map for uint64 keys. It is specifically optimized for clustered keys, where keys are likely to be close to each other (e.g., sequential IDs, timestamp ranges).

func NewUInt64Map added in v1.6.0

func NewUInt64Map[V any](capacity int) *UInt64Map[V]

NewUInt64Map creates a new UInt64Map with given capacity

func (*UInt64Map[V]) All added in v1.6.0

func (m *UInt64Map[V]) All() iter.Seq2[uint64, V]

All returns an iterator over key-value pairs

func (*UInt64Map[V]) Clear added in v1.6.0

func (m *UInt64Map[V]) Clear()

Clear removes all items from the map

func (*UInt64Map[V]) Del added in v1.6.0

func (m *UInt64Map[V]) Del(key uint64) bool

Del deletes a key and its value

func (*UInt64Map[V]) ForEach added in v1.6.0

func (m *UInt64Map[V]) ForEach(f func(uint64, V) bool)

ForEach iterates through all key-value pairs

func (*UInt64Map[V]) Get added in v1.6.0

func (m *UInt64Map[V]) Get(key uint64) (V, bool)

Get retrieves a value by key

func (*UInt64Map[V]) Has added in v1.6.0

func (m *UInt64Map[V]) Has(key uint64) bool

Has checks if key exists in the map

func (*UInt64Map[V]) Keys added in v1.6.0

func (m *UInt64Map[V]) Keys() iter.Seq[uint64]

Keys returns an iterator over keys

func (*UInt64Map[V]) Len added in v1.6.0

func (m *UInt64Map[V]) Len() int

Len returns the number of elements in the map

func (*UInt64Map[V]) Put added in v1.6.0

func (m *UInt64Map[V]) Put(key uint64, val V)

Put adds or updates key with value

func (*UInt64Map[V]) PutIfNotExists added in v1.6.0

func (m *UInt64Map[V]) PutIfNotExists(key uint64, val V) (V, bool)

PutIfNotExists adds key-value pair only if key doesn't exist

func (*UInt64Map[V]) Values added in v1.6.0

func (m *UInt64Map[V]) Values() iter.Seq[V]

Values returns an iterator over values

Jump to

Keyboard shortcuts

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