后端存储实战课
李玥
美团高级技术专家
44005 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 30 讲
结束语 (1讲)
后端存储实战课
15
15
1.0x
00:00/00:00
登录|注册

16 | 用Redis构建缓存集群的最佳实践有哪些?

探索HDFS的解决方案
存储系统之间的相互借鉴
不用代理服务的方式
基于代理的方式
八卦协议
去中心化设计
读写分离
分片承接并发请求
主从复制
增加从节点
主从复制
增加节点
分槽的方法
哈希分片算法
分片
思考题
构建超大规模集群的方式
Redis Cluster不适合超大规模集群的原因
Redis Cluster的高并发解决方案
Redis Cluster的高可用解决方案
Redis Cluster解决数据量大、高可用和高并发问题
数据库宕机怎么办?
并发太高扛不住怎么办?
数据量太大查询慢怎么办?
Redis构建缓存集群的最佳实践

该思维导图由 AI 生成,仅供参考

你好,我是李玥。
之前连续几节课,我们都在以 MySQL 为例子,讲如何应对海量数据,如何应对高并发,如何实现高可用,我先带你简单复习一下。
数据量太大查询慢怎么办?存档历史数据或者分库分表,这是数据分片。
并发太高扛不住怎么办?读写分离,这是增加实例数。
数据库宕机怎么办?增加从节点,主节点宕机的时候用从节点顶上,这是主从复制。但是这里面要特别注意数据一致性的问题。
我在之前课程中,也多次提到过,这些方法不仅仅是 MySQL 特有的,对于几乎所有的存储系统,都是适用的。
今天这节课,我们来聊一聊,如何构建一个生产系统可用的 Redis 缓存集群。你将会看到,几种集群解决方案用到的思想,基本和我们上面讲的都是一样的。

Redis Cluster 如何解决数据量大、高可用和高并发问题?

Redis 从 3.0 版本开始,提供了官方的集群支持,也就是 Redis Cluser。Redis Cluster 相比于单个节点的 Redis,能保存更多的数据,支持更多的并发,并且可以做到高可用,在单个节点故障的情况下,继续提供服务。
为了能够保存更多的数据,和 MySQL 分库分表的方式类似,Redis Cluster 也是通过分片的方式,把数据分布到集群的多个节点上。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Redis Cluster是一个用于构建缓存集群的解决方案,通过分片、主从复制和弹性扩容等功能来实现高可用、高并发和海量数据存储。它采用分片的方式将数据分布到多个节点上,通过哈希槽的概念来实现数据分片,同时支持增加从节点来实现主从复制,以提高高可用性。Redis Cluster还支持水平扩容,但不适合超大规模集群。文章介绍了两种构建Redis集群的方式:基于代理的方式和不使用代理服务的方式。前者对客户端透明,但增加了一层代理转发,可能带来性能损失;后者将代理服务的寻址功能前移到客户端中,适合超大规模Redis集群,性能、弹性、高可用表现良好,但整体架构较为复杂。总的来说,Redis Cluster适合构建中小规模的Redis集群,能够自动化地实现大容量、高可靠和高可用的Redis集群,对应用来说几乎是透明的。文章还提到了不同规模集群的建议使用方式,以及对一些多KEY命令的兼容性问题。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端存储实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • 李玥
    置顶
    Hi,我是李玥。 这里回顾一下上节课的思考题: 课后请你想一下,把订单表拆分之后,那些和订单有外键关联的表,该怎么处理? 对于这些表,我的建议是,和订单表一起拆分,让相同订单ID的订单和关联表的数据分布到相同的分片上,这样便于查询。
    2020-04-03
    3
    48
  • LVM_23
    老师你好,想问个问题。redis的list内元素的单独过期怎么做,而不是整个list过期。 网上都是用时间戳存,然后用定时任务来清除。有其他的方案吗? 写入频繁的,谢谢老师解答了

    作者回复: 建议你在list中的每个元素用单独的kv存储,在kv上设置过期时间。list中只保存元素的key。 读取list中的元素时,需要先遍历list,然后再根据key去找到元素的值,如果找不到说明过期了。 list中的key可以用定时任务清理一下,这个定时任务可以不用执行的太频繁,因为即使来不及清理,也不影响key过期。

    2020-05-10
    52
  • 发条橙子 。
    老师 有两个疑问点 1. 大厂自建集群 是不是就是常说的使用一致性哈希来做槽的映射 2. 既然自带集群包含了哨兵, 代理也包含 ,是不是哨兵的功能也是在自建中使用 ,还是大厂自建的也不用哨兵 是自己做的高可用

    作者回复: 每个公司的实现方案也都不一样,几种哈希方法没有哪种是绝对的好,所以并不统一。 哨兵这种方式在逐步的被弃用,更多的使用类似于Paxos和Raft的一致性协议来通过选举和复制实现高可用。

    2020-04-03
    3
    18
  • 特种流氓
    redis cluster集群 是不是就没有哨兵的概念了

    作者回复: 是的,redis cluster已经包含哨兵的功能了。

    2020-04-02
    14
  • 正在减肥的胖籽。
    请教老师一个问题: 1.redis集群新增分片后,线上怎么实现好的平滑迁移?这个一直没有想到好的解决方法

    作者回复: 如果用的是官方的Redis Cluster,可以用它提供的redis-trib.rb自动平滑迁移。 像Codis也提供了平滑迁移的管理工具。如果是自建的集群,相对就比较麻烦了。 我会在后面的第20节课讲,怎么来平滑的迁移数据库,方法同样适用于迁移Redis。

    2020-04-02
    11
  • 申学晋
    redis6.0的官方集群代理和客户端缓存是不是可以把您讲的两种方案结合使用?

    作者回复: redis-cluster-proxy 这个项目目前还处于alpha阶段,官方不建议用于生产环境,可以持续关注它。

    2020-05-15
    7
  • 暴君•熊
    老师,最后介绍的定制客户端模式来保存分片表。那redis的服务端不需要动嘛?当有新增或者删除节点的时候,服务端内部不还是需要使用流言来传播一次嘛?

    作者回复: 这种一般数据节点上就只用原生的Redis,元数据存储在元数据服务上。扩容也只是变更元数据,不需要Redis服务来参与。

    2020-04-20
    6
  • 喜欢地球的阿培同学
    老师,您好,问一个问题。最后介绍的定制客户端模式。是不是这些redis是一个一个节点,并没有一起组成一个集群。如果这些redis组成一个集群的话,那岂不是每次新增和删除redis节点时,也会流言传播一次吗?

    作者回复: 是的,后面二种方法都不会用到流言协议。

    2020-05-08
    3
  • haijian.yang
    阿里云有个 redis 方案,冷数据存磁盘,热数据放在内存。
    2020-04-02
    8
  • sami
    cluster命令是受限的,跟mysql的分库分表一样,有一些场景也是无法支持
    2020-04-02
    3
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部