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------压缩列表、跳表

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

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

相关推荐
菜菜小狗的学习笔记2 小时前
黑马程序员Redis--问题整理(黑马点评)
数据库·redis·缓存
leo_messi942 小时前
2026版商城项目(二)-- 压力测试&缓存
java·缓存·压力测试·springcloud
s1mple“”2 小时前
大厂Java面试实录:从Spring Boot到AI技术的UGC内容社区场景深度解析
spring boot·redis·微服务·kafka·向量数据库·java面试·ai技术
随风,奔跑3 小时前
Spring Data Redis
java·redis·spring
独断万古他化3 小时前
本地缓存与Redis缓存详解:区别、优缺点及场景选型
数据库·redis·缓存
heimeiyingwang3 小时前
【架构实战】热点数据架构:本地缓存+多级缓存
缓存·架构
梵得儿SHI3 小时前
SpringCloud 秒杀系统生产级落地:Sentinel+Redis 联合优化,从限流防刷到库存闭环,彻底解决超卖 / 宕机 / 恶意刷
redis·spring cloud·sentinel·分布式限流·百万级·瞬时高并发·产级秒杀系统解决方案
minhuan4 小时前
大模型应用:AI智能体高并发实战:Redis缓存+负载均衡协同解决推理超时难题.133
人工智能·redis·智能体推理缓存·智能体负载均衡·大模型集群应用
wuyikeer11 小时前
docker下搭建redis集群
redis·docker·容器