Exemple #1
0
        public bool AccessStatistics(string id, string classify)
        {
            var type = VideoCommonService.GetVideoType(classify) ?? "";

            //日排行
            _redisService.SortedSetIncrement(GetDayRankingKeyByType(type), id, 1, 60 * 24 * 15);//15天
            //总排行
            _redisService.SortedSetIncrement(VideoCommonService.TotalRankingKey, id, 1);
            return(true);
        }
        public IActionResult VideoDetail(string id)
        {
            //详情
            long vid = 0;

            if (!long.TryParse(id, out vid))
            {
                return(Redirect("/error"));
            }
            var videoDetailKey = $"VideoDetail_{id}";
            var videoDetail    = _redisService.Get <VideoDetail>(videoDetailKey);

            if (videoDetail == null)
            {
                var video = _videoService.GetVideo(vid);
                if (video == null)
                {
                    return(Redirect("/error"));
                }
                var videoSource = _videoService.GetVideoSourceByVideo(video.Id);
                if (videoSource == null)
                {
                    return(Redirect("/error"));
                }
                videoDetail = new VideoDetail()
                {
                    Video       = video,
                    VideoSource = videoSource
                };
                var cacheTime = 60;//1小时
                var type      = VideoCommonService.GetVideoType(video.Classify);
                if (type == "电影" || type == "伦理")
                {
                    cacheTime = 60 * 24 * 3;//3天
                }
                _redisService.Set(videoDetailKey, videoDetail, cacheTime);
            }

            var videoType = VideoCommonService.GetVideoType(videoDetail.Video.Classify);;
            //热播
            var hotListKey = "VideoHotList_" + videoType;

            if (!_memoryCache.TryGetValue(hotListKey, out List <VideoRank> hotList))
            {
                hotList = new List <VideoRank>();
                var dayRanking     = _videoRankingService.GetDayRankingByType(videoType, 1, 10);//日榜前10
                var dayRankingList = _videoService.GetVideoList(dayRanking.Select(x => Convert.ToInt64(x.Key)));
                dayRanking.ForEach(item =>
                {
                    var dayRankingItem = dayRankingList.FirstOrDefault(x => x.Id == Convert.ToInt64(item.Key));
                    if (dayRankingItem != null)
                    {
                        hotList.Add(ConvertVideoToVideoRank(dayRankingItem, item.Value));
                    }
                });
                _memoryCache.Set(hotListKey, hotList, new DateTimeOffset(DateTime.Now.AddMinutes(5)));//5分钟
            }
            ViewData["VideoDetail_HotList"] = hotList;
            //推荐
            var recommendKey = "VideoRecommendList_" + videoType;

            if (!_memoryCache.TryGetValue(recommendKey, out List <VideoRank> recommendList))
            {
                recommendList = new List <VideoRank>();
                var weekRanking     = _videoRankingService.GetWeekRankingByType(videoType, 1, 4);//周榜前4
                var weekRankingList = _videoService.GetVideoList(weekRanking.Select(x => Convert.ToInt64(x.Key)));
                weekRanking.ForEach(item =>
                {
                    var weekRankingItem = weekRankingList.FirstOrDefault(x => x.Id == Convert.ToInt64(item.Key));
                    if (weekRankingItem != null)
                    {
                        recommendList.Add(ConvertVideoToVideoRank(weekRankingItem, item.Value));
                    }
                });
                _memoryCache.Set(recommendKey, recommendList, new DateTimeOffset(DateTime.Now.AddHours(1)));//1小时
            }
            ViewData["VideoDetail_RecommendList"] = recommendList;
            //统计
            _videoRankingService.AccessStatistics(id, videoDetail.Video.Classify);

            ViewData["VideoDetail_VideoType"] = videoType;
            return(View(videoDetail));
        }