(自用)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
繁體地址,請注明出處:http://hk.pswp.cn/news/907072.shtml
英文地址,請注明出處:http://en.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…