cache

package
v0.1.11 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package cache defines a generic read-result cache with per-relation invalidation. A write invalidates the relation it changed (and the database's derived entries, such as views) precisely, rather than relying on blind TTL expiry (Oracle result-cache semantics). Entries are keyed by the physical relation, not the entity, so every path to a table sees its writes.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cache

type Cache[T any] interface {
	Get(ctx context.Context, k Key) (T, bool)
	Set(ctx context.Context, k Key, v T) error
	// Invalidate drops the entries reading relation of database and every
	// derived entry of database; an empty relation drops all of database.
	Invalidate(database, relation string) error
}

Cache is a generic read cache with per-relation invalidation.

type Key

type Key struct {
	Database string
	Relation string
	SQL      string
	Args     string
	Scope    string
}

Key identifies a cached entry: the relation it reads (Relation of Database; empty for data derived from other relations of the database, such as a view), the statement, and Scope, which separates authorization and row-level identities.

type NoopCache

type NoopCache[T any] struct{}

NoopCache is a Cache that stores nothing.

func (NoopCache[T]) Get

func (NoopCache[T]) Get(_ context.Context, _ Key) (T, bool)

Get always misses.

func (NoopCache[T]) Invalidate

func (NoopCache[T]) Invalidate(_, _ string) error

Invalidate is a no-op.

func (NoopCache[T]) Set

func (NoopCache[T]) Set(_ context.Context, _ Key, _ T) error

Set is a no-op.

type TTLCache

type TTLCache[T any] struct {
	// contains filtered or unexported fields
}

TTLCache stores values with a TTL, evaluated lazily on Get. Set removes all expired entries before evicting an arbitrary live entry to stay under the configured cap.

func NewTTLCache

func NewTTLCache[T any](ttl time.Duration, maxSize int) *TTLCache[T]

NewTTLCache returns a TTLCache. maxSize <= 0 uses a safe default capacity.

func (*TTLCache[T]) Get

func (c *TTLCache[T]) Get(_ context.Context, k Key) (T, bool)

Get returns the value if present and unexpired.

func (*TTLCache[T]) Invalidate

func (c *TTLCache[T]) Invalidate(database, relation string) error

Invalidate implements Cache.

func (*TTLCache[T]) Set

func (c *TTLCache[T]) Set(_ context.Context, k Key, v T) error

Set stores a value with the configured TTL, evicting if over maxSize.

Jump to

Keyboard shortcuts

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