From ed882abbd1a465c0d0d5b32a8453547453a80950 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Sun, 29 May 2022 20:36:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=90=8C=E7=B1=BB=E6=8E=A8=E8=8D=90?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=97=A0=E7=AB=A0=E8=8A=82=E5=B0=8F=E8=AF=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/xxyopen/novel/core/constant/DatabaseConsts.java | 2 ++ .../xxyopen/novel/manager/cache/BookInfoCacheManager.java | 7 +++++++ .../github/xxyopen/novel/service/impl/BookServiceImpl.java | 6 +++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java b/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java index a950b85..3f0fafa 100644 --- a/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java +++ b/src/main/java/io/github/xxyopen/novel/core/constant/DatabaseConsts.java @@ -93,6 +93,8 @@ public class DatabaseConsts { public static final String COLUMN_VISIT_COUNT = "visit_count"; + public static final String COLUMN_WORD_COUNT = "word_count"; + public static final String COLUMN_LAST_CHAPTER_UPDATE_TIME = "last_chapter_update_time"; } diff --git a/src/main/java/io/github/xxyopen/novel/manager/cache/BookInfoCacheManager.java b/src/main/java/io/github/xxyopen/novel/manager/cache/BookInfoCacheManager.java index 82f4365..18dfc9a 100644 --- a/src/main/java/io/github/xxyopen/novel/manager/cache/BookInfoCacheManager.java +++ b/src/main/java/io/github/xxyopen/novel/manager/cache/BookInfoCacheManager.java @@ -9,6 +9,7 @@ import io.github.xxyopen.novel.dao.mapper.BookChapterMapper; import io.github.xxyopen.novel.dao.mapper.BookInfoMapper; import io.github.xxyopen.novel.dto.resp.BookInfoRespDto; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; @@ -72,6 +73,11 @@ public class BookInfoCacheManager { .build(); } + @CacheEvict(cacheManager = CacheConsts.CAFFEINE_CACHE_MANAGER, + value = CacheConsts.BOOK_INFO_CACHE_NAME) + public void evictBookInfoCache(Long ignoredId) { + // 调用此方法自动清除小说信息的缓存 + } /** * 查询每个类别下最新更新的 500 个小说ID列表,并放入缓存中 1 个小时 @@ -81,6 +87,7 @@ public class BookInfoCacheManager { public List getLastUpdateIdList(Long categoryId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq(DatabaseConsts.BookTable.COLUMN_CATEGORY_ID, categoryId) + .gt(DatabaseConsts.BookTable.COLUMN_WORD_COUNT,0) .orderByDesc(DatabaseConsts.BookTable.COLUMN_LAST_CHAPTER_UPDATE_TIME) .last(DatabaseConsts.SqlEnum.LIMIT_500.getSql()); return bookInfoMapper.selectList(queryWrapper).stream().map(BookInfo::getId).toList(); diff --git a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java index 8a7fa20..79c0b35 100644 --- a/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java +++ b/src/main/java/io/github/xxyopen/novel/service/impl/BookServiceImpl.java @@ -301,7 +301,7 @@ public class BookServiceImpl implements BookService { @Override public RestResp saveBookChapter(ChapterAddReqDto dto) { // 校验该作品是否属于当前作家 - BookInfoRespDto bookInfo = bookInfoCacheManager.getBookInfo(dto.getBookId()); + BookInfo bookInfo = bookInfoMapper.selectById(dto.getBookId()); if (!Objects.equals(bookInfo.getAuthorId(), UserHolder.getAuthorId())) { return RestResp.fail(ErrorCodeEnum.USER_UN_AUTH); } @@ -345,8 +345,8 @@ public class BookServiceImpl implements BookService { newBookInfo.setWordCount(bookInfo.getWordCount() + newBookChapter.getWordCount()); newBookChapter.setUpdateTime(LocalDateTime.now()); bookInfoMapper.updateById(newBookInfo); - // b) 刷新小说信息缓存 - bookInfoCacheManager.cachePutBookInfo(dto.getBookId()); + // b) 清除小说信息缓存 + bookInfoCacheManager.evictBookInfoCache(dto.getBookId()); // c) 发送小说信息更新的 MQ 消息 amqpMsgManager.sendBookChangeMsg(dto.getBookId()); return RestResp.ok();