发布文章页面 查询文章列表

为什么不直接使用admin后台的接口进行查询:

  1. 因为业务不同 admin是用于管理类别 而发布文章是用于读 若有一天在数据库中添加一个is_delete字段 若两个业务使用同一个接口 耦合高 admin需要将删除未删除的类别查出来 而文章页面只用将未删除的页面查出来 这样就形成了冲突 不易维护
  2. 业务逻辑不同 admin需要从数据库中查询 而写文章页面因为频繁查询 所以要从redis中读取 以减轻数据库的压力

业务逻辑:

  1. 和用户登录基本相同 想从redis中查询数据若无数据再从数据库中查询 并保存至数据库redis中
  2. 当进行修改和删除文章列表时 需要刷新缓存数据 直接将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);
    }
posted @   RainbowMagic  阅读(97)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示