发布文章页面 查询文章列表
为什么不直接使用admin后台的接口进行查询:
- 因为业务不同 admin是用于管理类别 而发布文章是用于读 若有一天在数据库中添加一个is_delete字段 若两个业务使用同一个接口 耦合高 admin需要将删除未删除的类别查出来 而文章页面只用将未删除的页面查出来 这样就形成了冲突 不易维护
- 业务逻辑不同 admin需要从数据库中查询 而写文章页面因为频繁查询 所以要从redis中读取 以减轻数据库的压力
业务逻辑:
- 和用户登录基本相同 想从redis中查询数据若无数据再从数据库中查询 并保存至数据库redis中
- 当进行修改和删除文章列表时 需要刷新缓存数据 直接将redis中的旧数据删除就行了 当需要获取类别列表时 重新从数据库中查询 保存至redis
@Override
public void insertCategory(Category category) {
// 当分类进行修改时 需要将redis中的缓存数据删除 这样一来 用户在次请求分类列表时 查询到的是最新的数据
// 如果不这也做的话 因为redis中的数据没有更新 所以查询到的数据还是原来的旧数据
categoryMapper.insert(category);
redisOperator.del(CATEGORY_CACHE);
}
@Override
public void updateCategory(Category category) {
// 当分类进行修改时 需要将redis中的缓存数据删除 这样一来 用户在次请求分类列表时 查询到的是最新的数据
// 如果不这也做的话 因为redis中的数据没有更新 所以查询到的数据还是原来的旧数据
categoryMapper.updateById(category);
redisOperator.del(CATEGORY_CACHE);
}
@Override
public List<Category> getArticlePageCats() {
// 这个接口为什么不和上一个接口合并:
// 首先是因为业务模块不同 如果在时间看中添加一个新的字段 is_delete 这个字段是否为true都需要在管理员页面中显示 而文章页面为is_delete字段为false则不用显示
// 因为分类信息是需要频繁查询 可以将数据存储至redis中 以此来减弱数据库的压力
// 和用户页面信息缓存一样 先从redis中查询 如果查询不到信息再从数据库中查 并把查询到的分类信息保持到redis中 若能查到 直接返回前端即可
String jsonResult = redisOperator.get(CATEGORY_CACHE);
if (StringUtils.isBlank(jsonResult)) {
List<Category> categories = categoryMapper.selectList(null);
String categoryToJson = null;
try {
categoryToJson = objectMapper.writeValueAsString(categories);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
redisOperator.set(CATEGORY_CACHE, categoryToJson);
return categories;
} else {
String categoryToJson = redisOperator.get(CATEGORY_CACHE);
List list = null;
try {
list = objectMapper.readValue(categoryToJson, List.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return list;
}
}
@Override
public List queryCategoryByList() {
return categoryMapper.selectList(null);
}
虽然道路是曲折的,但前途是光明的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律