|
|
@@ -407,18 +407,50 @@ public class Task {
|
|
|
liveRewardRecordService.insertLiveRewardRecord(record);
|
|
|
}
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 从Redis获取对象并转换为Long类型
|
|
|
+ * @param redisCache Redis缓存操作对象
|
|
|
+ * @param key 缓存键
|
|
|
+ * @return 转换后的Long值(若为null或转换失败则返回0L)
|
|
|
+ */
|
|
|
+ public static Long getAsLong(RedisCache redisCache, String key) {
|
|
|
+ // 从Redis获取原始对象
|
|
|
+ Object value = redisCache.getCacheObject(key);
|
|
|
+ if (value == null) {
|
|
|
+ return 0L; // 若缓存不存在,返回默认值0
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据实际类型转换为Long
|
|
|
+ if (value instanceof Long) {
|
|
|
+ return (Long) value;
|
|
|
+ } else if (value instanceof Integer) {
|
|
|
+ return ((Integer) value).longValue();
|
|
|
+ } else if (value instanceof String) {
|
|
|
+ // 处理字符串类型(可能是数字字符串,如"123")
|
|
|
+ try {
|
|
|
+ return Long.parseLong((String) value);
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ // 若字符串无法转为数字,返回0(或根据业务抛异常)
|
|
|
+ return 0L;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 其他类型(如Double等),根据业务需求处理,这里默认返回0
|
|
|
+ return 0L;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
*定期将缓存的数据写入数据库
|
|
|
*/
|
|
|
- @Scheduled(cron = "0 0/1 * * * ?")// 每分钟执行一次
|
|
|
+ @Scheduled(cron = "0/10 * * * * ?")// 每分钟执行一次
|
|
|
public void syncLiveDataToDB() {
|
|
|
List<LiveData> liveDatas = liveDataService.getAllLiveDatas(); // 获取所有正在直播的直播间数据
|
|
|
if(liveDatas == null)
|
|
|
return;
|
|
|
liveDatas.forEach(liveData ->{
|
|
|
- Long likeCount = Long.valueOf(redisCache.getCacheObject("live:like:" + liveData.getLiveId()));
|
|
|
- long resultLikeCount = liveData.getLikes() + (Objects.isNull(likeCount) ? 0L : likeCount);
|
|
|
+
|
|
|
+ Long likeCount = getAsLong(redisCache, "live:like:" + liveData.getLiveId());
|
|
|
+ long resultLikeCount = liveData.getLikes() + likeCount;
|
|
|
redisCache.setCacheObject("live:like:" + liveData.getLiveId(), resultLikeCount);
|
|
|
redisCache.expire("live:like:" + liveData.getLiveId(), 30, TimeUnit.MINUTES);
|
|
|
liveData.setLikes(
|