Redis组件介绍(五)

写在前面

今天继续学习redis后面的知识。

Redis 哨兵机制

哨兵 Sentinel 机制

Sentinel(哨兵)是 Redis 的高可用性解决方案。由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器。当被监视的主服务器进入下线状态时,Sentinel 会自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单来说,哨兵就是带有自动故障转移功能的主从架构。

无法解决:

  1. 单节点并发压力问题
  2. 单节点内存和磁盘物理上限

哨兵架构原理

Redis 集群

集群

Redis 从 3.0 开始支持 Cluster 模式。Redis 集群支持节点的自动发现、支持从主节点的选举和容错、支持在线分片(sharding)等特性。
PING PONG 协议(心跳机制)

集群搭建

创建集群

  1. 准备环境安装 Ruby 以及 Redis 集群依赖

    yum install -y ruby rubygems
    # https://rubygems.org/gems/redis/versions
    gem install redis-xxx.gem
    
  2. 在一台机器创建 7 个目录

    # 创建目录并复制配置文件
    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/redis.conf ./7000/
    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/redis.conf ./7001/
    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/redis.conf ./7002/
    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/redis.conf ./7003/
    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/redis.conf ./7004/
    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/redis.conf ./7005/
    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/redis.conf ./7007/
    
  3. 修改不同目录配置文件

    # 编辑配置文件(例如 ./7000/redis.conf)
    port 7000                           # 修改端口
    # bind 127.0.0.1 -::1              # 开启远程连接
    protected-mode no
    daemonize yes                       # 开启后台运行
    dbfilename dump-7000.rdb            # 每台机器的文件不能一样
    cluster-enabled yes                 # 开启集群模式
    cluster-config-file nodes-7000.conf # 集群节点配置文件
    cluster-node-timeout 5000           # 集群节点超时时间
    appendonly yes                      # 开启 AOF 持久化
    appendfilename "appendonly-7000.aof" # 修改 AOF 文件名
    appenddirname "appendonlydir-7000"
    
  4. 指定不同目录配置文件启动七个节点

    redis-server 7000/redis.conf
    redis-server 7001/redis.conf
    redis-server 7002/redis.conf
    redis-server 7003/redis.conf
    redis-server 7004/redis.conf
    redis-server 7005/redis.conf
    redis-server 7006/redis.conf
    
  5. 复制集群操作脚本到 bin 目录中

    cp /usr/local/soft/bigdata17/redis-install/redis-7.0.0/src/redis-trib.rb /usr/local/soft/redis/bin/
    

    对于 Redis 7.0.0 之后的版本,使用以下命令:

    redis-cli --cluster create 192.168.40.110:7000 192.168.40.110:7001 192.168.40.110:7002 192.168.40.110:7003 192.168.40.110:7004 192.168.40.110:7005 --cluster-replicas 1
    

  1. 查看集群状态

    # 查看集群状态
    redis-cli --cluster check 192.168.40.110:7000
    

集群节点状态说明

  • 主节点

    • 主节点存在 hash slots,且主节点的 hash slots 没有交叉
    • 主节点不能删除
    • 一个主节点可以有多个从节点
    • 主节点宕机时多个副本之间自动选举主节点
  • 从节点

    • 从节点没有 hash slots
    • 从节点可以删除
    • 从节点不负责数据的写,只负责数据的同步

使用集群

  1. 添加节点(默认为从)

    # 添加主节点
    redis-cli --cluster add-node 192.168.40.110:7006 192.168.40.110:7000 --cluster-slave
    

    注意:1. 该节点必须以集群模式启动 2. 默认情况下该节点是以 master 节点形式添加

  2. 删除副本节点

    # 删除节点
    redis-trib.rb del-node 192.168.40.110:7002 0ca3f102ecf0c888fc7a7ce43a13e9be9f6d3dd1
    

    注意: 1. 被删除的节点必须是从节点或没有被分配 hash slots 的节点

Redis 面试题与理解

穿透(要查询的数据根本不存在)

穿透指用户查询数据时,如果数据既不存在于数据库中,也不存在于缓存中,那么每次请求都会直接访问数据库,从而绕过缓存,导致数据库负载增加。

穿透解决方案

  1. 对空值进行缓存
    类似于上面的例子,虽然数据库中没有 id=-1234 的用户数据,但可以在 Redis 中缓存一个空值(key=-1234,value=null),以避免频繁查询数据库。

  2. 实时监控
    对 Redis 进行实时监控,发现命中率下降时进行排查,结合运维人员分析访问对象和数据,设置黑名单限制服务。

  3. 使用布隆过滤器
    使用 BitMap 作为布隆过滤器,将所有可访问的资源通过简单的映射关系放入布隆过滤器中,当请求到来时,先进行布隆过滤器判断,如果有则放行,否则拦截。

  4. 接口校验
    对无效请求(例如 id=-1234)进行拦截,防止其到达 Redis 或数据库。

雪崩(一批数据有,但过期时间到了)

雪崩指大量数据在同一时刻过期,导致大量请求落到数据库,造成数据库压力增加,严重时可能导致数据库宕机。

雪崩解决方案

  1. 使用互斥锁(Mutex Lock)或分布式锁
    只允许一个请求访问后端数据源,其他请求等待并共享结果。

  2. 将失效时间分散开
    使用随机数生成缓存的过期时间,避免集中失效。

  3. 使用多级缓存架构
    例如使用 nginx 缓存 + Redis 缓存 + 其他缓存,不同层使用不同缓存,可靠性更强。

  4. 设置缓存标记
    记录缓存数据是否过期,过期时触发后台线程更新实际的 key。

  5. 设置热点数据的永不过期或较长过期时间
    减少热点数据失效的机会。

击穿(针对某一个数据突然过期,直接查数据库)

击穿指高并发情况下,当一个 key 突然失效,大量请求直接访问数据库,可能导致数据库负载过高。

击穿解决方案

  1. 为缓存数据设置不同的过期时间
    避免集中失效,监控数据,适时调整。

  2. 引入两级缓存架构
    使用本地缓存(如 Guava Cache)作为第一级缓存,Redis 作为第二级缓存,设置不同的过期时间。

  3. 针对热点数据预加载
    保证缓存不会在同一时间全部失效。

总结

如果大量的请求在redis上得不到响应,那么就会导致这些请求会直接去访问DB,导致DB的压力瞬间变大而卡死或者宕机。

  • 大量高并发请求打在 Redis 上
  • Redis 上的资源未能响应时,直接访问数据库
  • 数据库压力瞬间增大,可能导致数据库宕机,引发一系列“灾害”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791168.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能的动漫虚拟世界(第二代)游戏、游戏源码、教程(三合一)

人工智能的动漫虚拟世界(第二代)游戏、游戏源码、教程(三合一)。我不想跟任何人说话,任何人不要跟我说话,我要安安静静的写。 2024年9月2日第二代制作完成,现在就比较象样了。 男主角换人了,黑头发的。 男女主角有个完善的家了,是小区场景中,一栋二层的小楼。 之前,…

JeecgBoot积木报表AviatorScript表达式注入漏洞复现

漏洞信息 影响组件:JimuReport积木报表 影响版本:v1.6.0 < JimuReport ≤ 1.7.8 漏洞名称:AviatorScript表达式注入漏洞 漏洞链接:积木报表软件存在AviatorScript代码注入RCE漏洞 Issue #2848 漏洞描述: 积木报表软件存在AviatorScript代码注入RCE漏洞 使用接口/jmrepo…

flash详解

flash详解 什么是Flash Flash全名叫做Flash Memory,从名字就能看出,是种数据存储设备,存储设备有很多类,Flash属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,…

Dll 可执行文件的编写与调用

一、Dll 可执行文件的编写 首先我们需要在 VS 创建一个动态链接库(DLL)项目,然后会生成如下代码: // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h"BOOL APIENTRY DllMain( HMODULE hModule, // 指向 Dll 模块的句柄DWORD ul_reason_for_call, /…

rabbitmq高可用集群搭建

需求分析基本情况 在进行RabbitMQ搭建时,我们基于现有的连接数据和业务需求进行了深入分析。目前的统计数据显示,连接数为631,队列数为80418。为了确保业务需求的顺利满足,我们需要在云产品和自建RabbitMQ消息队列服务之间做出选择。 经过比较发现,即使选择腾讯云的最高规…

谈谈springboot中@Conditional相关注解

@Conditional是一个元注解@ConditionalOnClass(xx.class) 这是用于修饰一个类的注解。它主要是让你的代码具有兼容性,如在多模块下common模块中有一些仅仅是部分其他模块依赖、需要配置的类(例如rabbitMQ配置类,我相信他不应该被全模块需要,但是他放在常用模块中依旧是最合…

Categraf+VictoriaMetrics+Grafana网络设备监控方案

背景 应公司网工邀请,一起研究架设一套系统,对公司网络设备进行监控和预警。 基础 什么是SNMP 简单网络管理协议SNMP(Simple Network Management Protocol)用于网络设备的管理。 网络设备多种多样,不同设备不同厂家管理接口各不相同,于是snmp应运而生,SNMP作为广泛应用于…

Categraf+VictoriaMetrics+Grafana,网络设备监控方案

背景 应公司网工邀请,一起研究架设一套系统,对公司网络设备进行监控和预警。 基础 什么是SNMP 简单网络管理协议SNMP(Simple Network Management Protocol)用于网络设备的管理。 网络设备多种多样,不同设备不同厂家管理接口各不相同,于是snmp应运而生,SNMP作为广泛应用于…

Kubernetes存储卷

1. 存储卷基础 1.1 存储卷基础 从概念上讲,存储卷是可供Pod中的所有容器访问的目录Pod规范中声明的存储卷来源决定了目录的创建方式、使用的存储介质以及目录的初始内容存储卷插件(存储驱动)决定了支持的后端存储介质或存储服务,例如hostPath插件使用宿主机文件系统,而nfs…

一场 Kafka CRC 异常引发的血案

一、问题概述 客户的生产环境突然在近期间歇式的收到了Kafka CRC的相关异常,异常内容如下 Record batch for partition skywalking-traces-0 at offset 292107075 is invalid, cause: Record is corrupt (stored crc = 1016021496, compute crc = 1981017560) 报错没有规律性,…

机器学习之——决策树信息增益计算[附加计算程序]

0 前言本文主要介绍信息增益的计算公式并举出若干例子帮助理解。 读者需要具备的知识有:信息熵、条件熵。 本文所示用的数据集为:游玩数据集 1.1节1 信息增益计算公式g(D,A)表示在条件A下对于目标变量D的信息增益。 H(D)表示随机变量D的信息熵。 H(D|A)表示在随机变量A条件下…