2006-京淘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. 3.重启redis服务器 执行挂载命令

  4. 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
     

  5. 1.3 Redis入门案例

  6. @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"));

        }
     

  7. 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主机.
    一台主机占用一个槽道

  8. 1.6 SpringBoot整合Redis集群

    1.6.1 编辑pro配置文件

  9. # 配置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
     

  10. 1.6.2 编辑RedisConfig配置类

  11. @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);
        }
      }
     

  12. 1.6.3 编辑CacheAOP

  13. 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相关知识.

  14. 2. 京淘项目前台搭建

    2.1 京淘项目架构图

  15. 2.2 京淘前台项目构建

    2.2.1 创建项目

  16.  
  17. 2.2.2 添加继承/依赖/插件

    说明:编辑jt-web的pom.xml配置文件 其中打包方式注意改为war 其次 添加继承/依赖/插件

  18. <?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>
     

  19. 将课前资料中的文件导入.如图所示.

  20. 2.2.3 关于web项目数据源报错的说明

    SpringBoot程序启动时需要加载数据库但是没有数据源的配置信息.导致报错.

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

  22. 2.2.4 修改SpringBoot启动项

  23. 2.2.5 启动效果测试

  24. 2.2.6 编辑Nginx配置文件

    说明: 要求用户通过http://www.jt.com 访问localhost:8092服务器.
    修改nginx服务器之后重启即可.

  25. #配置jt-web服务器
        server {
            listen 80;
            server_name www.jt.com;

            location / {
                proxy_pass http://127.0.0.1:8092;
            }
        }
     

  26. 编辑hosts文件.

  27. 2.2.7 关于谷歌浏览器https禁用问题

    谷歌浏览器键入: chrome://net-internals/#hsts:
    修改完成之后,重启浏览器即可.

  28. 2.3 关于伪静态的说明

    2.3.1 业务说明

    问题1: 京东的商品有很多,如果都采用静态页面的形式为用户展现数据,如果有100万的商品,那么就需要100万个商品的xxx.html页面. 问:京东是这么做的吗???
    实现规则:
    应该动态获取商品的ID号.之后查询数据库,然后调整指定的页面,将数据进行填充即可.

    问题2: 为什么京东采用.html结尾的请求展现商品呢?
    答案: 采用.html结尾的页面,更加容易被搜索引擎收录,提高网站的曝光率.

  29. 2.3.2 搜索引擎工作原理

    工作原理核心: 倒排索引机制. 根据关键字检索文章的位置.

  30. 2.3.3 伪静态思想

    伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息。或者还想运用动态脚本解决一些问题。不能用静态的方式来展示网站内容。但是这就损失了对搜索引擎的友好面。怎么样在两者之间找个中间方法呢,这就产生了伪静态技术。伪静态技术是指展示出来的是以html一类的静态页面形式,但其实是用ASP一类的动态脚本来处理的。

    总结: 以.html结尾的动态页面.增强搜索引擎的友好性.

    2.3.4 伪静态实现

    说明:如果需要实现伪静态,则需要拦截.html结尾的请求即可. 否则程序认为你访问的是具体的静态资源如图所示

  31. 配置类介绍

  32. @Configuration                          //web.xml配置文件
    public class MvcConfigurer implements WebMvcConfigurer{
        
        //开启匹配后缀型配置
        @Override
        public void configurePathMatch(PathMatchConfigurer configurer) {

            //开启后缀类型的匹配.  xxxx.html
            configurer.setUseSuffixPatternMatch(true);
        }
    }
     

  33.  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值