public static async Task <CacheEntity> get(CloudTable cacheTable, string cacheType, string key, TimeSpan?cacheExpiry) { await cacheTable.CreateIfNotExistsAsync(); TimeSpan expiry = cacheExpiry == null ? new TimeSpan(365, 0, 0, 0) : (TimeSpan)cacheExpiry; TableQuery <CacheEntity> rangeQuery = new TableQuery <CacheEntity>().Where( TableQuery.CombineFilters( TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, $"{cacheType}"), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, key) ), TableOperators.And, TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.GreaterThan, DateTime.Now.Subtract(expiry)) )); var cacheFound = await cacheTable.ExecuteQuerySegmentedAsync(rangeQuery, null); if (cacheFound.Results.Count > 0) { CacheEntity entity = cacheFound.Results.ToArray()[0]; return(entity); } else { return(null); } }
public static async Task <bool> put(CloudTable cacheTable, string cacheType, string key, string value, int storeForSeconds = 60) { await cacheTable.CreateIfNotExistsAsync(); try { CacheEntity newEntity = new CacheEntity(cacheType, key, value, storeForSeconds); TableOperation insertCacheOperation = TableOperation.InsertOrReplace(newEntity); await cacheTable.ExecuteAsync(insertCacheOperation); } catch { return(false); } return(true); }
public static async Task <bool> clear(CloudTable cacheTable, string cacheType, string key) { try { int length = key.Length - 1; var lastChar = key[length]; var nextLastChar = (char)(lastChar + 1); var startsWithEndPattern = key.Substring(0, length) + nextLastChar; TableQuery <CacheEntity> rangeQuery = new TableQuery <CacheEntity>().Where( TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, $"{cacheType}"), TableOperators.And, TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThanOrEqual, key), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThan, startsWithEndPattern) ))); var cacheFound = await cacheTable.ExecuteQuerySegmentedAsync(rangeQuery, null); if (cacheFound.Results.Count > 0) { CacheEntity[] cacheEntities = cacheFound.Results.ToArray(); for (int x = 0; x < cacheEntities.Length; x++) { CacheEntity entity = cacheEntities[x]; TableOperation deleteCacheOperation = TableOperation.Delete(entity); await cacheTable.ExecuteAsync(deleteCacheOperation); } return(true); } else { return(false); } } catch { return(false); } }