--- /dev/null
+// Copyright (c) 2012-2016 The Revel Framework Authors, All rights reserved.
+// Revel Framework source code and usage is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+package cache
+
+import (
+ "strings"
+ "time"
+
+ "github.com/revel/revel"
+)
+
+var cacheLog = revel.RevelLog.New("section", "cache")
+
+func init() {
+ revel.OnAppStart(func() {
+ // Set the default expiration time.
+ defaultExpiration := time.Hour // The default for the default is one hour.
+ if expireStr, found := revel.Config.String("cache.expires"); found {
+ var err error
+ if defaultExpiration, err = time.ParseDuration(expireStr); err != nil {
+ cacheLog.Panic("Could not parse default cache expiration duration " + expireStr + ": " + err.Error())
+ }
+ }
+
+ // make sure you aren't trying to use both memcached and redis
+ if revel.Config.BoolDefault("cache.memcached", false) && revel.Config.BoolDefault("cache.redis", false) {
+ cacheLog.Panic("You've configured both memcached and redis, please only include configuration for one cache!")
+ }
+
+ // Use memcached?
+ if revel.Config.BoolDefault("cache.memcached", false) {
+ hosts := strings.Split(revel.Config.StringDefault("cache.hosts", ""), ",")
+ if len(hosts) == 0 {
+ cacheLog.Panic("Memcache enabled but no memcached hosts specified!")
+ }
+
+ Instance = NewMemcachedCache(hosts, defaultExpiration)
+ return
+ }
+
+ // Use Redis (share same config as memcached)?
+ if revel.Config.BoolDefault("cache.redis", false) {
+ hosts := strings.Split(revel.Config.StringDefault("cache.hosts", ""), ",")
+ if len(hosts) == 0 {
+ cacheLog.Panic("Redis enabled but no Redis hosts specified!")
+ }
+ if len(hosts) > 1 {
+ cacheLog.Panic("Redis currently only supports one host!")
+ }
+ password := revel.Config.StringDefault("cache.redis.password", "")
+ Instance = NewRedisCache(hosts[0], password, defaultExpiration)
+ return
+ }
+
+ // By default, use the in-memory cache.
+ Instance = NewInMemoryCache(defaultExpiration)
+ })
+}