New creates a new Cache using Config.
(cfg Config, reg prometheus.Registerer, logger log.Logger)
| 62 | |
| 63 | // New creates a new Cache using Config. |
| 64 | func New(cfg Config, reg prometheus.Registerer, logger log.Logger) (Cache, error) { |
| 65 | if cfg.Cache != nil { |
| 66 | return cfg.Cache, nil |
| 67 | } |
| 68 | |
| 69 | caches := []Cache{} |
| 70 | |
| 71 | if cfg.EnableFifoCache { |
| 72 | if cfg.Fifocache.Validity == 0 && cfg.DefaultValidity != 0 { |
| 73 | cfg.Fifocache.Validity = cfg.DefaultValidity |
| 74 | } |
| 75 | |
| 76 | if cache := NewFifoCache(cfg.Prefix+"fifocache", cfg.Fifocache, reg, logger); cache != nil { |
| 77 | caches = append(caches, Instrument(cfg.Prefix+"fifocache", cache, reg)) |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | if (cfg.MemcacheClient.Host != "" || cfg.MemcacheClient.Addresses != "") && cfg.Redis.Endpoint != "" { |
| 82 | return nil, errors.New("use of multiple cache storage systems is not supported") |
| 83 | } |
| 84 | |
| 85 | if cfg.MemcacheClient.Host != "" || cfg.MemcacheClient.Addresses != "" { |
| 86 | if cfg.Memcache.Expiration == 0 && cfg.DefaultValidity != 0 { |
| 87 | cfg.Memcache.Expiration = cfg.DefaultValidity |
| 88 | } |
| 89 | |
| 90 | client := NewMemcachedClient(cfg.MemcacheClient, cfg.Prefix, reg, logger) |
| 91 | cache := NewMemcached(cfg.Memcache, client, cfg.Prefix, reg, logger) |
| 92 | |
| 93 | cacheName := cfg.Prefix + "memcache" |
| 94 | caches = append(caches, NewBackground(cacheName, cfg.Background, Instrument(cacheName, cache, reg), reg)) |
| 95 | } |
| 96 | |
| 97 | if cfg.Redis.Endpoint != "" { |
| 98 | if cfg.Redis.Expiration == 0 && cfg.DefaultValidity != 0 { |
| 99 | cfg.Redis.Expiration = cfg.DefaultValidity |
| 100 | } |
| 101 | cacheName := cfg.Prefix + "redis" |
| 102 | cache := NewRedisCache(cacheName, NewRedisClient(&cfg.Redis), reg, logger) |
| 103 | caches = append(caches, NewBackground(cacheName, cfg.Background, Instrument(cacheName, cache, reg), reg)) |
| 104 | } |
| 105 | |
| 106 | cache := NewTiered(caches) |
| 107 | if len(caches) > 1 { |
| 108 | cache = Instrument(cfg.Prefix+"tiered", cache, reg) |
| 109 | } |
| 110 | return cache, nil |
| 111 | } |
no test coverage detected