Redis专题

1. 主从部署

主从复制主要⽤于实现数据的冗余备份和读分担,并不是真正的高可用。

一个主节点,一个或者多个从节点。

同步数据的方向:单向 ,只能主节点到从节点。

作用:

  • 数据冗余:除了数据持久化之外的一种数据冗余方式。
  • 故障恢复:主节点出现问题,从节点提供服务。可以手动切换。
  • 负载均衡:主节点写,从节点读。非常适合写少读多的场景。
  • 高可用的基石:主从复制是哨兵模式和集群能使用的基础。

缺点:

  • 主节点同步数据到从节点,存在延时,特别是从节点越来越多,延时会越严重。
  • 主节点宕机,从节点要手动切换到主节点,不能自动切换。
2.哨兵部署(Sentinel)

原理:哨兵模式是通过独立的哨兵节点上的哨兵进程来实现的。哨兵进程会监控主节点和从节点的状态。当哨兵领导者通过心跳监控主观的判断主节点是否可用,并且当超过选举个数的哨兵节点也判断认为该主节点存在问题,大部分哨兵节点都同意下线,该主节点就客观下线了。哨兵领导者会执行故障转移,从当前的从节点中选出一个新的主节点,并将其他节点切换到新的主节点,为系统提供服务。哨兵节点会通知客户端新的主节点位置,使其能与新的主节点建立连接。如果是从节点出现故障,哨兵节点会让他先下线,等恢复正常了,再重新加入集群。

确认主节点:

  • 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应 的从节点
  • 选择从节点优先级最⾼的
  • 选择复制偏移量最⼤,此指复制最完整的从节点
  • 当主节点出现故障, 由领导者负责处理主节点的故障转移。

建议:

  • 哨兵节点应该是多个,奇数个,构成哨兵集群,保证高可用
  • 哨兵节点的配置是一致的

哨兵模式必不能保证数据完全不丢失,主要有以下几点原因

  • 主节点的故障转移时需要时间的。
  • 从节点全部故障或者在故障转移之前都失联,将没有从节点升到主节点。
3. 集群部署

Redis集群部署的最小架构是3个主节点+3个从节点,每个主节点至少一个从节点。整个数据集会被自动分割到多个节点,每个主节点都可以对外提供读服务和写服务。每个键通过CRC16算法对16384个哈希槽取模------CRC16(KEY)%16384 来确定其所属槽。

客户端访问任意节点,如果计算出是属于本节点的就直接处理,不是的话,返回MOVED 重定向,客户端再去连接正确的节点。当然客户端也可以缓存槽位分布表,减少定向次数。

节点A向节点B发送心跳检测,超时没有收到响应,就会标记节点B疑似下线(PFAIL),多数的主节点确认后,就可以标记为已下线(FAIL)。

主节点故障,从节点等待延时时间,发起选举,获取多数投票就可以成为新的主节点,接管原来主节点的槽,更新集群的配置。

4. Redis的核心数据结构

1)String------底层是动态字符串

常用的场景:计数(自增 INCR 、自减DECR)

分布式锁: SET product:10001 true ex 10 nx //nx保证互斥,只有一个客户端能设置成功,PX设置超时防止死锁。释放锁之前(DEL product:10001),要先检查是否是当前锁,避免误删其他客户端的锁。

2)list------压缩链表、双向链表

常用的数据结构:

  • Stack(栈) = LPUSH + LPOP
  • Queue(队列)= LPUSH + RPOP
  • Blocking MQ(阻塞队列)= LPUSH + BRPOP

常见应用场景:

签到列表、简化版的MQ

注意点:

  • 大KEY
  • 因为底层是双向链表,所以头尾操作方便,中间通过索引获取值性能差。

3)Hash------哈希表、压缩列表

常用2种:一个是放JSON 二是HASH分字段存储

比如余额表操作,因为变化的是余额,用第二种方式就会更方便。

注意点:过期的功能只能用在key上。

4)set------哈希表、整数数组

存放不重复的集合。适合全局去重的操作以及抽奖的场景。

5)zset------压缩列表、跳表

有序集合,适合排行榜的场景。

跳表:将有序链表改造为支持"折半查找"算法,可以进行快速的增删查找操作。

相关推荐
下次再写16 分钟前
Java互联网大厂面试技术问答实战:涵盖Java SE、Spring Boot、微服务及多场景应用
java·数据库·缓存·面试·springboot·microservices·技术问答
白豆五20 分钟前
Redis高级(持久化机制、主从集群、哨兵、分片集群)
数据库·redis·缓存
woniu_buhui_fei21 分钟前
Redis知识整理一
数据库·redis·缓存
Chasing__Dreams1 小时前
Redis--基础知识点--29--Redis瓶颈
数据库·redis·php
2601_949194261 小时前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
豆瓣鸡2 小时前
Redis笔记(黑马点评)
java·redis·nosql
csdn2015_2 小时前
spring boot 启动的时候将数据库里的分类信息写入redis
数据库·spring boot·redis
大G的笔记本3 小时前
redis分布式锁过期问题和自动续期和主从延迟问题
redis·分布式
MmeD UCIZ3 小时前
GO 快速升级Go版本
开发语言·redis·golang
阿洛学长4 小时前
Yarn 安装速度优化:一键换源+清缓存+重装依赖
缓存