Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Cache ¶
type Cache struct {
// contains filtered or unexported fields
}
Cache implements a lazy initializing cache. A cache entry is created the first time a value is accessed (via Get or MustGet) by invoking the provided Initializer. If the Initializer returns an error then the entry will not be added.
func New ¶
func New(name string, initializer EntryInitializer, opts ...options.Opt) *Cache
New creates a new lazy cache.
- name is the name of the cache and is only used for debugging purpose
- initializer is invoked the first time an entry is being cached
- opts are options for the cache. If any lazyref option is passed then a lazy reference is created for each of the cache entries to hold the actual value. This makes it possible to have expiring values and values that proactively refresh.
func NewWithData ¶
func NewWithData(name string, initializer EntryInitializerWithData, opts ...options.Opt) *Cache
NewWithData creates a new lazy cache. The provided initializer accepts optional data that is passed in from Get().
- name is the name of the cache and is only used for debugging purpose
- initializer is invoked the first time an entry is being cached
- opts are options for the cache. If any lazyref option is passed then a lazy reference is created for each of the cache entries to hold the actual value. This makes it possible to have expiring values and values that proactively refresh.
func (*Cache) Close ¶
func (c *Cache) Close()
Close does the following: - calls Close on all values that implement a Close() function - deletes all entries from the cache - prevents further calls to the cache
func (*Cache) Delete ¶
Delete does the following: - calls Close on all values that implement a Close() function - deletes key from the cache
func (*Cache) DeleteAll ¶
func (c *Cache) DeleteAll()
DeleteAll does the following: - calls Close on all values that implement a Close() function - deletes all entries from the cache
func (*Cache) Get ¶
Get returns the value for the given key. If the key doesn't exist then the initializer is invoked to create the value, and the key is inserted. If the initializer returns an error then the key is removed from the cache.
Example ¶
cache := New("Example_Cache", func(key Key) (interface{}, error) { if key.String() == "error" { return nil, fmt.Errorf("some error") } return fmt.Sprintf("Value_for_key_%s", key), nil }) defer cache.Close() value, err := cache.Get(NewStringKey("Key1")) if err != nil { fmt.Printf("Error returned: %s\n", err) } fmt.Println(value) value, err = cache.Get(NewStringKey("error")) if err != nil { fmt.Printf("Error returned: %s\n", err) } fmt.Println(value)
Output:
Example (Expiring) ¶
cache := New("Example_Expiring_Cache", func(key Key) (interface{}, error) { if key.String() == "error" { return nil, fmt.Errorf("some error") } return fmt.Sprintf("Value_for_key_%s", key), nil }, lazyref.WithAbsoluteExpiration(time.Second), lazyref.WithFinalizer(func(expiredValue interface{}) { fmt.Printf("Expired value: %s\n", expiredValue) }), ) defer cache.Close() value, err := cache.Get(NewStringKey("Key1")) if err != nil { fmt.Printf("Error returned: %s\n", err) } else { fmt.Print(value) } _, err = cache.Get(NewStringKey("error")) if err != nil { fmt.Printf("Error returned: %s\n", err) }
Output:
Example (ExpiringWithData) ¶
cache := NewWithData("Example_Expiring_Cache", func(key Key, data interface{}) (interface{}, error) { return fmt.Sprintf("Value_for_%s_%d", key, data.(int)), nil }, lazyref.WithAbsoluteExpiration(20*time.Millisecond), ) defer cache.Close() for i := 0; i < 5; i++ { value, err := cache.Get(NewStringKey("Key"), i) if err != nil { fmt.Printf("Error returned: %s", err) } else { fmt.Print(value) } time.Sleep(15 * time.Millisecond) }
Output:
func (*Cache) MustGet ¶
MustGet returns the value for the given key. If the key doesn't exist then the initializer is invoked to create the value and the key is inserted. If an error is returned during initialization of the value then this function will panic.
Example ¶
cache := New("Example_Cache", func(key Key) (interface{}, error) { return fmt.Sprintf("Value_for_key_%s", key), nil }) defer cache.Close() key := NewStringKey("Key1") fmt.Println(cache.MustGet(key))
Output: Value_for_key_Key1
type EntryInitializer ¶
EntryInitializer creates a cache value for the given key
type EntryInitializerWithData ¶
EntryInitializerWithData creates a cache value for the given key and the additional data passed in from Get(). With expiring cache entries, the initializer is called with the same key, but the latest data is passed from the Get() call that triggered the data to be cached/re-cached.