redis集群相关知识点级springboot整合redis集群

本文介绍了Redis集群的宕机条件和分区算法,强调了主机数量的重要性以及槽位分配策略。在面试题中,讨论了一致性和哈希槽算法,并解释了数据存储的原理。此外,针对缓存问题,如穿透、击穿和雪崩,提出了布隆过滤器作为优化手段,探讨了其工作原理、优缺点和应用场景,以及如何减少误判率。最后,提到了SpringBoot整合Redis集群的配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.redis

1.1redis集群宕机的条件

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

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

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

 

集群宕机的 条件:当主机的数量不能保证时集群崩溃

特点:集群中如果主机宕机,那么从机可以继续提供服务,

当主机中没有从机时,则向其他主机借用多余的从机,继续提供服务。如果主机宕机时没有从机 可用,则集群崩溃

答案:9个redis节点,节点宕机5-7次时集群才崩溃

在这里插入图片描述

1.2redis分区算法

1.2.1集群测试入门案例

在这里插入图片描述

1.2.2hash槽算法

hash槽算法 分区算法

说明:RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]%16384)映射到0-16383槽内,

共16384个槽位,每个节点维护部分槽及槽所映射的键值数据,根据主节点的个数,均衡划分区间。

算法:哈希函数Hash()=CRC16[key]%16384

在这里插入图片描述

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

在这里插入图片描述

1.3关于算法面试题

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

问题:1个数据很大,一个槽位存不下怎么办???错误!!

解答:

1.一致性hash算法hash(key)43亿按照顺时针方向到最近的节点进行set操作

2.Hash槽算法CRC16(key)%16384 (0-163813)计算的结果归哪个节点管理,则将数据保存到节点中

核心知识:一致性hash算法/hash算法 都是用来确定数据归给谁管理的,最终的数据都会存储到node节点中

1.3.2面试题1

问:redis集群中一共可以存储16384个数据??    错!!

小明猜想:由于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次请求。(指标不治本    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.5SpringBoot整合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编辑ChachAOP

在这里插入图片描述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值