// ___ ____ ___ ___ // \ \ / / | _ | __| \ \ / / || | __ || || _ | // \ \/ / |___ | |__ \ \/ / || |___ || ||___| // \ / | _ | _ | \ / || __ | || ||\\ // \/ |___ |___ | \/ || ____| || || \\ // // Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License // Repo: https://git.pbiernat.dev/golang/vegvisir // Package cache whole cache functionality package cache import ( "git.pbiernat.dev/golang/vegvisir/pkg/config" "log" ) const ( typeRedis = "redis" typeMemory = "memory" ) // Datastore interface type Datastore interface { SetKey(string, interface{}, int) error GetKey(string) (interface{}, error) IsConnected() bool } // GetDatastore function func GetDatastore(cfg config.Cache) *Datastore { var datastore Datastore log.Printf("Cache datastore type: %s", cfg.Type) if cfg.Type == typeRedis { datastore = NewRedisDatastore(cfg.Host, cfg.Password, cfg.Database, cfg.Port) } else { datastore = NewMemoryDatastore() } // fail-safe switch to memory datasource if !datastore.IsConnected() { log.Println("Cache server is not responding, switching to memory cache.") datastore = NewMemoryDatastore() } return &datastore }