关于java:京淘Day15

4次阅读

共计 4797 个字符,预计需要花费 12 分钟才能阅读完成。

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);
    }
}
正文完
 0