diff --git a/mall-shop/pom.xml b/mall-shop/pom.xml index 53661a19..24993e94 100644 --- a/mall-shop/pom.xml +++ b/mall-shop/pom.xml @@ -131,25 +131,25 @@ restful-sdk 1.0.0.6 - - - org.bytedeco - javacv - 1.5.6 - + + + + + + - - - org.bytedeco - javacv-platform - 1.5.6 - - - - org.bytedeco - ffmpeg-platform - 4.4-1.5.6 - + + + + + + + + + + + + @@ -325,6 +325,21 @@ true + + + + + org.bytedeco + javacv-platform + 1.5.6 + + + + org.bytedeco + ffmpeg-platform + 4.4-1.5.6 + + @@ -335,6 +350,22 @@ false + + + + + org.bytedeco + javacv-platform + 1.5.6 + + + + org.bytedeco + ffmpeg-platform + 4.4-1.5.6 + + + @@ -342,6 +373,22 @@ test + + + + + org.bytedeco + javacv-platform + 1.5.6 + + + + org.bytedeco + ffmpeg-platform + 4.4-1.5.6 + + + @@ -349,6 +396,22 @@ uat + + + + + org.bytedeco + javacv-platform + 1.5.6 + + + + org.bytedeco + ffmpeg-platform + 4.4-1.5.6 + + + @@ -356,6 +419,24 @@ prod + + + + + org.bytedeco + javacv + 1.5.6 + + + + + org.bytedeco + ffmpeg + 4.4-1.5.6 + linux-x86_64 + + + diff --git a/mall-sns/src/main/java/com/suisung/mall/sns/service/impl/SnsUserMessageServiceImpl.java b/mall-sns/src/main/java/com/suisung/mall/sns/service/impl/SnsUserMessageServiceImpl.java index 48945ead..770a4457 100644 --- a/mall-sns/src/main/java/com/suisung/mall/sns/service/impl/SnsUserMessageServiceImpl.java +++ b/mall-sns/src/main/java/com/suisung/mall/sns/service/impl/SnsUserMessageServiceImpl.java @@ -45,6 +45,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.*; //import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -74,8 +75,8 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl redisTemplate; + @Autowired + private RedisTemplate redisTemplate; @Override public Map getMsgCount() { @@ -87,22 +88,30 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_id", userId).eq("message_kind", 2).eq("message_is_read", 0); - long num = count(queryWrapper); + // 使用计数器方式提高性能,避免每次都count数据库 + Long unreadCount = redisTemplate.opsForValue().increment(counterKey, 0); + if (unreadCount == null) { + // 如果计数器不存在,则从数据库查询并初始化计数器 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", userId).eq("message_kind", 2).eq("message_is_read", 0); + unreadCount = count(queryWrapper); + // 设置计数器,过期时间1小时 + redisTemplate.opsForValue().set(counterKey, unreadCount, 3600, TimeUnit.SECONDS); + } - rs.put("num", num); + rs.put("num", unreadCount); // 构造最后一个用户聊天网址 - if (num > 0) { + if (unreadCount > 0) { QueryWrapper messageQuery = new QueryWrapper<>(); messageQuery.orderByAsc("message_is_read").orderByDesc("message_time") .eq("user_id", userId).eq("message_is_read", 0).eq("message_kind", 2); @@ -123,8 +132,8 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl messagesToUpdate = find(queryWrapper); + long unreadToUpdate = messagesToUpdate.stream() + .filter(m -> m.getMessage_is_read() == 0) + .count(); + SnsUserMessage userMessage = new SnsUserMessage(); userMessage.setMessage_is_read(1); - saveOrUpdate(userMessage, queryWrapper); - return true; + boolean result = saveOrUpdate(userMessage, queryWrapper); + + // 更新未读计数器和缓存 + if (result && unreadToUpdate > 0) { + String counterKey = "sns:user:message:unread:counter:" + user_id; + String cacheKey = "sns:user:message:unread:" + user_id; + + // 减少计数器 + redisTemplate.opsForValue().increment(counterKey, -unreadToUpdate); + // 删除缓存,下次请求会重新生成 + redisTemplate.delete(cacheKey); + } + + return result; } @Override @@ -712,14 +737,11 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl ${docker.ca} - - - - - + + + rm -rf /root/.m2 && rm -rf /tmp/* && rm -rf /var/cache/* +