|
@@ -93,6 +93,7 @@ public class WebSocketServer {
|
|
|
// 判断是否是该直播间的首次访客(独立访客统计)
|
|
|
boolean isFirstVisit = redisCache.setIfAbsent(USER_VISIT_KEY + userId, 1, 1, TimeUnit.DAYS);
|
|
|
if (isFirstVisit) {
|
|
|
+
|
|
|
redisCache.increment(UNIQUE_VISITORS_KEY + liveId, 1);
|
|
|
}
|
|
|
|
|
@@ -198,6 +199,7 @@ public class WebSocketServer {
|
|
|
sendMessage(session, JSONObject.toJSONString(R.error("你已被禁言")));
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
liveMsgService.save(liveMsg);
|
|
|
}
|
|
|
|
|
@@ -260,41 +262,53 @@ public class WebSocketServer {
|
|
|
*/
|
|
|
@Scheduled(fixedRate = 60000) // 每分钟执行一次
|
|
|
public void syncLiveDataToDB() {
|
|
|
- List<Long> liveIds = liveDataService.getAllLiveIds(); // 获取所有正在直播的直播间ID
|
|
|
- for (Long liveId : liveIds) {
|
|
|
+ List<LiveData> liveDatas = liveDataService.getAllLiveDatas(); // 获取所有正在直播的直播间数据
|
|
|
+ if(liveDatas == null)
|
|
|
+ return;
|
|
|
+ liveDatas.forEach(liveData ->{
|
|
|
+ liveData.setLikes(
|
|
|
+ Optional.ofNullable(redisCache.incrementCacheValue("live:like:" + liveData.getLiveId(),0 )).orElse(0L)
|
|
|
+ );
|
|
|
+
|
|
|
+ /* for (Long liveId : liveIds) {
|
|
|
LiveData liveData = liveDataService.selectLiveDataByLiveId(liveId);
|
|
|
if (liveData == null) {
|
|
|
continue; // 防止空指针异常
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
|
|
|
// 从 redis 获取数据,并提供默认值,避免 NPE
|
|
|
liveData.setPageViews(
|
|
|
- Optional.ofNullable(redisCache.incrementCacheValue(PAGE_VIEWS_KEY + liveId,0)).orElse(0L)
|
|
|
+ Optional.ofNullable(redisCache.incrementCacheValue(PAGE_VIEWS_KEY + liveData.getLiveId(),0)).orElse(0L)
|
|
|
);
|
|
|
liveData.setTotalViews(
|
|
|
- Optional.ofNullable(redisCache.incrementCacheValue(TOTAL_VIEWS_KEY + liveId,0)).orElse(0L)
|
|
|
+ Optional.ofNullable(redisCache.incrementCacheValue(TOTAL_VIEWS_KEY + liveData.getLiveId(),0)).orElse(0L)
|
|
|
);
|
|
|
liveData.setUniqueVisitors(
|
|
|
- Optional.ofNullable(redisCache.getCacheSet(UNIQUE_VISITORS_KEY + liveId))
|
|
|
+ /*Optional.ofNullable(redisCache.getCacheSet(UNIQUE_VISITORS_KEY + liveId))
|
|
|
.map(Set::size) // 获取集合大小
|
|
|
.map(Long::valueOf) // 转换为 Long 类型
|
|
|
- .orElse(0L)
|
|
|
+ .orElse(0L)*/
|
|
|
+ Optional.ofNullable(redisCache.incrementCacheValue(UNIQUE_VISITORS_KEY + liveData.getLiveId(),0)).orElse(0L)
|
|
|
);
|
|
|
liveData.setUniqueViewers(
|
|
|
- Optional.ofNullable(redisCache.getCacheSet(UNIQUE_VIEWERS_KEY + liveId))
|
|
|
+ /*Optional.ofNullable(redisCache.getCacheSet(UNIQUE_VIEWERS_KEY + liveId))
|
|
|
.map(Set::size) // 获取集合大小
|
|
|
.map(Long::valueOf) // 转换为 Long 类型
|
|
|
- .orElse(0L)
|
|
|
+ .orElse(0L)*/
|
|
|
+ Optional.ofNullable(redisCache.incrementCacheValue(UNIQUE_VIEWERS_KEY + liveData.getLiveId(),0)).orElse(0L)
|
|
|
);
|
|
|
liveData.setPeakConcurrentViewers(
|
|
|
- Optional.ofNullable(redisCache.incrementCacheValue(MAX_ONLINE_USERS_KEY + liveId,0)).orElse(0L)
|
|
|
+ Optional.ofNullable(redisCache.incrementCacheValue(MAX_ONLINE_USERS_KEY + liveData.getLiveId(),0)).orElse(0L)
|
|
|
);
|
|
|
+ });
|
|
|
+ if(!liveDatas.isEmpty())
|
|
|
+ liveDataService.updateBatchById(liveDatas);
|
|
|
|
|
|
- // 更新数据库
|
|
|
- liveDataService.updateLiveData(liveData);
|
|
|
- }
|
|
|
+ /*// 更新数据库
|
|
|
+ liveDataService.updateLiveData(liveData);*/
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
}
|