给 shop 项目瘦身,减少打包大小

This commit is contained in:
Jack 2025-09-12 10:56:57 +08:00
parent 90b9f793a4
commit 52e5f24913
3 changed files with 160 additions and 48 deletions

View File

@ -131,25 +131,25 @@
<artifactId>restful-sdk</artifactId>
<version>1.0.0.6</version>
</dependency>
<!-- JavaCV库 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.6</version>
</dependency>
<!-- &lt;!&ndash; JavaCV库 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.bytedeco</groupId>-->
<!-- <artifactId>javacv</artifactId>-->
<!-- <version>1.5.6</version>-->
<!-- </dependency>-->
<!-- JavaCV库 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.6</version>
</dependency>
<!-- FFmpeg平台依赖 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.4-1.5.6</version>
</dependency>
<!-- &lt;!&ndash; JavaCV库 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.bytedeco</groupId>-->
<!-- <artifactId>javacv-platform</artifactId>-->
<!-- <version>1.5.6</version>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; FFmpeg平台依赖 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>org.bytedeco</groupId>-->
<!-- <artifactId>ffmpeg-platform</artifactId>-->
<!-- <version>4.4-1.5.6</version>-->
<!-- </dependency>-->
<!-- rabbitMQ消息队列 -->
<dependency>
@ -325,6 +325,21 @@
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<!-- 开发环境使用多平台依赖 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.4-1.5.6</version>
</dependency>
</dependencies>
</profile>
<!--开发环境 -->
<profile>
@ -335,6 +350,22 @@
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<dependencies>
<!-- 开发环境使用多平台依赖 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.4-1.5.6</version>
</dependency>
</dependencies>
</profile>
<!--测试环境 -->
<profile>
@ -342,6 +373,22 @@
<properties>
<profiles.active>test</profiles.active>
</properties>
<dependencies>
<!-- 开发环境使用多平台依赖 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.4-1.5.6</version>
</dependency>
</dependencies>
</profile>
<!--uat环境 -->
<profile>
@ -349,6 +396,22 @@
<properties>
<profiles.active>uat</profiles.active>
</properties>
<dependencies>
<!-- 开发环境使用多平台依赖 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>4.4-1.5.6</version>
</dependency>
</dependencies>
</profile>
<!--生产环境 -->
<profile>
@ -356,6 +419,24 @@
<properties>
<profiles.active>prod</profiles.active>
</properties>
<dependencies>
<!-- 生产环境仅包含Linux平台依赖 -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.6</version>
</dependency>
<!-- Linux平台的FFmpeg -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg</artifactId>
<version>4.4-1.5.6</version>
<classifier>linux-x86_64</classifier>
</dependency>
</dependencies>
</profile>
</profiles>

View File

@ -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<SnsUserMessageMap
private SnsUserFriendService snsUserFriendService;
@Autowired
private ImService imService;
// @Autowired
// private RedisTemplate<String, Object> redisTemplate;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
public Map getMsgCount() {
@ -87,22 +88,30 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl<SnsUserMessageMap
}
Integer userId = user.getId();
// String cacheKey = "sns:user:message:unread:" + userId;
String cacheKey = "sns:user:message:unread:" + userId;
String counterKey = "sns:user:message:unread:counter:" + userId;
// // 尝试从Redis缓存中获取数据
// Map cachedResult = (Map) redisTemplate.opsForValue().get(cacheKey);
// if (cachedResult != null) {
// return cachedResult;
// }
// 尝试从Redis缓存中获取数据
Map cachedResult = (Map) redisTemplate.opsForValue().get(cacheKey);
if (cachedResult != null) {
return cachedResult;
}
QueryWrapper<SnsUserMessage> 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<SnsUserMessage> 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<SnsUserMessage> 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<SnsUserMessageMap
}
}
// // 将结果缓存到Redis缓存10秒
// redisTemplate.opsForValue().set(cacheKey, rs, 45, TimeUnit.SECONDS);
// 将结果缓存到Redis缓存5秒以提高高并发下的性能
redisTemplate.opsForValue().set(cacheKey, rs, 5, TimeUnit.SECONDS);
return rs;
}
@ -320,13 +329,10 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl<SnsUserMessageMap
}
/**
* 设置为已读
*
* @return
* 重写setRead方法在设置消息为已读时更新未读计数器
*/
@Override
public boolean setRead() {
// 权限判断
UserDto user = ContextUtil.getCurrentUser();
if (user == null) {
@ -346,10 +352,29 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl<SnsUserMessageMap
if (CheckUtil.isNotEmpty(user_other_id)) {
queryWrapper.eq("user_other_id", user_other_id);
}
// 查询需要更新的消息数量
List<SnsUserMessage> 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<SnsUserMessageMap
}
/**
* 添加短消息
*
* @return
* 重写addMessage方法在添加新消息时更新未读计数器
*/
@Override
@Transactional
public Map addMessage() {
UserDto user = ContextUtil.getCurrentUser();
if (user == null) {
throw new ApiException(ResultCode.NEED_LOGIN);
@ -818,8 +840,18 @@ public class SnsUserMessageServiceImpl extends BaseServiceImpl<SnsUserMessageMap
if (!saveOrUpdate(other)) {
throw new ApiException(I18nUtil._("保存收件箱失败data=") + other);
}
result.put("message_id", data.getMessage_id());
result.put("message_other_id", other.getMessage_id());
// 新消息添加后更新接收者的未读计数器和缓存
String counterKey = "sns:user:message:unread:counter:" + user_other_row.getUser_id();
String cacheKey = "sns:user:message:unread:" + user_other_row.getUser_id();
// 增加计数器
redisTemplate.opsForValue().increment(counterKey, 1);
// 删除缓存下次请求会重新生成
redisTemplate.delete(cacheKey);
}
return result;
}

View File

@ -569,11 +569,10 @@
<!--推送镜像仓库校验安全证书,无安全证书无法推送-->
<dockerCertPath>${docker.ca}</dockerCertPath>
<!-- 添加清理命令来过滤无用文件 -->
<!-- <runs>-->
<!-- &lt;!&ndash; 合并所有清理命令到单个RUN指令 &ndash;&gt;-->
<!-- <run>rm -rf /var/cache/apk/* &amp;&amp; rm -rf /root/.m2 &amp;&amp; find / -name "*.log" -type f -delete 2&gt;/dev/null || true &amp;&amp; find / -name "*test*" -type f -delete 2&gt;/dev/null || true &amp;&amp; find / -name "*.md" -type f -delete 2&gt;/dev/null || true &amp;&amp; rm -rf /tmp/* /var/tmp/* &amp;&amp; rm -rf /usr/share/doc/* /usr/share/man/* /usr/share/info/* &amp;&amp; rm -rf /var/cache/yum/* /var/cache/dnf/* 2&gt;/dev/null || true &amp;&amp; rm -rf /tmp/*.tar.gz /tmp/*.zip /app/*.tar.gz 2&gt;/dev/null || true &amp;&amp; apk del &#45;&#45;purge vim curl wget tar gzip 2&gt;/dev/null || true &amp;&amp; rm -rf /root/.java /tmp/hsperfdata_* 2&gt;/dev/null || true &amp;&amp; find / -type d -empty -delete 2&gt;/dev/null || true</run>-->
<!-- </runs>-->
<!-- 添加额外的Dockerfile指令来清理不必要的文件 -->
<runs>
<run>rm -rf /root/.m2 &amp;&amp; rm -rf /tmp/* &amp;&amp; rm -rf /var/cache/*</run>
</runs>
<resources>
<resource>