From 61e633f88e2adc4eeda7b9ee93c4542eafe15c4a Mon Sep 17 00:00:00 2001 From: zhangsan <646228430@qq.com> Date: Mon, 11 Aug 2025 16:47:20 +0800 Subject: [PATCH] =?UTF-8?q?8.11=20=E7=BC=93=E5=AD=98=E4=BC=98=E5=8C=96bug?= =?UTF-8?q?=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PictureController.java | 2 +- .../manager/cache/MyCacheManager.java | 1 - .../service/impl/PictureServiceImpl.java | 18 ++++++++++++++---- .../service/impl/SpaceServiceImpl.java | 1 + 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java b/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java index d5cba6e..a85dbec 100644 --- a/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java +++ b/src/main/java/edu/whut/smilepicturebackend/controller/PictureController.java @@ -215,6 +215,7 @@ public class PictureController { // /** // * 分页获取图片列表(封装类,脱敏),普通用户使用,且不能看到未过审的图片 // */ +// @Deprecated // @PostMapping("/list/page/vo") // public BaseResponse> listPictureVOByPage(@RequestBody PictureQueryRequest pictureQueryRequest, // HttpServletRequest request) { @@ -251,7 +252,6 @@ public class PictureController { /** * 分页获取图片列表(封装类,有缓存) */ - @Deprecated @PostMapping("/list/page/vo") public BaseResponse> listPictureVOByPageWithCache( @RequestBody PictureQueryRequest pictureQueryRequest, diff --git a/src/main/java/edu/whut/smilepicturebackend/manager/cache/MyCacheManager.java b/src/main/java/edu/whut/smilepicturebackend/manager/cache/MyCacheManager.java index 2ef37c1..4992f5f 100644 --- a/src/main/java/edu/whut/smilepicturebackend/manager/cache/MyCacheManager.java +++ b/src/main/java/edu/whut/smilepicturebackend/manager/cache/MyCacheManager.java @@ -36,7 +36,6 @@ public class MyCacheManager { */ private final StringRedisTemplate stringRedisTemplate; - // ====== 新增:强类型版本 ====== public T getFromCacheOrDatabase( String cacheKey, TypeReference typeRef, diff --git a/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java b/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java index 0b927a0..de18835 100644 --- a/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java +++ b/src/main/java/edu/whut/smilepicturebackend/service/impl/PictureServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -618,12 +619,21 @@ public class PictureServiceImpl extends ServiceImpl ThrowUtils.throwIf(!hasPermission, ErrorCode.NO_AUTH_ERROR); } + // 把查询条件序列化成 JSON + String queryJson = JSONUtil.toJsonStr(Map.of( + "spaceId", spaceId == null ? "public" : spaceId, + "category", queryRequest.getCategory(), + "tags", queryRequest.getTags(), + "searchText", queryRequest.getSearchText(), + "current", current, + "size", size + )); - String cacheKey = "smilepicture:listPictureVOByPage:spaceId:" + (spaceId == null ? "public" : spaceId) + - ":current:" + current + - ":size:" + size; + // 计算 MD5 作为哈希(也可用 SHA256) + String hash = DigestUtil.md5Hex(queryJson); -// String cacheKey = "smilepicture:list:v" + ver + ":" + hash; + // 拼接缓存 key + String cacheKey = "smilepicture:listPictureVOByPage:v1:" + hash; // 随机过期:300–600s int expire = 300 + RandomUtil.randomInt(0, 300); diff --git a/src/main/java/edu/whut/smilepicturebackend/service/impl/SpaceServiceImpl.java b/src/main/java/edu/whut/smilepicturebackend/service/impl/SpaceServiceImpl.java index 5e43d3c..8dd61ae 100644 --- a/src/main/java/edu/whut/smilepicturebackend/service/impl/SpaceServiceImpl.java +++ b/src/main/java/edu/whut/smilepicturebackend/service/impl/SpaceServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import edu.whut.smilepicturebackend.exception.BusinessException; import edu.whut.smilepicturebackend.exception.ErrorCode; import edu.whut.smilepicturebackend.exception.ThrowUtils; +import edu.whut.smilepicturebackend.manager.sharding.DynamicShardingManager; import edu.whut.smilepicturebackend.mapper.SpaceMapper; import edu.whut.smilepicturebackend.model.dto.space.SpaceAddRequest;