redis分片特點:
1.可以實現Redis記憶體資料的擴容.
2.redis分片本身沒有高可用效果的.如果宕機將直接影響使用者的使用.
redis哨兵特點:
1.Redis哨兵可以實現Redis節點的高可用.但是哨兵本身沒有實現高可用機制.(最好不要引入第三方)
2.Redis哨兵有主從的結構 實現了記憶體資料的備份. 但是沒有實現記憶體擴容的效果.
升級:
需要Redis內容擴容同時需要Redis高可用性所以應該使用Redis叢集.
關閉所有的redis伺服器
sh stop.sh
刪除多餘的檔案
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
@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"));
}
說明: 當叢集進行選舉時,如果連續3次都出現了平票的結果的則可能出現腦裂的現象.
問題: 出現腦裂現象的概率是多少??? 1/8
數學建模:
拋銀幣連續3次出現平票的概念是多少? 1/8=12.5%
第一次: 正正 正反 反正 反反 1/2
第二次: 正正 正反 反正 反反 1/2
第三次: 正正 正反 反正 反反 1/2
預防: 增加主節點的數量可以有效的降低腦裂現象的發生.
問題1: Redis叢集中最多儲存16384個資料???
錯的 分割區只負責資料的劃分 資料的儲存由記憶體決定.
crc16(key1)%16384 = 1000
crc16(key2)%16384 = 1000
問題2: Redis叢集中最多有多少臺主機?? 16384主機.
一臺主機佔用一個槽道
# 設定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
@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.框架加強階段
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相關知識.
說明:編輯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>
將課前資料中的檔案匯入.如圖所示.
SpringBoot程式啟動時需要載入資料庫但是沒有資料來源的設定資訊.導致報錯.
如何解決: 新增排除資料來源啟動.
說明: 要求使用者通過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檔案.
谷歌瀏覽器鍵入: chrome://net-internals/#hsts:
修改完成之後,重新啟動瀏覽器即可.
問題1: 京東的商品有很多,如果都採用靜態頁面的形式為使用者展現資料,如果有100萬的商品,那麼就需要100萬個商品的xxx.html頁面. 問:京東是這麼做的嗎???
實現規則:
應該動態獲取商品的ID號.之後查詢資料庫,然後調整指定的頁面,將資料進行填充即可.
問題2: 為什麼京東採用.html結尾的請求展現商品呢?
答案: 採用.html結尾的頁面,更加容易被搜尋引擎收錄,提高網站的曝光率.
工作原理核心: 倒排索引機制. 根據關鍵字檢索文章的位置.
偽靜態是相對真實靜態來講的,通常我們為了增強搜尋引擎的友好面,都將文章內容生成靜態頁面,但是有的朋友為了實時的顯示一些資訊。或者還想運用動態指令碼解決一些問題。不能用靜態的方式來展示網站內容。但是這就損失了對搜尋引擎的友好面。怎麼樣在兩者之間找個中間方法呢,這就產生了偽靜態技術。偽靜態技術是指展示出來的是以html一類的靜態頁面形式,但其實是用ASP一類的動態指令碼來處理的。
總結: 以.html結尾的動態頁面.增強搜尋引擎的友好性.
說明:如果需要實現偽靜態,則需要攔截.html結尾的請求即可. 否則程式認為你存取的是具體的靜態資源如圖所示
設定類介紹
@Configuration //web.xml組態檔
public class MvcConfigurer implements WebMvcConfigurer{
//開啟匹配字尾型設定
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
//開啟字尾型別的匹配. xxxx.html
configurer.setUseSuffixPatternMatch(true);
}
}