关于redis集群:第三阶段-Day15-Redis集群搭建

11次阅读

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

  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.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.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 , 整合 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 相干常识.

  1. 京淘我的项目前台搭建

============

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

正文完
 0