关于java:京淘Day15

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);
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理