From 65cd9d9fae206bd7fbbaec481fd353964d1af72a Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 17 Dec 2025 16:32:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(service):=20=E4=B8=BA=E6=89=80=E6=9C=89?= =?UTF-8?q?=E4=BA=BA=E8=AE=BE=E5=88=97=E8=A1=A8=E6=B7=BB=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 在 selectListWithRank 中先读缓存,未命中再查库并写入7天过期缓存,减少数据库压力。 --- .../impl/KeyboardCharacterServiceImpl.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 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 867484f..6e0bf3b 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardCharacterServiceImpl.java @@ -18,6 +18,7 @@ import com.yolo.keyborad.model.entity.KeyboardUserCharacter; import com.yolo.keyborad.model.vo.character.KeyboardCharacterRespVO; import com.yolo.keyborad.model.vo.character.KeyboardUserCharacterVO; import jakarta.annotation.Resource; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yolo.keyborad.model.entity.KeyboardCharacter; @@ -27,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.stream.Stream; /* * @author: ziin @@ -48,7 +50,7 @@ public class KeyboardCharacterServiceImpl extends ServiceImpl redisTemplate; + private RedisTemplate redisTemplate; @Override public KeyboardCharacter getById(java.io.Serializable id) { @@ -57,7 +59,7 @@ public class KeyboardCharacterServiceImpl extends ServiceImpl selectListWithRank() { long userId = StpUtil.getLoginIdAsLong(); - 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); + } + } List userCharacterVOList = keyboardUserCharacterMapper.selectByUserId(userId);