Documentation
¶
Index ¶
- type Config
- type Querier
- type Simple
- func (s *Simple) Close() error
- func (s *Simple) Delete(key string)
- func (s *Simple) GC()
- func (s *Simple) Load(key string) (interface{}, bool)
- func (s *Simple) Query(key string) (interface{}, error)
- func (s *Simple) Range(callback func(key string, value *TimedValue))
- func (s *Simple) Store(key string, value interface{})
- type TimedValue
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// GoodStaleDuration specifies how long a value remains fresh in the data map. A zero-value
// time.Duration value implies the value never stales, and updates will only be fetched
// after the value expires.
GoodStaleDuration time.Duration
// GoodExpiryDuration specifies how long a value is allowed to be served from the data
// map. A zero-value time.Duration value implies the value never expires and can always be
// served.
GoodExpiryDuration time.Duration
// BadStaleDuration specifies how long an error result remains fresh in the data map. A
// zero-value time.Duration value implies that the error result is stale as soon as it's
// inserted into the data map, and Querying the key again will trigger an asynchronous
// lookup of the key to try to replace the error value with a good value.
BadStaleDuration time.Duration
// BadExpiryDuration specifies how long an error result is allowed to be served from the
// data map. A zero-value time.Duration value implies the value never expires and can always
// be served.
BadExpiryDuration time.Duration
// Lookup specifies the user callback function to invoke when looking up the value to be
// associated with a stale key, expired key, or a key that has yet to be loaded into the
// data map.
Lookup func(string) (interface{}, error)
// GCPeriodicity specifies how frequently the data map purges expired entries.
GCPeriodicity time.Duration
}
Config specifies the configuration parameters for a Swarm instance.
type Querier ¶
Querier specifies a type that provides memoizing the results of expensive function calls and returning the cached result when the same input key occurs again.
type Simple ¶
type Simple struct {
// contains filtered or unexported fields
}
Simple memoizes responses from a Querier, providing very low-level time-based control of how values go stale or expire. When new values are stored in the Simple instance, if they are TimedValue (or a pointer to a TimedValue) items the existing Stale and Expiry values are used for the newly inserted value. If the new value is not a TimedValue struct or pointer to a TimedValue struct, then the Simple instance wraps the value in a TimedValue struct, and adds the Simple instance's stale and expiry durations to the current time and stores the resultant TimedValue struct.
func NewSimple ¶
NewSimple returns Swarm that attempts to respond to Query methods by consulting its TTL cache, then directing the call to the underlying Querier if a valid response is not stored. Note this function accepts a pointer so creating an instance with defaults can be done by passing a nil value rather than a pointer to a Config instance.
simple, err := goswarm.NewSimple(&goswarm.Simple{
GoodStaleDuration: time.Minute,
GoodExpiryDuration: 24 * time.Hour,
BadStaleDuration: time.Minute,
BadExpiryDuration: 5 * time.Minute,
Lookup: func(key string) (interface{}, error) {
// TODO: do slow calculation or make a network call
result := key // example
return result, nil
},
})
if err != nil {
log.Fatal(err)
}
defer func() { _ = simple.Close() }()
func (*Simple) GC ¶
func (s *Simple) GC()
GC examines all key value pairs in the Simple swarm and deletes those whose values have expired.
func (*Simple) Load ¶
Load returns the value associated with the specified key, and a boolean value indicating whether or not the key was found in the map.
func (*Simple) Query ¶
Query loads the value associated with the specified key from the data map. When a stale value is found on Query, an asynchronous lookup of a new value is triggered, then the current value is returned from the data map. When an expired value is found on Query, a synchronous lookup of a new value is triggered, then the new value is stored and returned.
func (*Simple) Range ¶ added in v1.1.0
func (s *Simple) Range(callback func(key string, value *TimedValue))
Range invokes specified callback function for each non-expired key in the data map. Each key-value pair is independently locked until the callback function invoked with the specified key returns. The callback function is called asynchronously while searching for key-value pairs, but this method does not return until all callback functions have returned.
type TimedValue ¶
TimedValue couples a value with both a stale and expiry times for the value. The time.Time zero value for stale implies the value never stales. The time.Time zero value for expiry implies the value never expires. Neither, either, and both of these may be set to the zero value or an actual time value.