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.3Redis入门案例
@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
第一次: 正正 正反 反正 反反 1/2
第二次: 正正 正反 反正 反反 1/2
第三次: 正正 正反 反正 反反 1/2
预防:增加主节点的数量可以有效降低脑裂现象的发生.
1.5关于集群的面试题
问题1:Redis集群中最多存储16384个数据????
错的,分区只负责数据的划分,数据的存储由内存决定.
crc16(key1)%16384=1000
crc16(key2)%16384=1000
问题2:Redis集群中最多有多少台主机??16384
一个主机占用一个槽道
1.6SpringBoot整合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,整合Mybatis-Plus,整合WEB资源(JSP)
1.3京淘后台搭建
1.3.1分布式思想 按照模块/按照层级划分
1.3.2聚合工程创建的思路,父级项目,统一管理jar包,工具API项目,业务功能系统
1.4UI工具前端与后端进行数据交互时,如果想要展现特定的格式结构,则必须按照要求返回VO对象.
1.5JSON结构形式1.Object类型2.Array类型3.复杂类型(可以进行无限层级的嵌套).
1.6后台商品/商品分类的CURD操作.
1.7引入富文本编辑器/实现文件上传业务.
1.8反向代理/正向代理
1.9NGINX实现图片的回显,NGINX安装/命令/进程项说明/域名的代理/负载均衡机制/相关属性说明/
1.10window tomcat服务器的部署
2Linux学习
2.1什么是VM虚拟机.网络配置说明 桥接/NAT模式
2.2介绍Linux的发展,介绍Linux的命令 安装Linux JDK tomcatLinux部署.Linux安装MySQL数据
2.3Linux安装nginx服务器:整个项目linux部署.
3.项目真实部署
3.1实现数据的读写分离/负载均衡/数据库高可用mycat
3.2Redis命令/redis单台操作/redis分片/redis哨兵/redis集群
3.3AOP相关知识

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项目数据源报错的说明
SringBoot程序启动时需要加载数据库但是没有数据源的配置信息.导致报错.

如何解决:添加排除数据源启动

2.2.4修改SpringBoot启动项

2.2.5启动效果测试

2.2.6编辑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);
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。