From 35c45abf7357386d3319fd87b0948dfb505c14ed Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 17 Dec 2025 16:46:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(service):=20=E4=B8=BA=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E4=BA=BA=E8=AE=BE=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0Redis?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/KeyboardCharacterServiceImpl.java | 55 +++++++++++++++---- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java index 6e0bf3b..1e9f53b 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java @@ -97,10 +97,21 @@ public class KeyboardCharacterServiceImpl extends ServiceImpl selectListByTag(Long tagId) { - List keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() - .eq(KeyboardCharacter::getDeleted, false) - .eq(KeyboardCharacter::getTag, tagId) - .orderByDesc(KeyboardCharacter::getRank)); + // 先从缓存获取指定标签的人设列表 + String cacheKey = "character:list:tag:" + tagId; + List keyboardCharacters = (List) redisTemplate.opsForValue().get(cacheKey); + + if (keyboardCharacters == null) { + // 缓存未命中,从数据库查询 + keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() + .eq(KeyboardCharacter::getDeleted, false) + .eq(KeyboardCharacter::getTag, tagId) + .orderByDesc(KeyboardCharacter::getRank)); + // 缓存到Redis,7天过期 + if (keyboardCharacters != null && !keyboardCharacters.isEmpty()) { + redisTemplate.opsForValue().set(cacheKey, keyboardCharacters, 7, TimeUnit.DAYS); + } + } long userId = StpUtil.getLoginIdAsLong(); List userCharacterVOList = keyboardUserCharacterMapper.selectByUserId(userId); @@ -181,18 +192,40 @@ public class KeyboardCharacterServiceImpl extends ServiceImpl selectListWithNotLoginRank() { - List keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() - .eq(KeyboardCharacter::getDeleted, false) - .orderByAsc(KeyboardCharacter::getRank)); + // 先从缓存获取所有人设列表 + String cacheKey = "character:list:all"; + List keyboardCharacters = (List) redisTemplate.opsForValue().get(cacheKey); + + if (keyboardCharacters == null) { + // 缓存未命中,从数据库查询 + keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() + .eq(KeyboardCharacter::getDeleted, false) + .orderByAsc(KeyboardCharacter::getRank)); + // 缓存到Redis,7天过期 + if (keyboardCharacters != null && !keyboardCharacters.isEmpty()) { + redisTemplate.opsForValue().set(cacheKey, keyboardCharacters, 7, TimeUnit.DAYS); + } + } return BeanUtil.copyToList(keyboardCharacters, KeyboardCharacterRespVO.class); } @Override public List selectListByTagWithNotLogin(Long tagId) { - List keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() - .eq(KeyboardCharacter::getDeleted, false) - .eq(KeyboardCharacter::getTag, tagId) - .orderByDesc(KeyboardCharacter::getRank)); + // 先从缓存获取指定标签的人设列表 + String cacheKey = "character:list:tag:" + tagId; + List keyboardCharacters = (List) redisTemplate.opsForValue().get(cacheKey); + + if (keyboardCharacters == null) { + // 缓存未命中,从数据库查询 + keyboardCharacters = keyboardCharacterMapper.selectList(new LambdaQueryWrapper() + .eq(KeyboardCharacter::getDeleted, false) + .eq(KeyboardCharacter::getTag, tagId) + .orderByDesc(KeyboardCharacter::getRank)); + // 缓存到Redis,7天过期 + if (keyboardCharacters != null && !keyboardCharacters.isEmpty()) { + redisTemplate.opsForValue().set(cacheKey, keyboardCharacters, 7, TimeUnit.DAYS); + } + } return BeanUtil.copyToList(keyboardCharacters, KeyboardCharacterRespVO.class); }