1 module hunt.framework.provider.CacheServiceProvider; 2 3 import hunt.framework.provider.ServiceProvider; 4 import hunt.framework.config.ApplicationConfig; 5 6 import hunt.cache.CacheFactory; 7 import hunt.cache.Cache; 8 import hunt.cache.CacheOptions; 9 import hunt.cache.Defined; 10 import hunt.logging.ConsoleLogger; 11 import hunt.redis.RedisPoolConfig; 12 13 import hunt.framework.Init; 14 15 import poodinis; 16 17 /** 18 * 19 */ 20 class CacheServiceProvider : ServiceProvider { 21 22 override void register() { 23 container.register!(Cache)(() { 24 ApplicationConfig config = container.resolve!ApplicationConfig(); 25 ApplicationConfig.CacheConf cacheConf = config.cache; 26 ApplicationConfig.RedisConf redisConf = config.redis; 27 auto redisPoolOptions = redisConf.pool; 28 29 CacheOptions options = new CacheOptions(); 30 options.adapter = cacheConf.adapter; 31 options.prefix = cacheConf.prefix; 32 options.useSecondLevelCache = cacheConf.useSecondLevelCache; 33 options.maxEntriesLocalHeap = cacheConf.maxEntriesLocalHeap; 34 options.eternal = cacheConf.eternal; 35 options.timeToIdleSeconds = cacheConf.timeToIdleSeconds; 36 options.timeToLiveSeconds = cacheConf.timeToLiveSeconds; 37 options.overflowToDisk = cacheConf.overflowToDisk; 38 options.diskPersistent = cacheConf.diskPersistent; 39 options.diskExpiryThreadIntervalSeconds = cacheConf.diskExpiryThreadIntervalSeconds; 40 options.maxEntriesLocalDisk = cacheConf.maxEntriesLocalDisk; 41 42 if(cacheConf.adapter == AdapterType.REDIS || cacheConf.adapter == AdapterType.REDIS_CLUSTER) { 43 44 if(!redisConf.enabled) { 45 throw new Exception("The Redis is disabled."); 46 } 47 48 RedisPoolConfig poolConfig = new RedisPoolConfig(); 49 poolConfig.host = redisConf.host; 50 poolConfig.port = cast(int) redisConf.port; 51 poolConfig.password = redisConf.password; 52 poolConfig.database = cast(int) redisConf.database; 53 poolConfig.soTimeout = cast(int) redisPoolOptions.idleTimeout; 54 poolConfig.connectionTimeout = redisConf.timeout; 55 poolConfig.setMaxTotal(redisPoolOptions.maxPoolSize); 56 poolConfig.setBlockWhenExhausted(redisPoolOptions.blockOnExhausted); 57 poolConfig.setMaxWaitMillis(redisPoolOptions.waitTimeout); 58 59 version(HUNT_DEBUG) infof("Initializing RedisPool: %s", poolConfig.toString()); 60 61 options.redisPool = poolConfig; 62 options.redisCluster.nodes = redisConf.cluster.nodes; 63 } 64 65 return CacheFactory.create(options); 66 }).singleInstance(); 67 } 68 }