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/*
+