Redis数据库 | 发布订阅、主从复制、哨兵模式、缓存雪崩

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis数据库 | 发布订阅、主从复制、哨兵模式、缓存雪崩


Redis发布订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息

Redis 客户端可以订阅任意数量的频道

Redis主从复制

Redis主从复制是指在Redis中设置一个主节点(Master)和一个或多个从节点(Slave),主节点将自己的数据复制到从节点上,从节点会自动同步主节点上的数据,以实现数据的备份和读写分离

  • 数据备份和容灾:通过主从复制,可以将主节点的数据复制到一个或多个从节点上,从而实现数据的备份和容灾。当主节点发生故障或数据丢失时,可以快速切换到从节点,保证数据的可用性和持久性
  • 负载均衡:通过将读操作分摊到多个从节点上,可以减轻主节点的负载压力。主节点专注于处理写操作,而从节点处理读操作,提高系统的整体性能和吞吐量
  • 高可用性:主从复制可以提高系统的可用性。当主节点发生故障时,可以快速切换到从节点,实现自动故障转移,减少服务中断时间,提高系统的稳定性和可靠性
  • 数据分析和报表生成:通过将读操作分摊到从节点上,可以用于数据分析和报表生成。由于主节点专注于处理写操作,从节点可以用于查询和分析数据,提供实时的数据分析和报表生成功能
  • 高并发读取:通过将读操作分摊到多个从节点上,可以提高系统的并发读取能力。多个从节点可以同时处理读请求,提高系统的并发处理能力,减少读取的响应时间

哨兵模式

哨兵模式是Redis提供的一种高可用性解决方案,用于监控和管理Redis节点的自动故障转移

  • 主观下线:一个哨兵节点基于自己的主观判断,认为一个Redis节点(主节点或从节点)不可用的状态;当一个哨兵节点检测到一个节点无法响应心跳或超时时,它会将该节点标记为主观下线;主观下线只是一个哨兵节点自己的看法,并不代表其他哨兵节点或客户端也认为该节点不可用
  • 客观下线:多个哨兵节点之间达成共识,认为一个节点不可用的状态;当多个哨兵节点通过消息通信交换信息后,如果它们都达成共识,认为一个节点不可用,那么该节点将被标记为客观下线;客观下线是基于多个节点的共识,具有更高的可靠性和准确性

单哨兵模式

单哨兵模式(Single Sentinel mode)是哨兵模式的一种简化形式,适用只有一个Redis主节点和一个哨兵节点的情况

多哨兵模式

多哨兵模式是哨兵模式的一种扩展形式,适用于需要更高可靠性和容错性的情况

Redis缓存穿透与雪崩

缓存穿透

Redis缓存穿透(Cache Penetration):恶意请求或者非法请求绕过缓存层直接访问数据库。当一个请求查询一个不存在的数据时,缓存层无法命中缓存,也无法从数据库中获取数据,导致每次请求都访问数据库,增加数据库的负载,并且无法获得有效的缓存

布隆过滤器

所有可能的查询参数以hash形式存储,不符合则丢弃,避免对底层存储系统的查询压力

缓存空对象

存储层不命中后,即使返回的空对象也将其存储,并设置过期时间,之后再访问这个数据将会从缓存中获取,保护后端数据源

缓存雪崩

Redis缓存雪崩(Cache Avalanche):缓存中的大量数据同时过期或者缓存服务器宕机,导致大量请求直接访问数据库,造成数据库瞬时压力过大,甚至引起数据库崩溃

解决方案:

  • 高可用:系统能够在长时间运行过程中保持正常的运行状态,即系统具备持续稳定可用的能力。在高可用系统中,系统的服务能够始终对外提供服务,不会因为单点故障或异常情况而导致系统不可用
  • 限流降级:限流降级是一种在系统高负载或异常情况下,通过限制请求的访问量或降低服务质量,保证系统的稳定性和可用性的策略
  • 数据预热:系统低峰期或缓存数据过期前,提前主动加载缓存数据,使其重新生成或刷新缓存,避免大量请求同时落到数据库上

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
10天前
|
缓存 NoSQL Redis
Python缓存技术(Memcached、Redis)面试题解析
【4月更文挑战第18天】本文探讨了Python面试中关于Memcached和Redis的常见问题,包括两者的基础概念、特性对比、客户端使用、缓存策略及应用场景。同时,文章指出了易错点,如数据不一致和缓存淘汰策略,并提供了实战代码示例,帮助读者掌握这两款内存键值存储系统的使用和优化技巧。通过理解其核心特性和避免常见错误,可以提升在面试中的表现。
20 2
|
6天前
|
消息中间件 缓存 数据库
如何保证缓存与数据库的数据一致性?
如何保证缓存与数据库的数据一致性?
23 5
|
4天前
|
存储 缓存 NoSQL
Redis多级缓存指南:从前端到后端全方位优化!
本文探讨了现代互联网应用中,多级缓存的重要性,特别是Redis在缓存中间件的角色。多级缓存能提升数据访问速度、系统稳定性和可扩展性,减少数据库压力,并允许灵活的缓存策略。浏览器本地内存缓存和磁盘缓存分别优化了短期数据和静态资源的存储,而服务端本地内存缓存和网络内存缓存(如Redis)则提供了高速访问和分布式系统的解决方案。服务器本地磁盘缓存因I/O性能瓶颈和复杂管理而不推荐用于缓存,强调了内存和网络缓存的优越性。
22 1
|
21小时前
|
缓存 NoSQL Java
springboot业务开发--springboot集成redis解决缓存雪崩穿透问题
该文介绍了缓存使用中可能出现的三个问题及解决方案:缓存穿透、缓存击穿和缓存雪崩。为防止缓存穿透,可校验请求数据并缓存空值;缓存击穿可采用限流、热点数据预加载或加锁策略;缓存雪崩则需避免同一时间大量缓存失效,可设置随机过期时间。文章还提及了Spring Boot中Redis缓存的配置,包括缓存null值、使用前缀和自定义过期时间,并提供了改造代码以实现缓存到期时间的个性化设置。
|
4天前
|
NoSQL 安全 Redis
聊聊Redis主从复制
聊聊Redis主从复制
26 0
|
5天前
|
缓存 NoSQL Redis
深度解析Redis的缓存双写一致性
【4月更文挑战第20天】
30 1
|
6天前
|
缓存 NoSQL 算法
Redis入门到通过之解决Redis缓存击穿、缓存穿透、缓存雪崩
Redis入门到通过之解决Redis缓存击穿、缓存穿透、缓存雪崩
12 0
|
6天前
|
存储 缓存 NoSQL
Redis入门到通关之解决Redis缓存一致性问题
Redis入门到通关之解决Redis缓存一致性问题
19 0
|
6天前
|
存储 缓存 NoSQL
Redis入门到通关之Redis缓存数据实战
Redis入门到通关之Redis缓存数据实战
14 0
|
6天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
17 0