《 Redis集群(理论概念) 》

Redis的宕机条件

什么是Reids宕机

  • 宕机是计算机术语,口语里面我们简单的把停掉机器叫做《宕机》,但很多人都叫做“当机”“死机”

宕机条件 : 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次时集群才崩溃

在这里插入图片描述


redis分区算法(hash曹算法)

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

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

在这里插入图片描述

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

在这里插入图片描述

核心知识:

hash槽算法 : 用来确定 数据归谁管理的问题. 最终的数据都会存储到节点中

槽位 : Redis集群中确实有16384个槽位.但是这些槽位是用来划分数据归谁管理的.不是用来存储数据的. 并且根据hash计算的规则肯能出现碰撞的问题

比如:

hash(key1)%16384=3000
hash(key2)%16384=3000
槽位只是用来区分数据,数据到底能存储多少个完成由redis内存决定

缓存穿透

访问数据库中不存在的数据,缓存中没有访问的数据,那么去数据库里找

说明 : 用户高并发环境下,频繁访问数据库中不存在的数据.导致用户请求直接访问数据库.严重时导致数据库服务器宕机(死机)

在这里插入图片描述

布隆过滤器(最佳解决方法)

简介:

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

核心:

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

优点说明:

问题 :如果有1000万的热点数据需要保存到redis缓存中能存吗?

  • 计算 ---- 1000万的数据如果需要存储 大约需要20G左右的空间…
  • 解决 ---- 假设可以通过 0/1的方式,判断数据是否存在.同时占用的空间较小.那么这个问题就解决了.

布隆过滤器应用场景

说明 :

当用户查询服务器时,首先查询布隆过滤器,如果查询存在该数据,则执行后续的流程,如果查询没有该数据,则直接返回.无需执行后续流程.

在这里插入图片描述

布隆过滤器算法介绍

作用 :

  • 判断数据是否存在内存中,如果存在的话执行流程,如果不存在那么直接返回

判断 :

  • 0 不存在
  • 1 存在

操作

  • 将数据保存到布隆过滤器中

算法

  • hash (KEY)%长度
    在这里插入图片描述

关于布隆过滤器优化说明

根据hash原则 数据存在hash碰撞的概率. 则使用布隆过滤器容器造成误判. 如何解决?

在这里插入图片描述

解析

  • KEY 和 KEY1 的值是一摸一样的,存储在一个位置 这种情况是hash碰撞
  • 用户获取的时候 该获取KEY的还是KEY1

优化hash碰撞概率

在这里插入图片描述

解析

  • 增加二进制向量的长度 (有效的降低hash碰撞的概率)
  • 增加hash函数的个数
  • 优化后hash碰撞的该路是0.03% (100万数据 100条误判)
  • 两个相同的值 计算不同两个hash函数中,向量长度够的话碰撞概率降低

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

在这里插入图片描述

缓存击穿

说明 : 在高并发环境下 某个热点数据由于删除/超时导致该数据在缓存中失效. 这时有大量的请求直接访问数据库.导致数据库宕机

在这里插入图片描述

某个热点数据突然失效,导致用户直接访问数据库

如何优化:

  • 定期更新热点数据的超时时间
  • 增加多级缓存机制

在这里插入图片描述

缓存雪崩:

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

解决方案:

  • 1.设定不同的超时时间/动态更新超时时间
  • 2.设定多级缓存.

猜你喜欢

转载自blog.csdn.net/weixin_45103228/article/details/113785621
今日推荐