首页 > 数据库 >说说你对redis的理解2

说说你对redis的理解2

时间:2024-07-28 21:26:17浏览次数:10  
标签:缓存 redis 同步 理解 复制 服务器 数据 节点

高可用

1.主从复制

在这里插入图片描述

redis中的数据备份在多个服务器中,为了保障数据一致性,提供了主从复制的策略。主服务器进行读写操作,从服务器只读,并且接收主服务器的同步过来的写操作。

设置主服务器和从服务器

# 服务器 B 执行这条命令
replicaof <服务器 A 的 IP 地址> <服务器 A 的 Redis 端口号>

在这里插入图片描述

全量复制过程

  • 建立连接,协同同步:从服务器向主服务请求 psync,进行数据同步,传递主服务器runid(第一次为‘ ?’)和复制进度offset(-1)参数。主服务器相应FULLRESYNC,并带上两个参数,runid(自己的id),复制进度offset(第一次全量复制)
  • 同步操作,主服务执行bgsave命令,异步将自己当前的数据转成rdb文件,发送给从服务武器。由于是bgsave,没有阻塞主进程的对数据的修改。将同步期间收到的写操作放到缓冲区replication buffer 中。
  • 从服务器收到rdb文件,先清除原有的数据,然后将rdb数据载入内存。接着主服务发送缓冲区的命令,然后从服务器执行命令,完成同步。

增量复制过程

当由于网络问题,客户端和主服务器断开连接后,客户端在从服务器读取数据。当主服务器恢复连接后,需要将主服务器所执行的写操作,增量同步到从服务器。

在这里插入图片描述

问题是主服务器怎么知道将那些数据同步到从服务器?

使用一个环形缓存repl_backlog_buffer,标记出主服务器执行到的位置(主服务器偏移量),和从服务器读到的位置(从服务器偏移量)

  • 如果从服务器要读取的数据还在主服务器,就将主服务器的偏移发送给从服务器,从服务器利用偏移量之差取出缓存的命令,并执行。(增量同步)
  • 如果从服务器要读取的数据不在主服务器,就进行全量同步

2.哨兵机制

哨兵机制是为了检测主从服务器是否使用的。

(1)工作机制

  • 判断故障:每隔一秒ping一次,如果主节点没有响应就发起投票,判断主节点是不是主观线。当有一半以上判定主观下线时,就判断为下线。

  • 选举新主节点:所有判断主观下线的节点,可以成为领导者候选节点,通过哨兵投票,选出哨兵的leader。leader决定那个是新的主节点。

  • 故障转移:在已下线的主节点中选择一个从节点,将其转移成主节点。

    ​ 让原来的从节点修改复制目标。

    ​ 将新主节点的ip信息通过发布者/订阅者机制通知给客户端

    ​ 继续监视旧主节点,当旧主节点上线后改为从节点。

场景

在这里插入图片描述

缓存雪崩

大量缓存数据在同一时间过期(失效),请求都打在数据库上。

解决:均匀设置过期时间、互斥锁,并设置超时时间、后台线程定时更新缓存

缓存击穿

缓存中的某个热点数据过期,大量的请求访问了该热点数据。

解决:不给热点数据设置过期时间、互斥锁方案、

缓存穿透

缓存穿透:当用户访问的数据,既不在缓存中,也不在数据库中

解决:非法请求的限制,如果判断出是恶意请求就直接返回错误。

当我们线上业务发现缓存穿透的现象时,可以针对查询的数据,在缓存中设置一个空值或者默认值。

布隆过滤器,写入数据库数据时,使用布隆过滤器做个标记。通过查询布隆过滤器快速判断数据是否存在,如果不存在,就不用通过查询数据库来判断数据是否存在

布隆过滤器:一个很长的二进制数组,将存入的数据根据多个hash函数计算出位置,然后将计算结果标记成1。

标签:缓存,redis,同步,理解,复制,服务器,数据,节点
From: https://blog.csdn.net/m0_63803244/article/details/140752045

相关文章

  • GRPC: 理解Protocol Buffers和gRPC的基本概念和使用方法
    什么是ProtocolBuffers?ProtocolBuffers(简称protobuf)是由Google开发的一种灵活、高效的结构化数据序列化方法。它类似于XML或JSON,但具备更小、更快、更简单的特点。protobuf主要用于定义数据的结构,然后生成用于解析和序列化数据的代码。这些代码可以用于各种编程语言,如Jav......
  • jmeter 参数理解
    线程数线程数用于模拟并发用户数,每个线程代表一个虚拟用户;线程组内可以有1-多个接口请求,同属于一个线程,理解为单个用户的事务操作;如果只有一个接口那就说单接口的性能Ramp-Up时间(秒)定义了所有线程启动所需的时间,合理设置ramp-up时间可以避免瞬时加压,使性能测试结果更准确。......
  • [Redis]原子性
    事务为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis也不例外。Redis的事务使用方法非常简单不同于关系数据库我们无须理解那么多复杂的事务模型就可以直接使用。不过也正是因为这种简单性它的事务模型很不严格这要求我们不能像使用关系数据库的事务一样......
  • Redis基础命令
    目录介绍特征redis安装 redis数据结构String类型Hash类型 List类型Set类型 SortedSet Java中操作redisJedisSpringDataRedis导入依赖 编写配置文件测试案例自动序列化手动序列化 介绍Redis全称是RemoteDictionaryServer远程词典服务器,是一个基于......
  • ES基础使用与理解
    各语言对接ES,可由客户端client调用内置的API方法,然后转换为JSON格式的DSL语句进行交互,通过http请求调用ES提供的restful风格的API接口。客户端库的工作流程:API调用:开发者使用客户端库提供的高级API方法,比如client.index()或者client.search()。转换为RESTful请求:客户端......
  • Redis变慢的原因及排查方法-系统方面
    原因1:实例内存达到上限1)排查思路如果Redis实例设置了内存上限maxmemory,那么也有可能导致Redis变慢。当把Redis当做缓存使用时,通常会给这个实例设置一个内存上限maxmemory,然后设置一个数据淘汰策略。而当实例的内存达到了maxmemory后,可能会发现,在此之后每次写入新数据......
  • 如何使用Redis实现一个缓存策略
    使用Redis实现一个缓存策略,主要涉及到数据的存储、读取、更新以及失效处理等方面。下面我将详细介绍如何使用Redis来设计和实现一个基本的缓存策略。1.确定缓存的数据结构和键命名规则首先,你需要决定使用Redis中的哪种数据结构来存储缓存数据,比如字符串(String)、哈希(Hash)、列......
  • Redis(三)事务、管道、主从复制
    事务事务是可以执行一个命令,也可以执行多个命令,事务本质上是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化地执行而不会被其他命令插入Redis事务和传统数据库的区别单独的隔离操作:Redis的事务仅仅是保证事务里面的操作会被连续独占的执行,redis命令的执行......
  • Redis Java客户端(带示例代码)
    目录概述Jedis--快速入门Jedis简介创建项目和测试1.引入依赖2.建立连接3.测试4.释放资源Jedis连接池JedisPool简介创建连接池使用连接池概述在Redis官网中提供了各种语言的客户端网站:ConnectwithRedisclients标记为❤的就是推荐使用的java客......
  • 【Python系列】Python 中的垃圾收集:深入理解与实践
    ......