فهرست منبع

推荐视频暂时采用随机从 mysql 中获取定量 VideoPost 的方式实现

reghao 1 سال پیش
والد
کامیت
910a05410e

+ 1 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/db/mapper/VideoPostMapper.java

@@ -54,4 +54,5 @@ public interface VideoPostMapper extends BaseMapper<VideoPost> {
     List<BannerVideo> findBannerVideos(List<String> videoIds);
     List<GroupCount> findGroupByPublishBy();
     List<GroupCount> findGroupByCategoryId();
+    List<String> findRandomVideoIds(int size);
 }

+ 1 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/VideoPostQuery.java

@@ -22,6 +22,7 @@ public interface VideoPostQuery {
     UserVideoPost getUserVideoPost(VideoPost videoPost);
     List<BannerVideo> getBannerVideos(List<String> videoIds);
     List<String> getRandomTags(int size);
+    List<String> getRandomVideoIds(int size);
     /**
      * 获取用户发布的视频稿件
      *

+ 5 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/impl/VideoPostQueryImpl.java

@@ -225,6 +225,11 @@ public class VideoPostQueryImpl implements VideoPostQuery {
         return tagIds;
     }
 
+    @Override
+    public List<String> getRandomVideoIds(int size) {
+        return videoPostMapper.findRandomVideoIds(size);
+    }
+
     public List<VideoInfo> getVideoResource(String videoId) {
         VideoPost videoPost = videoPostMapper.findByVideoId(videoId);
         int channelId = 105;

+ 4 - 2
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/rcmd/task/RcmdTask.java

@@ -39,9 +39,11 @@ public class RcmdTask implements Runnable {
             }
 
             String itemsKey = RedisKeys.getUserItemKey(loginUser);
-            Set<String> videoIds = userInterestBased.getUserInterestItems(loginUser);
+            Set<String> set = userInterestBased.getUserInterestItems(loginUser);
+            List<String> videoIds1 = new ArrayList<>(set);
+            List<String> videoIds = videoPostQuery.getRandomVideoIds(120);
             if (!videoIds.isEmpty()) {
-                List<VideoCard> videoCards = videoPostQuery.getVideoCards(new ArrayList<>(videoIds));
+                List<VideoCard> videoCards = videoPostQuery.getVideoCards(videoIds);
                 VideoCard[] arr = videoCards.toArray(new VideoCard[0]);
                 redisSet.sadd(itemsKey, arr);
             }

+ 8 - 0
content/content-service/src/main/resources/mapper/vod/VideoPostMapper.xml

@@ -417,4 +417,12 @@
         group by category_id
         order by total desc
     </select>
+    <select id="findRandomVideoIds" resultType="java.lang.String">
+        SELECT t1.video_id
+        FROM video_post AS t1
+        JOIN (SELECT ROUND(RAND()*(SELECT MAX(id) FROM video_post)) AS id) AS t2
+        WHERE t1.id>=t2.id
+        ORDER BY t1.id
+        LIMIT #{size}
+    </select>
 </mapper>