16 | 用Redis构建缓存集群的最佳实践有哪些?
该思维导图由 AI 生成,仅供参考
Redis Cluster 如何解决数据量大、高可用和高并发问题?
- 深入了解
- 翻译
- 解释
- 总结
Redis Cluster是一个用于构建缓存集群的解决方案,通过分片、主从复制和弹性扩容等功能来实现高可用、高并发和海量数据存储。它采用分片的方式将数据分布到多个节点上,通过哈希槽的概念来实现数据分片,同时支持增加从节点来实现主从复制,以提高高可用性。Redis Cluster还支持水平扩容,但不适合超大规模集群。文章介绍了两种构建Redis集群的方式:基于代理的方式和不使用代理服务的方式。前者对客户端透明,但增加了一层代理转发,可能带来性能损失;后者将代理服务的寻址功能前移到客户端中,适合超大规模Redis集群,性能、弹性、高可用表现良好,但整体架构较为复杂。总的来说,Redis Cluster适合构建中小规模的Redis集群,能够自动化地实现大容量、高可靠和高可用的Redis集群,对应用来说几乎是透明的。文章还提到了不同规模集群的建议使用方式,以及对一些多KEY命令的兼容性问题。
《后端存储实战课》,新⼈⾸单¥59
全部留言(24)
- 最新
- 精选
- 李玥置顶Hi,我是李玥。 这里回顾一下上节课的思考题: 课后请你想一下,把订单表拆分之后,那些和订单有外键关联的表,该怎么处理? 对于这些表,我的建议是,和订单表一起拆分,让相同订单ID的订单和关联表的数据分布到相同的分片上,这样便于查询。2020-04-03348
- LVM_23老师你好,想问个问题。redis的list内元素的单独过期怎么做,而不是整个list过期。 网上都是用时间戳存,然后用定时任务来清除。有其他的方案吗? 写入频繁的,谢谢老师解答了
作者回复: 建议你在list中的每个元素用单独的kv存储,在kv上设置过期时间。list中只保存元素的key。 读取list中的元素时,需要先遍历list,然后再根据key去找到元素的值,如果找不到说明过期了。 list中的key可以用定时任务清理一下,这个定时任务可以不用执行的太频繁,因为即使来不及清理,也不影响key过期。
2020-05-1052 - 发条橙子 。老师 有两个疑问点 1. 大厂自建集群 是不是就是常说的使用一致性哈希来做槽的映射 2. 既然自带集群包含了哨兵, 代理也包含 ,是不是哨兵的功能也是在自建中使用 ,还是大厂自建的也不用哨兵 是自己做的高可用
作者回复: 每个公司的实现方案也都不一样,几种哈希方法没有哪种是绝对的好,所以并不统一。 哨兵这种方式在逐步的被弃用,更多的使用类似于Paxos和Raft的一致性协议来通过选举和复制实现高可用。
2020-04-03318 - 特种流氓redis cluster集群 是不是就没有哨兵的概念了
作者回复: 是的,redis cluster已经包含哨兵的功能了。
2020-04-0214 - 正在减肥的胖籽。请教老师一个问题: 1.redis集群新增分片后,线上怎么实现好的平滑迁移?这个一直没有想到好的解决方法
作者回复: 如果用的是官方的Redis Cluster,可以用它提供的redis-trib.rb自动平滑迁移。 像Codis也提供了平滑迁移的管理工具。如果是自建的集群,相对就比较麻烦了。 我会在后面的第20节课讲,怎么来平滑的迁移数据库,方法同样适用于迁移Redis。
2020-04-0211 - 申学晋redis6.0的官方集群代理和客户端缓存是不是可以把您讲的两种方案结合使用?
作者回复: redis-cluster-proxy 这个项目目前还处于alpha阶段,官方不建议用于生产环境,可以持续关注它。
2020-05-157 - 暴君•熊老师,最后介绍的定制客户端模式来保存分片表。那redis的服务端不需要动嘛?当有新增或者删除节点的时候,服务端内部不还是需要使用流言来传播一次嘛?
作者回复: 这种一般数据节点上就只用原生的Redis,元数据存储在元数据服务上。扩容也只是变更元数据,不需要Redis服务来参与。
2020-04-206 - 喜欢地球的阿培同学老师,您好,问一个问题。最后介绍的定制客户端模式。是不是这些redis是一个一个节点,并没有一起组成一个集群。如果这些redis组成一个集群的话,那岂不是每次新增和删除redis节点时,也会流言传播一次吗?
作者回复: 是的,后面二种方法都不会用到流言协议。
2020-05-083 - haijian.yang阿里云有个 redis 方案,冷数据存磁盘,热数据放在内存。2020-04-028
- samicluster命令是受限的,跟mysql的分库分表一样,有一些场景也是无法支持2020-04-023