Browse Source

直播间人数数据进行比较缓存

yuhongqi 3 weeks ago
parent
commit
ea74d3196d

+ 5 - 6
fs-live-socket/src/main/java/com/fs/live/task/Task.java

@@ -504,29 +504,28 @@ public class Task {
             }*/
 
 
-            // 从 redis 获取数据,并提供默认值,避免 NPE
             liveData.setPageViews(
-                    liveData.getPageViews() + Optional.ofNullable(redisCache.incrementCacheValue(PAGE_VIEWS_KEY + liveData.getLiveId(),0)).orElse(0L)
+                    Math.max( liveData.getPageViews(), Optional.ofNullable(redisCache.increment(PAGE_VIEWS_KEY + liveData.getLiveId(),0)).orElse(0L))
             );
             liveData.setTotalViews(
-                    liveData.getTotalViews() + Optional.ofNullable(redisCache.incrementCacheValue(TOTAL_VIEWS_KEY + liveData.getLiveId(),0)).orElse(0L)
+                    Math.max( liveData.getTotalViews(), Optional.ofNullable(redisCache.increment(TOTAL_VIEWS_KEY + liveData.getLiveId(),0)).orElse(0L))
             );
             liveData.setUniqueVisitors(
                     /*Optional.ofNullable(redisCache.getCacheSet(UNIQUE_VISITORS_KEY + liveId))
                             .map(Set::size)  // 获取集合大小
                             .map(Long::valueOf)  // 转换为 Long 类型
                             .orElse(0L)*/
-                    liveData.getUniqueVisitors() + Optional.ofNullable(redisCache.incrementCacheValue(UNIQUE_VISITORS_KEY + liveData.getLiveId(),0)).orElse(0L)
+                    Math.max( liveData.getUniqueVisitors(), Optional.ofNullable(redisCache.increment(UNIQUE_VISITORS_KEY + liveData.getLiveId(),0)).orElse(0L))
             );
             liveData.setUniqueViewers(
                     /*Optional.ofNullable(redisCache.getCacheSet(UNIQUE_VIEWERS_KEY + liveId))
                             .map(Set::size)  // 获取集合大小
                             .map(Long::valueOf)  // 转换为 Long 类型
                             .orElse(0L)*/
-                    liveData.getUniqueViewers() + Optional.ofNullable(redisCache.incrementCacheValue(UNIQUE_VIEWERS_KEY + liveData.getLiveId(),0)).orElse(0L)
+                    Math.max( liveData.getUniqueViewers(), Optional.ofNullable(redisCache.increment(UNIQUE_VIEWERS_KEY + liveData.getLiveId(),0)).orElse(0L))
             );
             liveData.setPeakConcurrentViewers(
-                    liveData.getPeakConcurrentViewers() + Optional.ofNullable(redisCache.incrementCacheValue(MAX_ONLINE_USERS_KEY + liveData.getLiveId(),0)).orElse(0L)
+                    Math.max( liveData.getPeakConcurrentViewers(), Optional.ofNullable(redisCache.increment(MAX_ONLINE_USERS_KEY + liveData.getLiveId(),0)).orElse(0L))
             );
         });
         if(!liveDatas.isEmpty())

+ 1 - 1
fs-live-socket/src/main/java/com/fs/live/websocket/service/WebSocketServer.java

@@ -110,7 +110,7 @@ public class WebSocketServer {
             }
 
             // 判断是否是该直播间的首次访客(独立访客统计)
-            boolean isFirstVisit = redisCache.setIfAbsent(USER_VISIT_KEY + userId, 1, 1, TimeUnit.DAYS);
+            boolean isFirstVisit = redisCache.setIfAbsent(USER_VISIT_KEY + liveId + ":" + userId, 1, 1, TimeUnit.DAYS);
             if (isFirstVisit) {
 
                 redisCache.increment(UNIQUE_VISITORS_KEY + liveId, 1);