public CacheManager() => _cache = new MemoryCache(new MemoryCacheOptions() { Clock = new CacheClock() });
public async void TestDiskChurn() { var path = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}"); Directory.CreateDirectory(path); var store = new PersistentDiskStore(path); var settings = new PersistentCacheOptions() { FreeSpacePercentGoal = 50, MaxCachedBytes = 1000, MaxWriteLogSize = 800, WriteLogFlushIntervalMs = 1, ReadInfoFlushIntervalMs = 1, ShardCount = 1, }; var clock = new CacheClock(); //new FakeClock("2020-05-25"); var cache = new PersistentCache(store, clock, settings); try { await cache.StartAsync(CancellationToken.None); var dataBytes = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (int i = 0; i < 10; i++) { var key = new CacheKey { Key1 = Encoding.UTF8.GetBytes($"file{i}.jpg"), Key2 = Encoding.UTF8.GetBytes("2020-05-25 00:00:00"), Key3 = Encoding.UTF8.GetBytes("?width=200"), }; cache.PutBytesEventually(key, dataBytes, 1); } await cache.FlushWrites(); //Thread.Sleep(50); //clock.AdvanceSeconds(45); Thread.Sleep(2000); await cache.FlushWrites(); for (int i = 0; i < 10; i++) { var key = new CacheKey { Key1 = Encoding.UTF8.GetBytes($"file{i}.jpg"), Key2 = Encoding.UTF8.GetBytes("2020-05-25 00:00:00"), Key3 = Encoding.UTF8.GetBytes("?width=200"), }; using (var stream = await cache.GetStream(key, CancellationToken.None)) { Assert.Equal(0, stream.ReadByte()); Assert.Equal(1, stream.ReadByte()); } } var exceptions = cache.PopExceptions(); foreach (var e in exceptions) { throw e; } await cache.StopAsync(CancellationToken.None); } finally { try { await cache.StopAsync(CancellationToken.None); } finally { Directory.Delete(path, true); } } }