Esempio n. 1
0
        public void AddViewsCount(int passageId, IPAddress ip)
        {
            try
            {
                Ensure.IsDatabaseId(passageId, nameof(passageId));
                Ensure.NotNull(ip, nameof(ip));

                string ipAddress = ip.ToString();

                base.Log(message: "访问量统计:新增访问量缓存。",
                         parameters: new { passageId, ipAddress });

                LockViewsDictionary(dic =>
                {
                    base.Log(message: "访问量统计:已锁定访问量缓存列表。",
                             parameters: new { ViewsDictionary = dic });
                    lock (WikiPassageService._addViewsLock)
                    {
                        if (!dic.ContainsKey(passageId))
                        {
                            dic.Add(passageId, new Dictionary <string, ViewsCountDto>());
                            base.Log(message: "访问量统计:创建了访问量统计缓存项。",
                                     parameters: new { passageId = passageId, viewsDictionary = dic });
                        }

                        if (dic[passageId].ContainsKey(ipAddress))
                        {
                            DateTime lastUpdateTime = dic[passageId][ipAddress].LastUpdateTime;
                            if (lastUpdateTime.AddMinutes(5) < DateTime.Now)
                            {
                                dic[passageId][ipAddress].NewViews      += 1;
                                dic[passageId][ipAddress].LastUpdateTime = DateTime.Now;
                                base.Log(message: "访问量统计:缓存已包含当前文档的缓存项。更新了访问量统计缓存项。",
                                         parameters: new { passageId = passageId, viewsDictionary = dic });
                            }
                        }
                        else
                        {
                            ViewsCountDto viewsCountDto  = new ViewsCountDto();
                            viewsCountDto.NewViews       = 1;
                            viewsCountDto.LastUpdateTime = DateTime.Now;
                            dic[passageId].Add(ipAddress, viewsCountDto);
                            base.Log(message: "访问量统计:缓存未包含当前文档的缓存项。创建了新的文章缓存项。",
                                     parameters: new { passageId = passageId, viewsDictionary = dic });
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                base.Log(message: "访问量统计:新增访问量出现异常。",
                         parameters: new { ex = ex.ToString(), passageId, ip = ip.ToString() });
            }
        }
Esempio n. 2
0
        public async Task AddViewsCount(int passageId, IPAddress ip)
        {
            try
            {
                Ensure.IsDatabaseId(passageId, nameof(passageId));
                Ensure.NotNull(ip, nameof(ip));

                string ipAddress = ip.ToString();

                LockViewsDictionary(dic =>
                {
                    if (!dic.ContainsKey(passageId))
                    {
                        dic.Add(passageId, new Dictionary <string, ViewsCountDto>());
                    }

                    if (dic[passageId].ContainsKey(ipAddress))
                    {
                        DateTime lastUpdateTime = dic[passageId][ipAddress].LastUpdateTime;
                        if (lastUpdateTime.AddMinutes(5) < DateTime.Now)
                        {
                            dic[passageId][ipAddress].NewViews      += 1;
                            dic[passageId][ipAddress].LastUpdateTime = DateTime.Now;
                        }
                    }
                    else
                    {
                        ViewsCountDto viewsCountDto  = new ViewsCountDto();
                        viewsCountDto.NewViews       = 1;
                        viewsCountDto.LastUpdateTime = DateTime.Now;
                        dic[passageId].Add(ipAddress, viewsCountDto);
                    }
                    this._redisService.ObjectSetAsync(StringConsts.ViewsCountDictionary, dic).GetAwaiter();
                });
            }
            catch (Exception ex)
            {
                await base.Log(message : "访问量统计:新增访问量出现异常。",
                               parameters : new { ex = ex.ToString(), passageId, ip = ip.ToString() });
            }
        }