Java電商項目-6.實現門戶首頁數據展示_Redis數據緩存


項目的Github地址

需求介紹

  • 為了縮短用戶看到首頁信息的時間, 我們把首頁顯示的類目信息, 廣告等數據放到Redis緩存中, 這樣就不用通過耗時的數據庫操作獲取數據, 而是直接從Redis緩存中獲取.
  • 在開始之前先記錄一個坑: 重啟虛擬機后nginx服務器關閉了, 導致nginx上的圖片無法訪問, 當再次啟動nginx的時候遇到

在這里插入圖片描述

  • 進入nginx.conf文件把HTTPS SERVER里面的root注釋掉后問題就沒有了, 能正常啟動.

在這里插入圖片描述

搭建Redis集群環境

  • 實現Redis 3主3從集群搭建

在這里插入圖片描述

  • Redis3.0 開始支持集群,在每個 Master 上存放着各不相同的數據,即分布式存儲的思想。
    集群中的每個節點都需要知道集群中自己之外的其它節點。
  • Redis 集群主(Master(M1,M2,M3))從(Slave(S1,S2,S3))復制、讀寫分離 。Master 只負責寫和
    同步數據給 Slave,Slave 負責被讀的任務,可以通過 Slave 的擴容提高讀的速度。

 

下面先描述單機版redis的安裝

  • 首先要把redis的安裝包上傳到虛擬機上.

在這里插入圖片描述

  • 安裝gcc-c++編譯器, 輸入命令: yum install gcc-c++(我的機器已經安裝過了, 第一次安裝中途需要輸入確定信息)

在這里插入圖片描述

  • 解壓redis安裝包: tar zxvf 壓縮包名...

在這里插入圖片描述

  • 進入解壓后的文件夾, 輸入指令make進行編譯, 結果如下

在這里插入圖片描述

  • 接下來執行安裝操作: make PREFIX=/usr/local/redis/ install(PREFIX指定了安裝位置)

在這里插入圖片描述

  • 進入bin目錄后就可以登陸redis了. 但是redis有兩種啟動方式, 默認是前台啟動: ./redis-server

在這里插入圖片描述

  • 使用前台啟動的話, 命令行就不能用來輸入命令了, 可以按Ctrl + C 強行退出.
  • 然后進入到解壓目錄, 把解壓文件中的redis.conf文件拷貝到安裝目錄下: cp redis.conf /usr/local/redis/bin

在這里插入圖片描述

  • 編輯redis.conf: vi redis.conf

在這里插入圖片描述

  • 重新啟動redis: ./redis-server redis.conf(指定配置文件)
  • 查看是否啟動: ps -ef | grep -i redis

在這里插入圖片描述

  • 在防火牆中配置6379端口為打開.

在這里插入圖片描述

  • 重啟防火牆: service iptables restart
  • 測試是否能夠連接上redis服務: ./redis-cli

在這里插入圖片描述

  • 單機安裝到這里便告一段落.

 

下面將進行Redis3主3從集群環境搭建

  • 安裝集群需要ruby腳本, 先解壓ruby腳本tar zxvf 壓縮包名

在這里插入圖片描述

  • 進入解壓目錄, 執行install.sh

在這里插入圖片描述

  • 然后創建redis集群相關目錄
  1. 首先在/opt目錄下創建redis目錄

在這里插入圖片描述

  1. 然后進入redis目錄, 在這創建3個集群相關目錄: mkdir conf, mkdir logs, mkdir data

在這里插入圖片描述

  • 其中conf目錄用於存放6個redis共用的配置文件
  • 需要將原始的redis.conf配置文件, 拷貝到/opt/redis/conf中, 更名為redis-common
  • 建議如果不熟悉的話在windows下進行配置, 然后在上傳到linux中. (該配置文件已經給出, 可以到素材文件夾中獲取)

在這里插入圖片描述

  • 然后進入/usr/local/redis/bin目錄中, 加入各個redis的配置文件.

在這里插入圖片描述

  • 關閉防火牆: service iptables stop

  • 然后啟動redis的6個服務. (先把之前啟動的單機redis進程kill掉)

  • 然后逐個啟動6個服務

在這里插入圖片描述

  • 接下來要創建集群:(按照自己的ip地址進行修改), 執行目錄為redis解壓目錄下的src目錄
  • ./redis-trib.rb create --replicas 1 192.168.117.130:6380 192.168.117.130:6381 192.168.117.130:6382 192.168.117.130:6383 192.168.117.130:6384 192.168.117.130:6385
  • 找到執行這行命令的目錄, redis壓縮包的解壓目錄/src: 復制執行上面的命令

在這里插入圖片描述

  • 下面連接上集群進行測試, 進入/usr/local/redis/bin
  • 輸入指令: ./redis-cli -c -p 6380, -c表示集群

在這里插入圖片描述

  • 這里記錄一下redis集群的重啟.
  • 重啟的參考連接
  • 大致步驟是要把/opt/redis/data 目錄下的文件清空, 然后重新啟動每個redis服務, 最后創建redis集群.

 

基於SOA架構, 創建門戶ashop-portal-web門戶項目

  • 在ashop項目下創建war類型子模塊ashop-portal-web

在這里插入圖片描述

  • 接着配置好pom.xml, src/main/resource下的配置文件和web.xml. 這些文件的配置可在源碼中獲得.
  • 然后把靜態資源復制到項目中
  • 接着創建PageController

在這里插入圖片描述

  • 打包部署項目, 顯示出網站首頁本階段完成.

在這里插入圖片描述

 

實現門戶首頁商品類目顯示

  • 創建遠程服務方法:

在這里插入圖片描述

在這里插入圖片描述

  • 然后封裝回顯數據的實體類對象
  • 在ashop-common模塊下的beans包中創建CatResult

在這里插入圖片描述

  • 創建CatNode實體類.

在這里插入圖片描述

  • 編寫web模塊的service接口和實現類, 里面涉及到json字符串的封裝

在這里插入圖片描述

  • 編寫controller, 這次響應回去的類型是text/html

在這里插入圖片描述

  • 最后實現這樣的效果

在這里插入圖片描述

 

實現門戶首頁大廣告輪播

  • 遠程服務提供者實現

在這里插入圖片描述

  • 編寫封裝響應信息的實體類.

在這里插入圖片描述

  • 編寫web模塊的service接口及實現類
    在這里插入圖片描述

  • 編寫controller

在這里插入圖片描述

  • 最后打包部署, 能在商品的大廣告位看到圖片

在這里插入圖片描述

 

實現商品類目緩存

  • 考慮到商城首頁的並發量很大, 如果每個用戶的請求都從數據庫中查詢商品類目效率將會很低. 我們將會用redis把商品類目緩存到內存中, 加快響應速度.
  • 整個邏輯是很好理解的:
  • 如果redis緩存中沒有商品類目數據, 就通過調用ashop-rpc遠程服務獲得數據, 通過處理后保存到redis中, 再返回給用戶進行展示.
  • 如果redis緩存中已經緩存了商品類目數據, 就直接返回給客戶, 不需要調用ashop-rpc.

 

  • 首先在pom文件中添加依賴

在這里插入圖片描述

  • 創建applicationContext-redis.xml
    在這里插入圖片描述
    在這里插入圖片描述

  • 在src下創建文件cache.properties, 記錄redis中保存商品類目的鍵, 注意要在上面的spring配置文件中添加context頭

在這里插入圖片描述

  • 接下來修改service實現類中的邏輯

在這里插入圖片描述

 

實現大廣告緩存, 緩存同步

  • 緩存的邏輯和上面商品類目的緩存一樣.

在這里插入圖片描述

緩存同步

  • 使用緩存就肯定要考慮緩存更新的問題. 如果后台更新了數據, 而redis緩存中的數據沒有更新, 用戶就會獲取到非最新數據, 出現臟讀.
  • 關於實現緩存與數據庫之間的同步, 以下提供兩種思路:
  1. 設置key的生命周期, 定期同步數據庫.
  2. 當調用遠程服務操作數據庫后, 同時清空緩存中的內容, 這樣當客戶訪問時服務器將重新到數據庫讀取數據.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM