private async Task <bool> CreateUpdateItem(string region, object item) { var mongoCollection = MongoUtilities.InitializeMongoDatabase(region, _mongoConnectionString); Task.Factory.StartNew(() => RemoveExpired(region)); var results = await Task.Factory.StartNew(() => mongoCollection.Save(item)); return(await MongoUtilities.VerifyReturnMessage(results)); }
/// <summary> /// get the count of items in a cache region /// </summary> /// <param name="region"></param> /// <returns></returns> public override async Task <long> Count(string region) { if (!_isEnabled) { return(0); } var mongoCollection = MongoUtilities.InitializeMongoDatabase(region, _mongoConnectionString); return(await Task.Factory.StartNew(() => mongoCollection.Count())); }
/// <summary> /// removes an item from cache region /// </summary> /// <param name="cacheKey"></param> /// <param name="region"></param> /// <returns></returns> public override async Task <bool> Remove(object cacheKey, string region) { if (!_isEnabled) { return(true); } var mongoCollection = MongoUtilities.InitializeMongoDatabase(region, _mongoConnectionString); var query = Query.EQ("CacheKey", cacheKey.ToString()); var results = await Task.Factory.StartNew(() => mongoCollection.Remove(query)); return(await MongoUtilities.VerifyReturnMessage(results)); }
private async Task <dynamic> GetItem(object cacheKey, string region) { var item = await Task.Factory.StartNew(() => MongoUtilities.InitializeMongoDatabase(region, _mongoConnectionString).AsQueryable <dynamic>() .AsParallel() .FirstOrDefault(x => x.CacheKey.Equals(cacheKey.ToString(), StringComparison.CurrentCultureIgnoreCase) && x.Expires > DateTime.UtcNow)); if (item == null) { return(null); } // todo can be removed after dec if (GlobalUtilities.DoesPropertyExist(item, "AllowSliddingTime") || GlobalUtilities.DoesPropertyExist(item.CacheOptions.AllowSliddingTime, "AllowSliddingTime")) { await UpdateSliddingTime(region, item); } return(item); }
/// <summary> /// remove expired items by region /// </summary> /// <param name="region"></param> /// <returns></returns> public async override Task <bool> RemoveExpired(string region) { if (!_isEnabled) { return(true); } var mongoCollection = MongoUtilities.InitializeMongoDatabase(region, _mongoConnectionString); var item = await Task.Factory.StartNew(() => mongoCollection.AsQueryable <CacheItem>().AsParallel().Where(x => x.Expires < DateTime.UtcNow).Select(x => x.Id)); var query2 = Query.In("_id", new BsonArray(item)); mongoCollection.Remove(query2); if (item.Any()) { // todo add logging } return(true); }