Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
            }
        }