(自用)Java学习-5.13(Redis,OSS)

核心功能实现

1. 类别导航动态加载

  • 前端实现

    // 加载一级分类
    $.ajax({url: '/category/showFirstMenu?pid=0',success: function(resp) {resp.forEach(item => {$(".index-menu").append(`<li onmouseover="showSecondMenu(${item.id})">${item.name}</li>`);});}
    });// 加载二级分类
    function showSecondMenu(pid) {$.ajax({url: `/category/showFirstMenu?pid=${pid}`,success: function(resp) {$(".second-menu").empty();resp.forEach(item => {$(".second-menu").append(`<li>${item.name}</li>`);});}});
    }

  • 后端实现

    @RestController
    @RequestMapping("/category")
    public class CategoryController {@GetMapping("/showFirstMenu")public List<Category> showFirstMenu(Integer pid) {return categoryService.getByParentId(pid);}
    }

2. Banner图轮播与缓存优化

  • Redis集成

    @RequestMapping("/showBanner")
    public List<String> showBanner() {// 检查缓存if (redisTemplate.hasKey("banner")) {return redisTemplate.opsForList().range("banner", 0, -1);} else {// 数据库查询并缓存List<Banner> banners = bannerService.getAll();List<String> urls = banners.stream().map(Banner::getImgUrl).collect(Collectors.toList());redisTemplate.opsForList().rightPushAll("banner", urls);return urls;}
    }

3. 商品展示模块

  • 热门与新品查询

    <!-- 热门商品 -->
    <select id="getHotProduct" resultType="Product">SELECT * FROM t_product ORDER BY sales DESC LIMIT 4
    </select><!-- 最新商品 -->
    <select id="getNewProduct" resultType="Product">SELECT * FROM t_product ORDER BY create_time DESC LIMIT 4
    </select>

二、云存储解决方案(阿里云OSS)

1. 配置与上传流程

  1. 依赖引入

    <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
    </dependency>

  2. 文件上传接口

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) {String endpoint = "oss-cn-hangzhou.aliyuncs.com";OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject("your-bucket", "folder/" + file.getOriginalFilename(), file.getInputStream());return "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/folder/" + file.getOriginalFilename();
    }

2. 前端集成

<!-- 文件上传表单 -->
<form action="/upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><button type="submit">上传</button>
</form><!-- 图片展示 -->
<img src="https://your-bucket.oss-cn-hangzhou.aliyuncs.com/folder/image.jpg">

三、性能优化策略

1. 缓存机制对比

场景技术选型优势
高频静态数据Redis毫秒级响应,支持数据持久化
动态查询结果MyBatis二级缓存减少数据库压力,自动失效机制

2. SQL优化技巧

  • 索引优化:为parent_idsalescreate_time字段添加索引

  • 分页查询:使用LIMIT offset, size避免全表扫描

  • 避免SELECT *:明确指定查询字段

四、常见问题解决方案

1. 跨域问题

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST");}
}

2. 图片上传失败排查

  1. OSS配置检查

    • Endpoint是否正确

    • Bucket权限是否为公共读

    • AccessKey是否有效

  2. 代码调试

    try {ossClient.putObject(...);
    } catch (OSSException e) {log.error("OSS错误: {}", e.getErrorMessage());
    } finally {ossClient.shutdown(); // 确保关闭连接
    }

五、项目部署建议

1. 环境分离

环境数据库RedisOSS Bucket
开发本地MySQL本地Docker实例测试Bucket
生产阿里云RDS云数据库Redis生产Bucket

2. 监控与日志

  • Spring Boot Actuator:集成健康检查与性能监控

  • Logback+ELK:实现分布式日志收集与分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/907072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025电工杯A题电工杯数学建模思路代码文章教学:光伏电站发电功率日前预测问题

完整内容请看文章最下面的推广群 已更新数据、思路和模型 问题1&#xff1a;基于历史功率的光伏电站发电特性分析 建模与求解思路&#xff1a; 首先&#xff0c;需要收集光伏电站的历史发电功率数据、地理位置信息&#xff08;经纬度、海拔、倾角等&#xff09;以及太阳辐照…

Visual Studio 调试中 PDB 与图像不匹配

Visual Studio 调试中 PDB 与图像不匹配 在使用 Visual Studio 进行本地或远程调试时&#xff0c;很多开发者会遇到 PDB 加载失败、符号不匹配的问题&#xff0c;甚至程序进程未退出&#xff0c;导致 .exe 文件无法成功覆盖。本文详细解析了从后台进程清理、构建产物验证、模块…

WebRTC:实时通信的未来之路

WebRTC&#xff1a;实时通信的未来之路 目录 WebRTC&#xff1a;实时通信的未来之路一、背景介绍二、使用方式三、前途展望 一、背景介绍 随着互联网的飞速发展&#xff0c;实时音视频通信需求日益增长。传统的音视频通信多依赖于专有协议和插件&#xff08;如Flash、ActiveX等…

华为OD机试真题——猴子吃桃/爱吃蟠桃的孙悟空(2025B卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 B卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《猴子…

【Java学习笔记】单例设计模式

单例设计模式 单例模式介绍 1. 所谓类的单例设计模式&#xff0c;就是采取一定的方法保证在整个的软件系统中 &#xff08;1&#xff09;对某个类只能存在一个对象实例 &#xff08;2&#xff09;并且该类只提供一个取得对象实例的方法 2. 分类&#xff08;两种方式&#xf…

vue实例 与组件实例

vue实例 与组件实例流程图 &#x1f9e9; 基本解释 ✅ Vue 实例 Vue 实例是通过 new Vue({…}) 创建的对象&#xff0c;是整个应用的根节点。 const vm new Vue({el: #app,data: { msg: Hello Vue } });是整个应用的起点。只有一个根 Vue 实例&#xff08;通常&#xff09;…

Hive 分桶(Bucketing)深度解析:原理、实战与核心概念对比

一、分桶的意义&#xff1a;比分区更细的粒度管理 1.1 解决分区数据不均匀问题 分区的局限性&#xff1a;分区基于表外字段&#xff08;如时间字段&#xff09;划分数据&#xff0c;但可能导致部分分区数据量过大&#xff0c;部分过小&#xff0c;无法进一步细化。 分桶的定…

pytest+allure+allure-pytest 报告输出遇到的问题汇总

文章目录 前言问题一&#xff1a;module allure has no attribute severity_level问题二&#xff1a;ERROR:file or directory not found: ‐vs问题三&#xff1a;生成的 html 报告是空的&#xff0c;明明有测试用例执行完成&#xff0c;但报告没有显示数据 前言 pytestallure…

升级node@22后运行npm install报错 distutils not found

从node20升级到node22后&#xff0c;在运行 npm install 的时候报了很多 gyp 错误&#xff0c;其中包括 npm error npm error ModuleNotFoundError: No module named distutils。 问题原因是我在使用 brew install node22 的过程中自动把 python 升级到了 3.13。而 distutils …

IPD流程落地:项目任务书Charter开发

目录 简介 第一个方面&#xff0c;回答的是Why的问题。 第二点&#xff0c;要回答做什么的问题&#xff0c;也就是产品定义What的问题。 第三点就是要回答执行策略与计划的问题&#xff0c;也就是How、When、Who的问题。 第四点是对上述这些分析的总结分析&#xff0c;要为…

Qt popup窗口半透明背景

半透明弹窗需要paintEvent()接口支持 方法一&#xff1a;使用setStyleSheet设置半透明样式&#xff0c;如果是子窗口&#xff0c;则可注释构建函数内属性设置 class TranslucentWidget : public QWidget { public: explicit TranslucentWidget(QWidget *parent nullptr)…

Excel快捷键大全

Excel快捷键 工作表操作快速选择区域快速跳转/视图操作单元格公式批量填充与编辑功能键打开/关闭工作簿 工作表操作 快捷键功能ShiftF11(或Alt→H→I→S)默认插入新工作表到当前工作表左侧的左侧Alt→E→L→Enter删除当前工作表&#xff0c;删除后不可销&#xff0c;须谨慎操作…

SQLMesh 用户定义变量详解:从全局到局部的全方位配置指南

SQLMesh 提供了灵活的多层级变量系统&#xff0c;支持从全局配置到模型局部作用域的变量定义。本文将详细介绍 SQLMesh 的四类用户定义变量&#xff08;global、gateway、blueprint 和 local&#xff09;以及宏函数的使用方法。 一、变量类型概述 SQLMesh 支持四种用户定义变量…

爬虫学习-Scrape Center spa6 超简单 JS 逆向

关卡 spa6 电影数据网站&#xff0c;无反爬&#xff0c;数据通过 Ajax 加载&#xff0c;数据接口参数加密且有时间限制&#xff0c;适合动态页面渲染爬取或 JavaScript 逆向分析。 首先抓包发现get请求的参数token有加密。 offset表示翻页&#xff0c;limit表示每一页有多少…

webtrees——在线协作家谱

webtrees——在线协作家谱 内容 执照编码风格和标准介绍系统要求互联网浏览器兼容性安装升级建设与发展Gedcom&#xff08;家谱&#xff09;文件安全备份从备份还原 执照 webtrees&#xff1a;在线家谱版权所有 2022 webtrees 开发团队 该程序是免费软件&#xff1a;您可以根据…

day 37

模型的保存和加载 仅保存模型参数 - 原理&#xff1a;保存模型的权重参数&#xff0c;不保存模型结构代码。加载时需提前定义与训练时一致的模型类。 - 优点&#xff1a;文件体积小&#xff08;仅含参数&#xff09;&#xff0c;跨框架兼容性强&#xff08;需自行定义模型结…

MFC:获取所有打印机的名称(打印机模块-2)

背景&#xff1a; “遍历当前用户的每一台虚拟打印机&#xff0c;将其默认纸张设置为 A4 并设置为纵向。” 实现原理&#xff1a; 1.从当前用户的注册表读取所有已配置的打印机&#xff1b; 2.遍历每台打印机&#xff1b; 3.输出其逻辑与实际纸张大小&#xff1b; 4.尝试设置…

Python驱动的游戏场景实时生成:如何用AI创造无限可能?

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…

手机发热怎么办?

1⃣关闭后台程序 &#x1f449; 把后台运行的其他程序关掉&#xff0c;玩游戏或看视频前&#xff0c;先清理一下后台&#xff0c;避免发热 2⃣“脱掉”手机壳 &#x1f449;夏天可以换成轻薄的散热壳&#xff0c;比如金属、亚克力材质的&#xff0c;或者暂时取下手机壳 3⃣物理…

【安全攻防与漏洞​】​​HTTPS中的常见攻击与防御​​

HTTPS 中常见攻击与防御策略涵盖中间人攻击&#xff08;MITM&#xff09;、SSL剥离、重放攻击等&#xff0c;帮助构建安全的 HTTPS 通信环境&#xff1a; 一、中间人攻击&#xff08;MITM&#xff09; 攻击原理 场景&#xff1a;攻击者通过伪造证书或劫持网络流量&#xff0c…