asynccache

package
v0.0.0-...-197ded9 Latest Latest
Warning

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

Go to latest
Published: May 7, 2024 License: Apache-2.0 Imports: 6 Imported by: 0

README

asynccache

Introduction

asynccache fetches and updates the latest data periodically and supports expire a key if unused for a period.

The functions it provides is listed below:

type AsyncCache interface {
	// SetDefault sets the default value of given key if it is new to the cache.
	// It is useful for cache warming up.
	// Param val should not be nil.
	SetDefault(key string, val interface{}) (exist bool)

	// Get tries to fetch a value corresponding to the given key from the cache.
	// If error occurs during the first time fetching, it will be cached until the
	// sequential fetching triggered by the refresh goroutine succeed.
	Get(key string) (val interface{}, err error)

	// GetOrSet tries to fetch a value corresponding to the given key from the cache.
	// If the key is not yet cached or error occurs, the default value will be set.
	GetOrSet(key string, defaultVal interface{}) (val interface{})

	// Dump dumps all cache entries.
	// This will not cause expire to refresh.
	Dump() map[string]interface{}

	// DeleteIf deletes cached entries that match the `shouldDelete` predicate.
	DeleteIf(shouldDelete func(key string) bool)

	// Close closes the async cache.
	// This should be called when the cache is no longer needed, or may lead to resource leak.
	Close()
}

Example

var key, ret = "key", "ret"
opt := Options{
    RefreshDuration: time.Second,
    IsSame: func(key string, oldData, newData interface{}) bool {
        return false
    },
    Fetcher: func(key string) (interface{}, error) {
        return ret, nil
    },
}
c := NewAsyncCache(opt)

v, err := c.Get(key)
assert.NoError(err)
assert.Equal(v.(string), ret)

time.Sleep(time.Second / 2)
ret = "change"
v, err = c.Get(key)
assert.NoError(err)
assert.NotEqual(v.(string), ret)

time.Sleep(time.Second)
v, err = c.Get(key)
assert.NoError(err)
assert.Equal(v.(string), ret)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AsyncCache

type AsyncCache interface {
	// SetDefault sets the default value of given key if it is new to the cache.
	// It is useful for cache warming up.
	// Param val should not be nil.
	SetDefault(key string, val interface{}) (exist bool)

	// Get tries to fetch a value corresponding to the given key from the cache.
	// If error occurs during the first time fetching, it will be cached until the
	// sequential fetching triggered by the refresh goroutine succeed.
	Get(key string) (val interface{}, err error)

	// GetOrSet tries to fetch a value corresponding to the given key from the cache.
	// If the key is not yet cached or error occurs, the default value will be set.
	GetOrSet(key string, defaultVal interface{}) (val interface{})

	// Dump dumps all cache entries.
	// This will not cause expire to refresh.
	Dump() map[string]interface{}

	// DeleteIf deletes cached entries that match the `shouldDelete` predicate.
	DeleteIf(shouldDelete func(key string) bool)

	// Close closes the async cache.
	// This should be called when the cache is no longer needed, or may lead to resource leak.
	Close()
}

AsyncCache .

func NewAsyncCache

func NewAsyncCache(opt Options) AsyncCache

NewAsyncCache creates an AsyncCache.

type Error

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

Error is an atomic type-safe wrapper around Value for errors

func (*Error) Load

func (e *Error) Load() error

Load atomically loads the wrapped error

func (*Error) Store

func (e *Error) Store(err error)

Store atomically stores error. NOTE: a holder object is allocated on each Store call.

type Options

type Options struct {
	RefreshDuration time.Duration
	Fetcher         func(key string) (interface{}, error)

	// If EnableExpire is true, ExpireDuration MUST be set.
	EnableExpire   bool
	ExpireDuration time.Duration

	ErrorHandler  func(key string, err error)
	ChangeHandler func(key string, oldData, newData interface{})
	DeleteHandler func(key string, oldData interface{})

	IsSame     func(key string, oldData, newData interface{}) bool
	ErrLogFunc func(str string)
}

Options controls the behavior of AsyncCache.

Jump to

Keyboard shortcuts

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