public void Insert(object value, string key, CachePeriod cachePeriod) { Cache.Add(new CacheItem(key, value), new CacheItemPolicy { AbsoluteExpiration = new DateTimeOffset(cachePeriod.ToExpirationDate()) }); }
private User GetUserCached(JObject json, bool clearCache = false) { var userGuid = json["USERGUID"].Value <string>(); var cacheKey = "user" + userGuid; if (clearCache) { CacheClient.Default.Remove(cacheKey); } return(CacheClient.Default.GetOrAdd <User>(cacheKey, CachePeriod.ForMinutes(5), () => { var user = UserService.GetUserByGuid(userGuid); if (user == null) { return null; } user.Tags = FeedService.GetTags(user.FavoriteTagIds); user.FavoriteTagIds = user.Tags.Select(t => t.Id).ToList(); if (user.FavoriteTagIds.Count > 0) { var likedTagIds = FeedService.GetTagsThatUserLikes(user.Id); user.FavoriteTagIds.AddRange(likedTagIds); user.FavoriteTagIds = user.FavoriteTagIds.Distinct().Where(t => !user.IgnoredTagIds.Contains(t)).ToList(); } user.IgnoredTags = FeedService.GetTags(user.IgnoredTagIds); user.MyFeeds = UserService.GetUserFeeds(user.Id); user.Folders = UserService.GetUserFolders(user.Id); return user; })); }
public User GetUserCached(string id, Action <User> afterLoad) { return(CacheClient.Default.GetOrAdd("user" + id, CachePeriod.ForMinutes(15), () => { var user = GetUser(int.Parse(id)); afterLoad?.Invoke(user); return user; })); }
public void Insert(object value, string key, CachePeriod cachePeriod) { try { string fileName = CacheDirectory + "//" + key + cachePeriod.GetKey() + " " + cachePeriod.ToExpirationDateString(); if (value is IList list && list.Count > ChunkSize) { var tempList = new List <object>(); foreach (var t in list) { tempList.Add(t); } var counter = 0; while (tempList.Count > 0) { counter++; var chunk = new List <object>(); for (int i = 0; i < tempList.Count; i++) { if (i >= ChunkSize) { break; } var item = tempList[i]; chunk.Add(item); } foreach (var item in chunk) { tempList.Remove(item); } File.WriteAllText(fileName + FileExtension + counter, chunk.ToJson()); } } else { File.WriteAllText(fileName + FileExtension, value.ToJson()); } }
public T GetOrAdd <T>(string key, CachePeriod cachePeriod, Func <T> GetItemsFunc) { lock (objLock) { var items = GetFromFile <T>(key); if (IsDefault(items)) { items = GetItemsFunc(); if (!IsDefault(items)) { Insert(items, key, cachePeriod); } } return(items); } }
public bool IsProCached(CachePeriod cachePeriod, User user) { if (user == null) { return(false); } var payments = CacheClient.Default.GetOrAdd <List <Payment> >("paymentsfor" + user.Id, cachePeriod, () => GetPayments(user.Id)); if (payments == null) { return(false); } return(GetProExpirationDateForPayments(payments) > DateTime.Now); }
public T GetOrAdd <T>(string key, CachePeriod cachePeriod, Func <T> getItemsFunc) { if (cachePeriod == null) { return(getItemsFunc()); } var items = (T)Cache.Get(key); if (IsDefault(items)) { items = getItemsFunc(); if (!IsDefault(items)) { Insert(items, key, cachePeriod); } } return(items); }
public void Parse(int id) { var lFeed = FeedService.GetFeed(id); if (lFeed == null) { return; } var rFeed = FeedService.GetRemoteFeed(lFeed.Url); if (rFeed == null) { lFeed.Updated = DateTime.Now; FeedService.UpdateFeed(lFeed); return; } lFeed.Articles = FeedService.GetArticles(lFeed.Id); var lTags = CacheClient.Default.GetOrAdd <List <Tag> > ("parsingLocalTags", CachePeriod.ForMinutes(15), () => FeedService.GetTagsByArticlesCount(100)); foreach (var rArticle in rFeed.Articles) { rArticle.Tags = GetArticleTags(rArticle, lTags); try { var lArticle = lFeed.Articles.Find(le => le.Name == rArticle.Name); if (lArticle == null) { rArticle.FeedId = lFeed.Id; rArticle.LikesCount = Facebook.GetNumberOfLikes(rArticle.Url) + Twitter.GetNumberOfTweets(rArticle.Url) + LinkedIn.GetNumberOfShares(rArticle.Url) + Google.GetNumberOfShares(rArticle.Url) + Reddit.GetNumberOfVotes(rArticle.Url); rArticle.Tags = GetArticleTags(rArticle, lTags); rArticle.Id = FeedService.InsertArticle(rArticle); rArticle.Feed = lFeed; LuceneSearch.AddUpdateIndex(rArticle); } } catch (Exception ex) { Mail.SendMeAnEmail("Error in insert article", "FeedId: " + lFeed.Id + " " + ex.ToString()); } } //validation not to import single article more than once var lArticles = FeedService.GetArticles(lFeed.Id); foreach (var rArticle in rFeed.Articles) { var lArticle = lArticles.Find(le => le.Name == rArticle.Name); if (lArticle == null) { //we have a problem Mail.SendMeAnEmail("Parse feed multiple articles will be inserted", "Local feedId: " + lFeed.Id); } } lFeed.Updated = DateTime.Now; FeedService.UpdateFeed(lFeed); }
public void Parse(Feed lFeed) { try { lFeed.Updated = DateTime.Now; var rFeed = FeedService.GetRemoteFeed(lFeed); if (rFeed == null) { return; } if (rFeed.Name != lFeed.Name || rFeed.Description != lFeed.Description || rFeed.SiteUrl != lFeed.SiteUrl) { lFeed.Name = rFeed.Name; lFeed.Description = rFeed.Description; lFeed.SiteUrl = rFeed.SiteUrl; FeedService.UpdateFeed(lFeed); } lFeed.Articles = FeedService.GetArticlesWithoutBody(lFeed.Id); var lTags = CacheClient.Default.GetOrAdd("parsingLocalTags", CachePeriod.ForMinutes(15), () => FeedService.GetTagsWithArticlesCountGreaterThan(0)); var uniqueArticles = rFeed.Articles.GroupBy(a => a.Url).Select(a => a.First()).ToList(); foreach (var rArticle in uniqueArticles) { try { if (!lFeed.Public && ( rArticle.Published > DateTime.MinValue && rArticle.Published <= DateTime.Now.AddYears(-1)) ) { continue; } var lArticle = lFeed.Articles.Find(le => le.Url == rArticle.Url); if (lArticle != null) { if (lArticle.Name != rArticle.Name) { lArticle.Name = rArticle.Name; lArticle.Body = rArticle.Body; FeedService.UpdateArticle(lArticle); if (!Debugger.IsAttached) { LuceneSearch.AddUpdateIndex(lArticle); Redis.UpdateArticleName(lArticle); } } rFeed.Articles.Remove(rArticle); continue; } rArticle.FeedId = lFeed.Id; if (rFeed.Public && rArticle.Published <= DateTime.Now.AddDays(-32)) { rArticle.Published = DateTime.Now; } if (rArticle.FeedId == 5569 && rArticle.Name.ToLower().Contains("comment on")) { continue; } rArticle.Tags = GetArticleTags(rArticle, lTags, rFeed.Encoding); if (lFeed.Public) { rArticle.LikesCount = Facebook.GetNumberOfLikes(rArticle.Url) + Twitter.GetNumberOfTweets(rArticle.Url) + LinkedIn.GetNumberOfShares(rArticle.Url) + Google.GetNumberOfShares(rArticle.Url) + Reddit.GetNumberOfVotes(rArticle.Url); } lock (_insertArticleLock) { rArticle.Id = FeedService.InsertArticle(rArticle); } rArticle.Feed = lFeed; if (!Debugger.IsAttached) { LuceneSearch.AddUpdateIndex(rArticle); Redis.AddArticle(rArticle); } } catch (Exception ex) { Mail.SendMeAnEmail("Error in insert article", "FeedId: " + lFeed.Id + " " + ex.ToString()); } } } catch (Exception ex) { Mail.SendMeAnEmail("Error in parse feed", +lFeed.Id + " " + ex.ToString()); } }