public HybridCacheService(HybridCacheOptions options, ILogger <HybridCacheService> logger) { var cacheOptions = new Imazen.HybridCache.HybridCacheOptions(options.DiskCacheDirectory) { AsyncCacheOptions = new AsyncCacheOptions() { MaxQueuedBytes = Math.Max(0, options.QueueSizeLimitInBytes), WriteSynchronouslyWhenQueueFull = true, MoveFileOverwriteFunc = (from, to) => File.Move(from, to, true) }, CleanupManagerOptions = new CleanupManagerOptions() { MaxCacheBytes = Math.Max(0, options.CacheSizeLimitInBytes), MinCleanupBytes = Math.Max(0, options.MinCleanupBytes), MinAgeToDelete = options.MinAgeToDelete.Ticks > 0 ? options.MinAgeToDelete : TimeSpan.Zero, } }; var database = new MetaStore(new MetaStoreOptions(options.DiskCacheDirectory) { Shards = Math.Max(1, options.DatabaseShards), MaxLogFilesPerShard = 3, }, cacheOptions, logger); cache = new Imazen.HybridCache.HybridCache(database, cacheOptions, logger); }
public static IServiceCollection AddImageflowHybridCache(this IServiceCollection services, HybridCacheOptions options) { services.AddSingleton <IStreamCache>((container) => { var logger = container.GetRequiredService <ILogger <HybridCacheService> >(); return(new HybridCacheService(options, logger)); }); services.AddHostedService <HybridCacheHostedServiceProxy>(); return(services); }