public void GetLastAccessed() { var redisStore = new RedisStore(); var client = new HttpClient(new CachingHandler(redisStore) { InnerHandler = new HttpClientHandler() }); var httpResponseMessage = client.GetAsync(CacheableResource1).Result; CacheItemMetadata metadata = redisStore.GetEarliestAccessedItem("ajax.googleapis.com"); Assert.IsNotNull(metadata); Assert.AreEqual("ajax.googleapis.com", metadata.Domain); Assert.Less(DateTime.Now.Subtract(TimeSpan.FromSeconds(10)), metadata.LastAccessed); }
public CacheItemMetadata GetEarliestAccessedItem() { var cacheItemMetadata = new CacheItemMetadata(); var item = _connection.SortedSets.Range(_databaseId, KeyNames.EarliestAccessed, 0, 0).Result; // TODO!! refactor to do proper async if (item.Length == 0) { return(null); } cacheItemMetadata.Key = item[0].Key; var results = _connection.Hashes.GetValues(_databaseId, item[0].Key.ToBase64()).Result; // TODO!! refactor to do proper async cacheItemMetadata.Size = BitConverter.ToInt64(results[1], 0); cacheItemMetadata.LastAccessed = DateTime.Now; // TODO: this value is not really required. Decide whether deleted cacheItemMetadata.Domain = Encoding.UTF8.GetString(results[2]); return(cacheItemMetadata); }
private bool TryRemove(CacheItemMetadata metadata, bool tellQuotaManager) { var fileName = metadata.EnsureFolderAndGetFileName(_dataRoot); if (File.Exists(fileName)) { File.Delete(fileName); TraceWriter.WriteLine("After delete file {0}", TraceLevel.Verbose, fileName); _database.Cache.DeleteByHash(Convert.ToBase64String(metadata.Key)); TraceWriter.WriteLine("After db update. File name: {0}", TraceLevel.Verbose, fileName); if (tellQuotaManager) { _quotaManager.ItemRemoved(metadata); } return(true); } return(false); }
public CacheItemMetadata GetEarliestAccessedItem() { var cacheItemMetadata = new CacheItemMetadata(); var item = _connection.SortedSets.Range(_databaseId, KeyNames.EarliestAccessed, 0, 0).Result; // TODO!! refactor to do proper async if (item.Length == 0) return null; cacheItemMetadata.Key = item[0].Key; var results = _connection.Hashes.GetValues(_databaseId, item[0].Key.ToBase64()).Result; // TODO!! refactor to do proper async cacheItemMetadata.Size = BitConverter.ToInt64(results[1], 0); cacheItemMetadata.LastAccessed = DateTime.Now; // TODO: this value is not really required. Decide whether deleted cacheItemMetadata.Domain = Encoding.UTF8.GetString(results[2]); return cacheItemMetadata; }
private void RemoveWithoutTellingQuotaManager(CacheItemMetadata metadata) { TryRemove(metadata, false); }
private bool TryRemove(CacheItemMetadata metadata, bool tellQuotaManager) { var fileName = metadata.EnsureFolderAndGetFileName(_dataRoot); if (File.Exists(fileName)) { File.Delete(fileName); TraceWriter.WriteLine("After delete file {0}", TraceLevel.Verbose, fileName); _database.Cache.DeleteByHash(Convert.ToBase64String(metadata.Key)); TraceWriter.WriteLine("After db update. File name: {0}", TraceLevel.Verbose, fileName); if (tellQuotaManager) _quotaManager.ItemRemoved(metadata); return true; } return false; }
public static string EnsureFolderAndGetFileName(this CacheItemMetadata metadata, string dataRoot) { return(EnsureFolderAndGetFileName(metadata.Domain, metadata.Key, dataRoot)); }