2006-京淘Day15

2020-10-17 12:00:28

1. 實現Redis叢集

1.1 為什麼需要搭建叢集

redis分片特點:
1.可以實現Redis記憶體資料的擴容.
2.redis分片本身沒有高可用效果的.如果宕機將直接影響使用者的使用.

redis哨兵特點:
1.Redis哨兵可以實現Redis節點的高可用.但是哨兵本身沒有實現高可用機制.(最好不要引入第三方)
2.Redis哨兵有主從的結構 實現了記憶體資料的備份. 但是沒有實現記憶體擴容的效果.

升級:
需要Redis內容擴容同時需要Redis高可用性所以應該使用Redis叢集.

1.2 關於Redis叢集搭建問題說明

  1. 關閉所有的redis伺服器
    sh stop.sh

  2. 刪除多餘的檔案
    在這裡插入圖片描述
    3.重新啟動redis伺服器 執行掛載命令

redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000 192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003 192.168.126.129:7004 192.168.126.129:7005

1.3 Redis入門案例

@Test
    public void testCluster(){
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.126.129", 7000));
        nodes.add(new HostAndPort("192.168.126.129", 7001));
        nodes.add(new HostAndPort("192.168.126.129", 7002));
        nodes.add(new HostAndPort("192.168.126.129", 7003));
        nodes.add(new HostAndPort("192.168.126.129", 7004));
        nodes.add(new HostAndPort("192.168.126.129", 7005));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        jedisCluster.set("cluster", "叢集的測試!!!!");
        System.out.println(jedisCluster.get("cluster"));

    }

1.4 關於選舉機制-腦裂現象

說明: 當叢集進行選舉時,如果連續3次都出現了平票的結果的則可能出現腦裂的現象.
問題: 出現腦裂現象的概率是多少??? 1/8
數學建模:
拋銀幣連續3次出現平票的概念是多少? 1/8=12.5%
第一次: 正正 正反 反正 反反 1/2
第二次: 正正 正反 反正 反反 1/2
第三次: 正正 正反 反正 反反 1/2
預防: 增加主節點的數量可以有效的降低腦裂現象的發生.

1.5 關於叢集面試題

問題1: Redis叢集中最多儲存16384個資料???
錯的 分割區只負責資料的劃分 資料的儲存由記憶體決定.
crc16(key1)%16384 = 1000
crc16(key2)%16384 = 1000
問題2: Redis叢集中最多有多少臺主機?? 16384主機.
一臺主機佔用一個槽道

1.6 SpringBoot整合Redis叢集

1.6.1 編輯pro組態檔

# 設定redis單臺伺服器
redis.host=192.168.126.129
redis.port=6379

# 設定redis分片機制
redis.nodes=192.168.126.129:6379,192.168.126.129:6380,192.168.126.129:6381

# 設定哨兵節點
redis.sentinel=192.168.126.129:26379

# 設定redis叢集
redis.clusters=192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192.168.126.129:7003,192.168.126.129:7004,192.168.126.129:7005

1.6.2 編輯RedisConfig設定類

@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class JedisConfig {

    @Value("${redis.clusters}")
    private String clusters;

    @Bean
    public JedisCluster jedisCluster(){
        Set<HostAndPort> nodes = new HashSet<>();
        String[] nodesArray = clusters.split(",");
        for (String node : nodesArray){
            String host = node.split(":")[0];
            int port = Integer.parseInt(node.split(":")[1]);
            HostAndPort hostAndPort = new HostAndPort(host,port);
            nodes.add(hostAndPort);
        }
        return new JedisCluster(nodes);
    }
  }

1.6.3 編輯CacheAOP

在這裡插入圖片描述

1.7 關於京淘專案後臺說明

知識點概括:
1.框架加強階段
1.1SpringBoot 各個組態檔的說明 pom.xml設定 常用註解 springboot啟動執行的流程
1.2 關於SpringBoot常見用法 屬性賦值 @Value , 開發環境優化 ,組態檔引入 ,整合Mybatis , 整合MybatisPlus ,整合web資源(JSP)
1.3京淘後臺專案搭建
1.3.1分散式思想 按照模組/ 按照層級拆分
1.3.2 聚合工程建立的思路 父級專案 統一管理jar包 ,工具API專案, 業務功能系統
1.4 UI工具 前端與後端進行資料互動時 如果想要展現特定的格式結構,則必須按照要求返回VO物件.
1.5 JSON結構形式 1.Object型別 2.Array型別 3. 複雜型別(可以進行無限層級的巢狀)
1.6 後臺商品/商品分類的CURD操作.
1.7 引入富文字編輯器 /實現檔案上傳業務.
1.8 反向代理/正向代理
1.9 NGINX 實現圖片回顯, NGINX安裝/命令/程序項說明/域名的代理/負載均衡機制/相關屬性說明
1.10 windows tomcat伺服器叢集部署.
2.Linux學習
2.1 什麼是VM虛擬機器器. 網路設定說明 橋接/NAT模式
2.2 介紹Linux發展, 介紹Linux基本命令 安裝Linux JDK tomcatLinux部署. Linux安裝Mysql資料
2.3 Linux安裝Nginx伺服器. 整個專案Linux部署.

3.專案真實部署
3.1 實現資料的讀寫分離/負載均衡/資料庫高可用 mycat
3.2 Redis 命令/redis單臺操作/redis分片/redis哨兵/redis叢集/
3.3 AOP相關知識.

在這裡插入圖片描述

2. 京淘專案前臺搭建

2.1 京淘專案架構圖

在這裡插入圖片描述

2.2 京淘前臺專案構建

2.2.1 建立專案

在這裡插入圖片描述

2.2.2 新增繼承/依賴/外掛

說明:編輯jt-web的pom.xml組態檔 其中打包方式注意改為war 其次 新增繼承/依賴/外掛

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>jt-web</artifactId>
    <packaging>war</packaging>

    <parent>
        <artifactId>jt</artifactId>
        <groupId>com.jt</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <!--2.新增依賴資訊-->
    <dependencies>
        <!--依賴實質依賴的是jar包檔案-->
        <dependency>
            <groupId>com.jt</groupId>
            <artifactId>jt-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <!--3.新增外掛-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

將課前資料中的檔案匯入.如圖所示.
在這裡插入圖片描述

2.2.3 關於web專案資料來源報錯的說明

SpringBoot程式啟動時需要載入資料庫但是沒有資料來源的設定資訊.導致報錯.
在這裡插入圖片描述
如何解決: 新增排除資料來源啟動.
在這裡插入圖片描述

2.2.4 修改SpringBoot啟動項

在這裡插入圖片描述

2.2.5 啟動效果測試

在這裡插入圖片描述

2.2.6 編輯Nginx組態檔

說明: 要求使用者通過http://www.jt.com 存取localhost:8092伺服器.
修改nginx伺服器之後重新啟動即可.

#設定jt-web伺服器
	server {
		listen 80;
		server_name www.jt.com;

		location / {
			proxy_pass http://127.0.0.1:8092;
		}
	}

編輯hosts檔案.
在這裡插入圖片描述

2.2.7 關於谷歌瀏覽器https禁用問題

谷歌瀏覽器鍵入: chrome://net-internals/#hsts:
修改完成之後,重新啟動瀏覽器即可.
在這裡插入圖片描述

2.3 關於偽靜態的說明

2.3.1 業務說明

問題1: 京東的商品有很多,如果都採用靜態頁面的形式為使用者展現資料,如果有100萬的商品,那麼就需要100萬個商品的xxx.html頁面. 問:京東是這麼做的嗎???
實現規則:
應該動態獲取商品的ID號.之後查詢資料庫,然後調整指定的頁面,將資料進行填充即可.

問題2: 為什麼京東採用.html結尾的請求展現商品呢?
答案: 採用.html結尾的頁面,更加容易被搜尋引擎收錄,提高網站的曝光率.
在這裡插入圖片描述

2.3.2 搜尋引擎工作原理

工作原理核心: 倒排索引機制. 根據關鍵字檢索文章的位置.
在這裡插入圖片描述

2.3.3 偽靜態思想

偽靜態是相對真實靜態來講的,通常我們為了增強搜尋引擎的友好面,都將文章內容生成靜態頁面,但是有的朋友為了實時的顯示一些資訊。或者還想運用動態指令碼解決一些問題。不能用靜態的方式來展示網站內容。但是這就損失了對搜尋引擎的友好面。怎麼樣在兩者之間找個中間方法呢,這就產生了偽靜態技術。偽靜態技術是指展示出來的是以html一類的靜態頁面形式,但其實是用ASP一類的動態指令碼來處理的。

總結: 以.html結尾的動態頁面.增強搜尋引擎的友好性.

2.3.4 偽靜態實現

說明:如果需要實現偽靜態,則需要攔截.html結尾的請求即可. 否則程式認為你存取的是具體的靜態資源如圖所示
在這裡插入圖片描述
設定類介紹

@Configuration						  //web.xml組態檔
public class MvcConfigurer implements WebMvcConfigurer{
	
	//開啟匹配字尾型設定
	@Override
	public void configurePathMatch(PathMatchConfigurer configurer) {

		//開啟字尾型別的匹配.  xxxx.html
		configurer.setUseSuffixPatternMatch(true);
	}
}