NewProvider creates a new cache provider with the given config.
(cfg *Config, logger log.Logger)
| 27 | |
| 28 | // NewProvider creates a new cache provider with the given config. |
| 29 | func NewProvider(cfg *Config, logger log.Logger) (cache.Provider, error) { |
| 30 | p := &provider{ |
| 31 | caches: map[cache.Role]cache.Cache{}, |
| 32 | } |
| 33 | |
| 34 | err := cfg.Validate() |
| 35 | if err != nil { |
| 36 | return nil, fmt.Errorf("invalid cache config: %w", err) |
| 37 | } |
| 38 | |
| 39 | statMemcached.Set(0) |
| 40 | statRedis.Set(0) |
| 41 | |
| 42 | for _, cacheCfg := range cfg.Caches { |
| 43 | var c cache.Cache |
| 44 | |
| 45 | if cacheCfg.MemcachedConfig != nil { |
| 46 | level.Info(logger).Log("msg", "configuring memcached client", "roles", cacheCfg.Name()) |
| 47 | |
| 48 | statMemcached.Add(1) |
| 49 | c = memcached.NewClient(cacheCfg.MemcachedConfig, cfg.Background, cacheCfg.Name(), logger) |
| 50 | } |
| 51 | |
| 52 | if cacheCfg.RedisConfig != nil { |
| 53 | level.Info(logger).Log("msg", "configuring redis client", "roles", cacheCfg.Name()) |
| 54 | |
| 55 | statRedis.Add(1) |
| 56 | c = redis.NewClient(cacheCfg.RedisConfig, cfg.Background, cacheCfg.Name(), logger) |
| 57 | } |
| 58 | |
| 59 | // add this cache for all claimed roles |
| 60 | for _, role := range cacheCfg.Role { |
| 61 | p.caches[role] = c |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | p.Service = services.NewIdleService(p.starting, p.stopping) |
| 66 | return p, nil |
| 67 | } |
| 68 | |
| 69 | // CacheFor is used to retrieve a cache for a given role. |
| 70 | func (p *provider) CacheFor(role cache.Role) cache.Cache { |