cgb2010-京淘项目Day15

1.Redis集群

具体参见笔记

1.1 Redis集群宕机条件

宕机条件: Redis中的主机缺失时,并且没有从机替补,Redis内存数据丢失.这时Redis集群崩溃了.

问题1: 6台redis 3主3从(1主1从分为3组). 至少Redis宕机几台集群崩溃. 至少2台 集群崩溃.
问题2: 9台redis 3主6从(1主2从分为3组). 至少宕机几台Redis集群崩溃. 至少5台 集群崩溃.

集群宕机的条件: 当主机的数量不能保证时集群崩溃.
特点:集群中如果主机宕机,那么从机可以继续提供服务,
当主机中没有从机时,则向其它主机借用多余的从机.继续提供服务.如果主机宕机时没有从机可用,则集群崩溃.
答案:9个redis节点,节点宕机5-7次时集群才崩溃.
在这里插入图片描述

1.2 Redis分区算法

1.2.1 集群测试入门案例

在这里插入图片描述

1.2.2 hash槽算法

Hash槽算法 分区算法.
说明: RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]%16384)映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据.根据主节点的个数,均衡划分区间.
算法:哈希函数: Hash()=CRC16[key]%16384
在这里插入图片描述
当向redis集群中插入数据时,首先将key进行计算.之后将计算结果匹配到具体的某一个槽的区间内,之后再将数据set到管理该槽的节点中.
在这里插入图片描述

1.3 关于算法面试题

1.3.1 关于集群/分片算法说明

问题:一个数据很大.一个槽位不够存怎么办??? 错误?? A 逻辑错误 B. 有道理
解答:
1.一致性hash算法 hash(key) 43亿 按照顺时针方向找到最近的节点 进行set操作.
2.Hash槽算法 crc16(key)%16384 (0-16383) 计算的结果归哪个节点管理,则将数据保存到节点中.
核心知识: 一致性hash算法/hash槽算法 都是用来确定 数据归谁管理的问题. 最终的数据都会存储到node节点中.

1.3.2 面试题1

问: Redis集群中一共可以存储16384个数据? A 对 B 错 为什么???
小明猜想: 由于redis中共有16384个槽位,所以每个槽位存储一个key.那么不就是16384个key吗??
答案: 错误
原因: Redis集群中确实有16384个槽位.但是这些槽位是用来划分数据归谁管理的.不是用来存储数据的. 并且根据hash计算的规则肯能出现碰撞的问题.比如
hash(key1)%16384=3000
hash(key2)%16384=3000

						说明key1和key2归同一个node管理.
						node.set(key1,value1);
						node.set(key2,value2);
		由于槽位只是用来区分数据,数据到底能存储多少个完成由redis内存决定.

1.3.3 面试题2

问题: 为Redis集群中最多有多少台主机?? 16384台主机

1.4 缓存相关面试题

1.4.1 缓存穿透

说明: 用户高并发环境下,频繁访问数据库中不存在的数据.导致用户请求直接访问数据库.严重时导致数据库服务器宕机.
在这里插入图片描述
解决方案:
1. IP限流操作 API网关中设置 设定用户访问的上限 规定每个IP单位时间内只能发送N次请求. 3-5
治标不治本 (IP代理服务器: 1分钟变化一个IP)

2. 布隆过滤器

1.4.1.1 布隆过滤器

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。

核心知识点:
用法: 由二进制向量,hash函数组合.
作用: 判断一个元素是否存在于集合中.
优点: 占用空间更小/效率更高
缺点: 有一定的误判率(hash碰撞), 删除困难.

1.4.1.2 优点说明

问题: 如果有1000万的热点数据需要保存到redis缓存中. 问:是否可行?
计算: 1000万的数据如果需要存储 大约需要20G左右的空间…
知识铺垫:
1 Byte = 8 bit (二进制)。
1KB (Kilobyte 千)=1024B,
  1MB (Megabyte 兆)=1024KB,
  1GB (Gigabyte 吉)=1024MB,
  1TB (Trillionbyte 太)=1024GB,

转变: 假设可以通过 0/1的方式,判断数据是否存在.同时占用的空间较小.那么这个问题就解决了.
计算2: 假设1个数据占用1个bit 问占用空间多大? 1.19M

1.4.1.3 布隆过滤器应用场景

说明:当用户查询服务器时,首先查询布隆过滤器,如果查询存在该数据,则执行后续的流程,
如果查询没有该数据,则直接返回.无需执行后续流程.
在这里插入图片描述

1.4.1.4 布隆过滤器算法介绍

在这里插入图片描述

1.4.1.5 关于布隆过滤器优化说明

1.根据hash原则 数据存在hash碰撞的概率. 则使用布隆过滤器容器造成误判. 如何解决?
在这里插入图片描述

1.4.1.6 优化hash碰撞概率-增加二进制向量

1.4.1.7 优化hash碰撞概率-增加hash函数个数

在这里插入图片描述

1.4.1.8 关于布隆在项目中使用过程

在这里插入图片描述

1.4.2 缓存击穿

说明: 在高并发环境下 某个热点数据由于删除/超时导致该数据在缓存中失效. 这时有大量的请求直接访问数据库.
导致数据库宕机.
在这里插入图片描述
如何优化:
1.定期更新热点数据的超时时间.
2.增加多级缓存机制.
在这里插入图片描述

1.4.3 缓存雪崩

概念: 由于Redis中大量的内存数据失效.导致用户访问缓存的命中率太低.大量的请求直接访问数据库.导致数据库宕机.

命令: flushDB/flushAll这样的命令慎用…
解决方案:
1.设定不同的超时时间/动态更新超时时间
2.设定多级缓存.
在这里插入图片描述

1.5 SpringBoot整合Redis集群

1.5.1 编辑pro配置文件

# 准备redis节点信息
#redis.host=192.168.126.129
#redis.port=6379

# 准备3台redis
#redis.nodes=192.168.126.129:6379,192.168.126.129:6380,192.168.126.129:6381

#准备6个redis节点
redis.nodes=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.5.2 编辑配置类

在这里插入图片描述

1.5.3 编辑CacheAOP

在这里插入图片描述

2.京淘项目前端实现

2.1 京淘前端架构设计

在这里插入图片描述

2.2 JT-WEB项目创建

2.2.1 构建JT-WEB

在这里插入图片描述

2.2.2 添加继承/依赖/插件

<?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">
    <parent>
        <artifactId>jt</artifactId>
        <groupId>com.jt</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>jt-web</artifactId>
    <!--由于添加的是动态web资源所以打包暂时用war-->
    <packaging>war</packaging>

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

    <!--添加插件-->
    <!--添加插件 有main方法时 需要添加插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.2.3 导入配置文件

在这里插入图片描述

2.2.4 编辑启动配置项

在这里插入图片描述

2.2.5 页面效果展现

在这里插入图片描述

2.2.6 关于主启动中注解说明

说明: 该启动项中的配置 表示 springboot启动时,不会加载数据源相关的配置.
原因: springBoot容器中有开箱即用的规则.但是前端项目不需要使用数据源.所以通过如下的配置,可以正常的启动项目
在这里插入图片描述

2.3 添加nginx配置

2.3.1 配置要求

用户通过http://www.jt.com 的方式访问http://localhost:8092服务器.

2.3.2 编辑Hosts文件

在这里插入图片描述

2.3.3 编辑Nginx配置文件

# 配置京淘前台服务器
	server {
		listen 80;
		server_name www.jt.com;

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

2.3.4 效果展现

在这里插入图片描述

2.3.5 关于谷歌浏览器Https协议报错说明

1).关于Http/https之间的关系
在这里插入图片描述
2).解决策略
1.浏览器中键入: chrome://net-internals/#hsts:
在这里插入图片描述

3 预习

1.预习什么是跨域
2.什么是同源策略
3.什么是JSONP
4.什么是CORS
  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀太阳

感觉文章不错的记得打赏呀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值