- 实现Redis集群
=============
1.1 为什么须要搭建集群
redis分片特点:
1.能够实现Redis内存数据的扩容.
2.redis分片自身没有高可用成果的.如果宕机将间接影响用户的应用.
redis哨兵特点:
1.Redis哨兵能够实现Redis节点的高可用.然而哨兵自身没有实现高可用机制.(最好不要引入第三方)
2.Redis哨兵有主从的构造 实现了内存数据的备份. 然而没有实现内存扩容的成果.
降级:
须要Redis内容扩容同时须要Redis高可用性所以应该应用Redis集群.
1.2 对于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`
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.129redis.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.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); }}