Documentation
¶
Index ¶
- func HashKey(key string) string
- type BackgroundConfig
- type Cache
- type Config
- type FifoCache
- func (c *FifoCache) Fetch(ctx context.Context, keys []string) (found []string, bufs [][]byte, missing []string)
- func (c *FifoCache) Get(ctx context.Context, key string) (interface{}, bool)
- func (c *FifoCache) Put(ctx context.Context, keys []string, values []interface{})
- func (c *FifoCache) Stop() error
- func (c *FifoCache) Store(ctx context.Context, keys []string, bufs [][]byte)
- type FifoCacheConfig
- type Memcached
- type MemcachedClient
- type MemcachedClientConfig
- type MemcachedConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type BackgroundConfig ¶
type BackgroundConfig struct {
WriteBackGoroutines int `yaml:"writeback_goroutines,omitempty"`
WriteBackBuffer int `yaml:"writeback_buffer,omitempty"`
}
BackgroundConfig is config for a Background Cache.
func (*BackgroundConfig) RegisterFlagsWithPrefix ¶
func (cfg *BackgroundConfig) RegisterFlagsWithPrefix(prefix string, description string, f *flag.FlagSet)
RegisterFlagsWithPrefix adds the flags required to config this to the given FlagSet
type Cache ¶
type Cache interface {
Store(ctx context.Context, key []string, buf [][]byte)
Fetch(ctx context.Context, keys []string) (found []string, bufs [][]byte, missing []string)
Stop() error
}
Cache byte arrays by key.
NB we intentionally do not return errors in this interface - caching is best effort by definition. We found that when these methods did return errors, the caller would just log them - so its easier for implementation to do that. Whatsmore, we found partially successful Fetchs were often treated as failed when they returned an error.
func Instrument ¶
Instrument returns an instrumented cache.
func NewBackground ¶
func NewBackground(name string, cfg BackgroundConfig, cache Cache) Cache
NewBackground returns a new Cache that does stores on background goroutines.
type Config ¶
type Config struct {
EnableFifoCache bool `yaml:"enable_fifocache,omitempty"`
DefaultValidity time.Duration `yaml:"defaul_validity,omitempty"`
Background BackgroundConfig `yaml:"background,omitempty"`
Memcache MemcachedConfig `yaml:"memcached,omitempty"`
MemcacheClient MemcachedClientConfig `yaml:"memcached_client,omitempty"`
Fifocache FifoCacheConfig `yaml:"fifocache,omitempty"`
// This is to name the cache metrics properly.
Prefix string `yaml:"prefix,omitempty"`
// For tests to inject specific implementations.
Cache Cache
}
Config for building Caches.
type FifoCache ¶
type FifoCache struct {
// contains filtered or unexported fields
}
FifoCache is a simple string -> interface{} cache which uses a fifo slide to manage evictions. O(1) inserts and updates, O(1) gets.
func NewFifoCache ¶
func NewFifoCache(name string, cfg FifoCacheConfig) *FifoCache
NewFifoCache returns a new initialised FifoCache of size. TODO(bwplotka): Fix metrics, get them out of globals, separate or allow prefixing.
func (*FifoCache) Fetch ¶
func (c *FifoCache) Fetch(ctx context.Context, keys []string) (found []string, bufs [][]byte, missing []string)
Fetch implements Cache.
func (*FifoCache) Get ¶
Get returns the stored value against the key and when the key was last updated.
type FifoCacheConfig ¶
type FifoCacheConfig struct {
Size int `yaml:"size,omitempty"`
Validity time.Duration `yaml:"validity,omitempty"`
}
FifoCacheConfig holds config for the FifoCache.
func (*FifoCacheConfig) RegisterFlagsWithPrefix ¶
func (cfg *FifoCacheConfig) RegisterFlagsWithPrefix(prefix, description string, f *flag.FlagSet)
RegisterFlagsWithPrefix adds the flags required to config this to the given FlagSet
type Memcached ¶
type Memcached struct {
// contains filtered or unexported fields
}
Memcached type caches chunks in memcached
func NewMemcached ¶
func NewMemcached(cfg MemcachedConfig, client MemcachedClient, name string) *Memcached
NewMemcached makes a new Memcache. TODO(bwplotka): Fix metrics, get them out of globals, separate or allow prefixing. TODO(bwplotka): Remove globals & util packages from cache package entirely (e.g util.Logger).
type MemcachedClient ¶
type MemcachedClient interface {
GetMulti(keys []string) (map[string]*memcache.Item, error)
Set(item *memcache.Item) error
}
MemcachedClient interface exists for mocking memcacheClient.
func NewMemcachedClient ¶
func NewMemcachedClient(cfg MemcachedClientConfig) MemcachedClient
NewMemcachedClient creates a new MemcacheClient that gets its server list from SRV and updates the server list on a regular basis.
type MemcachedClientConfig ¶
type MemcachedClientConfig struct {
Host string `yaml:"host,omitempty"`
Service string `yaml:"service,omitempty"`
Timeout time.Duration `yaml:"timeout,omitempty"`
MaxIdleConns int `yaml:"max_idle_conns,omitempty"`
UpdateInterval time.Duration `yaml:"update_interval,omitempty"`
}
MemcachedClientConfig defines how a MemcachedClient should be constructed.
func (*MemcachedClientConfig) RegisterFlagsWithPrefix ¶
func (cfg *MemcachedClientConfig) RegisterFlagsWithPrefix(prefix, description string, f *flag.FlagSet)
RegisterFlagsWithPrefix adds the flags required to config this to the given FlagSet
type MemcachedConfig ¶
type MemcachedConfig struct {
Expiration time.Duration `yaml:"expiration,omitempty"`
BatchSize int `yaml:"batch_size,omitempty"`
Parallelism int `yaml:"parallelism,omitempty"`
}
MemcachedConfig is config to make a Memcached
func (*MemcachedConfig) RegisterFlagsWithPrefix ¶
func (cfg *MemcachedConfig) RegisterFlagsWithPrefix(prefix, description string, f *flag.FlagSet)
RegisterFlagsWithPrefix adds the flags required to config this to the given FlagSet