CGB2005-京淘15(Spring整合Redis集群 redis储存的原理---Hash槽/分区算法 京淘后台总结 前台搭建 前台不加载数据源注释 谷歌禁用https 伪静态)

注意

1.Redis集群说明
Redis集群数据存储的原理:Hash槽算法又叫作分区算法
Spring整合Redis集群
2.京淘项目后台的总结
3.京淘项目前台搭建
注意前端配置文件不需要连接数据库,需要在前段的主启动类进行配置
谷歌浏览器禁用https说明
4 关于伪静态的说明 搜索引擎原理 伪静态思想 测试

1.Redis集群说明

说明:从速度上来说,分片的效率比集群要快。
因为:分片只负责用户的存取,计算发生在服务端。而redis储存和计算都发生在集群中,所以相对较慢。

1.1 Redis集群数据存储的原理

问题:redis集群的存数据的时候,具体存的是那台主机???
答:通过算法进行控制。
注意:
1).redis集群用的算法是 Hash槽算法又叫作分区算法.
2).分片是一致性hash算法。

说明: RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]%16384)映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间.
算法:哈希函数: Hash()=CRC16[key]%16384
在这里插入图片描述

当向redis集群中插入数据时,首先将key进行计算.之后将计算结果匹配到具体的某一个槽的区间内,之后再将数据set到管理该槽的节点中.
在这里插入图片描述

1.2 面试题说明

在这里插入图片描述

问题1: Redis集群中最多存储16384个数据???
错的 分区只负责数据的划分 数据的存储由内存决定.
crc16(key1)%16384 = 1000
crc16(key2)%16384 = 1000

问题2 : Redis集群中最多有多少台主机?? 16384主机.
一台主机占用一个槽道

1.3 Spring整合Redis集群

1.3.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集群
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.3.2 编辑配置类

在这里插入图片描述

@Configuration //标识我是一个配置类
@PropertySource("classpath:/properties/redis.properties")
public class JedisConfig {

    @Value("${redis.clusters}")
    private String nodes; //node,node,node

    @Bean //实例化集群的对象之后交给Spring容器管理
    public JedisCluster jedisCluster(){
        Set<HostAndPort> set = new HashSet<>();
        String[] nodeArray = nodes.split(",");
        for(String node : nodeArray){ //host:port
            String[] nodeTemp = node.split(":");
            String host = nodeTemp[0];
            int port = Integer.parseInt(nodeTemp[1]);
            HostAndPort hostAndPort = new HostAndPort(host, port);
            set.add(hostAndPort);
        }
        return new JedisCluster(set);
    }
  }

1.3.3 修改CacheAOP注入对象

说明:把之前的哨兵注入,注释掉。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.4 页面效果展现

说明:只要数据可以正确获取 则表示运行成功!!
在这里插入图片描述

2 关于京淘项目后台说明

知识点概括:
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相关知识.
在这里插入图片描述

3 京淘项目前台搭建

说明:
1).一般访问一家大型的网站时,往往都是先访问前台服务器,之后有前台服务器跳转访问后台服务器。
2). 域名网址变化:说明访问的服务器发生变化。
3).前台服务器一般不会直接连接数据库访问,因为如果前台后台服务器都连接数据库,将来如果连接的数据库中表发生变化则前台后台都要进行修改,维护的成本也比较大。
在这里插入图片描述
在这里插入图片描述

3.1 京淘项目架构图设计

说明:在分布式的条件下,由web服务器向后端的业务服务器获取数据.通过http请求协议利用远程调用的方式获取业务数据,将来采用更加通用的json方式返回.实现跨系统之间的数据访问.并且每个节点根据用户访问量的不同搭建不同规模的集群.从而实现用户的高并发的访问.

在这里插入图片描述

3.2 京淘项目web创建

3.2.1 web项目创建说明

1.端口号: 8092
2.域名: http://www.jt.com
3.web服务器不需要链接数据库.
4.打包: war (JSP页面)
5.注意事项: 继承父级jt/依赖工具APIjt-common/配置maven插件.

3.2.2 创建jt-web项目(maven方式)

在这里插入图片描述

在这里插入图片描述

3.2.3 添加继承/依赖/插件

说明:编译jt-web的pom.xml配置文件 因为需要web资源所以打包方式注意改为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>

    <!--添加依赖项-->
    <dependencies>
        <dependency>
            <groupId>com.jt</groupId>
            <artifactId>jt-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <!--添加插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.2.4 导入静态资源文件

说明:将课前资料中的静态资源文件进行导入,替换src。
在这里插入图片描述

在这里插入图片描述

3.2.5 关于前端配置文件说明

说明:前端服务器不需要连接数据,所以在配置文件不配置数据库连接,只需要配置展现页面的配置。
在这里插入图片描述

3.2.6 配置web项目启动项

说明:在web项目的主启动类选中main方法右键执行。
在这里插入图片描述

在这里插入图片描述

3.2.7 关于web项目配置数据源异常说明

在主启动类中去掉注释运行。
在这里插入图片描述
报错说明:由于jt-web继承jt项目,所以web项目含有数据源的jar包文件,由于springboot项目启动时有开箱即用 自动配置的功能,此时启动web项目加载到pom文件中的关于数据库的jar包文件时会在配置文件中查找配置,但是由于web的配置文件不需要数据库连接,所以会报错。
在这里插入图片描述
解决方案: 以不加载的形式运行。
在这里插入图片描述

3.2.8 项目启动效果

url:localhost:8092
在这里插入图片描述

3.2.9 配置nginx(windows)

需求说明: 用户通过http://www.jt.com的方式访问服务器localhost:8092,修改之后重启nginx即可.
在这里插入图片描述

#搭建jt-web服务器
	server {
		listen 80;
		#拦截的名称
		server_name www.jt.com;
		
       #拦截的路径
		location / {
			proxy_pass http://localhost:8092;
		}
	}

3.2.10 修改hosts文件(域名问题)

在这里插入图片描述

3.2.11 域名测试

在这里插入图片描述

3.3 谷歌浏览器禁用https

如果用谷歌浏览器无法正确访问,则需要进行配置。
步骤说明:
1.浏览器键入 chrome://net-internals/#hsts
在这里插入图片描述

4 关于伪静态的说明

4.1 业务说明

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

问题2: 方法里面的拦截路径RequestMapping(“xxxx”)该怎么写呢???
url1:localhost:8091/items/addUser
url1:localhost:8091/items/updateItem
url1:localhost:8091/items/100100.html
@RequestMapping(“/items/{itemId}.html”)
说明:如果需要实现该功能,则应该拦截.html结尾的请求.

问题3:为什么要拦截以.html为结尾的请求?
说明:想用一个页面展示所有的商品信息,就需要拦截用户的请求。请求由2部分组成: id +后缀,id是变化的有可能变化为不是数字,所以不能拦截id,想要拦截就拦截它的后缀。

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

4.2 关于.html说明

问题1:为什么以.html结尾的页面更容易提高曝光率呢?
因为一般搜索引擎只能检索静态页面信息,不能检索.jsp等动态的页面结构,所以一般为了提高网站的曝光率使得商品更加容易的被用户检索,一般的商品页面都是.html结尾的。

问题2:为什么搜索引擎不能检索动态页面?
记录动态页面有风险:动态页面是二次请求查询的,假设某家网站做的是放恐怖片的电影,而这家网站由于经营不善倒闭了,它的域名和相关信息被买下来了,现在买家公司是做动画的喜洋洋。因为百度页面数据更新不是实时的,这是用户搜索恐怖电影连接的有可能是喜洋洋。显然不合理,所以一般只记录静态页面。

问题3:为什么数据不是实时更新的?
因为用户是实时查询的,如果更新索引表的操作不能太频繁,假如索引表某一天出现问题宕掉了,百度服务器也就是瘫了,一般检索都是24小时后在晚上。因为晚上人少即使影响人也比较少.

4.3 搜索引擎工作原理

工作原理核心: 倒排索引机制根据关键字检索文章的位置。
在这里插入图片描述

4.4 伪静态

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

概括: 以.html结尾的"动态页面"脚本技术,目的是为了增强搜索引擎的友好性。(即:页面看上去是静态的实际是动态页面。为了欺骗浏览器使得交互数据方便,这就是伪静态。)

4.5 伪静态实现测试

说明:如果需要实现伪静态,则需要拦截.html结尾的请求即可,否则程序认为你访问的是具体的静态资源如图所示。
在这里插入图片描述
访问index.jsp页面,不写控制层的方法按照默认的拼接也会跳转。
在这里插入图片描述
如果修改访问路径为:http://www.jt.com/index.html,访问如下图。
在这里插入图片描述
说明:常规来看这个地址想要访问必须有对应的页面。

在这里插入图片描述

再次访问
在这里插入图片描述
以上说明拦截前缀不行,需要拦截后缀进行跳转。

添加配置类:

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

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

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值