Skip to content

Commit 805115b

Browse files
committed
add news memory cache
1 parent 3eed399 commit 805115b

4 files changed

Lines changed: 88 additions & 15 deletions

File tree

.idea/workspace.xml

Lines changed: 15 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,11 @@
223223
<!-- <groupId>org.springframework.boot</groupId>-->
224224
<!-- <artifactId>spring-boot-starter-data-redis</artifactId>-->
225225
<!-- </dependency>-->
226+
<dependency>
227+
<groupId>javax.annotation</groupId>
228+
<artifactId>javax.annotation-api</artifactId>
229+
<version>1.3.2</version>
230+
</dependency>
226231
<dependency>
227232
<groupId>org.springframework.data</groupId>
228233
<artifactId>spring-data-redis</artifactId>

src/main/java/com/phantoms/phantomsbackend/service/scheduler/FF14GlobalNewsScheduler.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.beans.factory.annotation.Value;
1010
import org.springframework.scheduling.annotation.Scheduled;
1111
import org.springframework.stereotype.Component;
12+
import javax.annotation.PostConstruct;
1213

1314
import java.util.ArrayList;
1415
import java.util.List;
@@ -39,6 +40,38 @@ public class FF14GlobalNewsScheduler {
3940
@Value("${napcat.default-group-id}")
4041
private String defaultGroupId;
4142

43+
@PostConstruct
44+
public void initCache() {
45+
logger.info("初始化FF14国际服新闻缓存");
46+
try {
47+
// 尝试从Redis读取缓存
48+
try {
49+
Object cachedIdsObj = redisUtil.get(FF14_GLOBAL_NEWS_CACHE_KEY);
50+
if (cachedIdsObj instanceof List) {
51+
inMemoryCache = (List<String>) cachedIdsObj;
52+
logger.info("从Redis加载缓存成功,共 {} 条国际服新闻ID", inMemoryCache.size());
53+
return;
54+
}
55+
} catch (Exception e) {
56+
logger.warn("从Redis读取缓存失败: {}", e.getMessage());
57+
}
58+
59+
// 如果Redis不可用,从新闻源获取最新新闻列表作为初始缓存
60+
logger.info("Redis不可用,从新闻源获取初始缓存");
61+
List<FF14GlobalNewsUtils.NewsItem> newsList = ff14GlobalNewsUtils.fetchGlobalNews();
62+
if (!newsList.isEmpty()) {
63+
inMemoryCache = newsList.stream()
64+
.map(FF14GlobalNewsUtils.NewsItem::getId)
65+
.collect(Collectors.toList());
66+
logger.info("从新闻源加载初始缓存成功,共 {} 条国际服新闻ID", inMemoryCache.size());
67+
} else {
68+
logger.warn("从新闻源获取初始缓存失败,使用空缓存");
69+
}
70+
} catch (Exception e) {
71+
logger.error("初始化缓存失败", e);
72+
}
73+
}
74+
4275
@Scheduled(fixedRate = 5 * 60 * 1000)
4376
public void fetchAndSendFF14GlobalNews() {
4477
logger.info("开始获取FF14国际服新闻列表");
@@ -112,7 +145,7 @@ private void sendNewsToGroup(List<FF14GlobalNewsUtils.NewsItem> newsList) {
112145
message.append(news.getLinkUrl());
113146
}
114147

115-
napCatQQUtil.sendGroupMessage(defaultGroupId, message.toString());
148+
napCatQQUtil.sendGroupMessage(phantomGroupId, message.toString());
116149
logger.info("已发送FF14国际服新闻: {}", news.getTitle());
117150

118151
Thread.sleep(1000);

src/main/java/com/phantoms/phantomsbackend/service/scheduler/FF14NewsScheduler.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.beans.factory.annotation.Value;
1010
import org.springframework.scheduling.annotation.Scheduled;
1111
import org.springframework.stereotype.Component;
12+
import javax.annotation.PostConstruct;
1213

1314
import java.util.ArrayList;
1415
import java.util.List;
@@ -39,6 +40,38 @@ public class FF14NewsScheduler {
3940
@Value("${napcat.default-group-id}")
4041
private String defaultGroupId;
4142

43+
@PostConstruct
44+
public void initCache() {
45+
logger.info("初始化FF14新闻缓存");
46+
try {
47+
// 尝试从Redis读取缓存
48+
try {
49+
Object cachedIdsObj = redisUtil.get(FF14_NEWS_CACHE_KEY);
50+
if (cachedIdsObj instanceof List) {
51+
inMemoryCache = (List<String>) cachedIdsObj;
52+
logger.info("从Redis加载缓存成功,共 {} 条新闻ID", inMemoryCache.size());
53+
return;
54+
}
55+
} catch (Exception e) {
56+
logger.warn("从Redis读取缓存失败: {}", e.getMessage());
57+
}
58+
59+
// 如果Redis不可用,从新闻源获取最新新闻列表作为初始缓存
60+
logger.info("Redis不可用,从新闻源获取初始缓存");
61+
List<FF14NewsUtils.NewsItem> newsList = ff14NewsUtils.fetchNewsList();
62+
if (!newsList.isEmpty()) {
63+
inMemoryCache = newsList.stream()
64+
.map(FF14NewsUtils.NewsItem::getId)
65+
.collect(Collectors.toList());
66+
logger.info("从新闻源加载初始缓存成功,共 {} 条新闻ID", inMemoryCache.size());
67+
} else {
68+
logger.warn("从新闻源获取初始缓存失败,使用空缓存");
69+
}
70+
} catch (Exception e) {
71+
logger.error("初始化缓存失败", e);
72+
}
73+
}
74+
4275
@Scheduled(fixedRate = 5 * 60 * 1000)
4376
public void fetchAndSendFF14News() {
4477
logger.info("开始获取FF14新闻列表");
@@ -111,7 +144,7 @@ private void sendNewsToGroup(List<FF14NewsUtils.NewsItem> newsList) {
111144
message.append(news.getLinkUrl());
112145
}
113146

114-
napCatQQUtil.sendGroupMessage(defaultGroupId, message.toString());
147+
napCatQQUtil.sendGroupMessage(phantomGroupId, message.toString());
115148
logger.info("已发送新闻: {}", news.getTitle());
116149

117150
Thread.sleep(1000);

0 commit comments

Comments
 (0)