1、35 讲:假设 Codis 集群中保存的 80% 的键值对都是 Hash 类型,每个 Hash 集合的元素数量在 10 万~20 万个,每个集合元素的大小是 2KB。你觉得,迁移这样的 Hash 集合数据,会对 Codis 的性能造成影响吗?

  • Codis 支持异步、分批迁移数据,所以,Codis 可以把集合中的元素分多个批次进行迁移,每批次迁移的数据量不大,所以,不会给源实例造成太大影响。

2、36 讲:假设一个商品的库存量是 800,我们使用一个包含了 4 个实例的切片集群来服务秒杀请求,我们让每个实例各自维护库存量 200,把客户端的秒杀请求分发到不同的实例上进行处理,你觉得这是一个好方法吗?

  • 这个方法能否达到一个好的效果,主要取决于,客户端请求能不能均匀地分发到每个实例上。如果可以的话,那么,每个实例都可以帮着分担一部分压力,避免压垮单个实例。在保存商品库存时,key 一般就是商品的 ID,所以,客户端在秒杀场景中查询同一个商品的库存时,会向集群请求相同的 key,集群就需要把客户端对同一个 key 的请求均匀地分发到多个实例上。
  • 为了解决这个问题,客户端和实例间就需要有代理层来完成请求的转发。例如,在 Codis中,codis proxy 负责转发请求,那么,如果我们让 codis proxy 收到请求后,按轮询的方式把请求分发到不同实例上(可以对 Codis 进行修改,增加转发规则),就可以利用多实例来分担请求压力了。
  • 如果没有代理层的话,客户端会根据 key 和 Slot 的映射关系,以及 Slot 和实例的分配关系,直接把请求发给保存 key 的唯一实例了。在这种情况下,请求压力就无法由多个实例进行分担了。题目中描述的这个方法也就不能达到好的效果了。

3、37 讲:当有数据访问倾斜时,如果热点数据突然过期了,假设 Redis 中的数据是缓存,数据的最终值是保存在后端数据库中的,这样会发生什么问题吗?

  • 在这种情况下,会发生缓存击穿的问题,也就是热点数据突然失效,导致大量访问请求被发送到数据库,给数据库带来巨大压力。我们可以采用第 26 讲中介绍的方法,不给热点数据设置过期时间,这样可以避免过期带来的击穿问题。
  • 除此之外,我们最好在数据库的接入层增加流控机制(限流),一旦监测到有大流量请求访问数据库,立刻开启限流,这样做也是为了避免数据库被大流量压力压垮。因为数据库一旦宕机,就会对整个业务应用带来严重影响。所以,我们宁可在请求接入数据库时,就直接拒接请求访问。

4、38 讲:如果我们采用跟 Codis 保存 Slot 分配信息相类似的方法,把集群实例状态信息和Slot 分配信息保存在第三方的存储系统上(例如 Zookeeper),这种方法会对集群规模产生什么影响吗?

  • 假设我们将 Zookeeper 作为第三方存储系统,保存集群实例状态信息和 Slot 分配信息,那么,实例只需要和 Zookeeper 通信交互信息,实例之间就不需要发送大量的心跳消息来同步集群状态了。这种做法可以减少实例之间用于心跳的网络通信量,有助于实现大规模集群。而且,网络带宽可以集中用在服务客户端请求上。
  • 不过,在这种情况下,实例获取或更新集群状态信息时,都需要和 Zookeeper 交互,与 Zookeeper 的网络通信带宽需求会增加。所以,采用这种方法的时候,需要给Zookeeper 保证一定的网络带宽,避免 Zookeeper 受限于带宽而无法和实例快速通信。

5、39 讲:你觉得,Redis 6.0 的哪个或哪些新特性会对你有帮助呢?

  • 这个要根据你们的具体需求来定。从提升性能的角度上来说,Redis 6.0 中的多 IO线程特性可以缓解 Redis 的网络请求处理压力。通过多线程增加处理网络请求的能力,可以进一步提升实例的整体性能。
  • 基于用户的命令粒度 ACL 控制机制也非常有用。当 Redis 以云化的方式对外提供服务时,就会面临多租户(比如多用户或多个微服务)的应用场景。有了 ACL 新特性,我们就可以安全地支持多用户共享访问 Redis 服务了。

6、Redis 和 Memcached、RocksDB 的对比

(1)Redis 和 Memcached 的比较

  1. 和 Redis 相似,Memcached 也经常被当做缓存来使用。不过,Memcached 有一个明显的优势,就是它的集群规模可以很大。Memcached 集群并不是像 Redis Cluster 或Codis 那样,使用 Slot 映射来分配数据和实例的对应保存关系,而是使用一致性哈希算法把数据分散保存到多个实例上,而一致性哈希的优势就是可以支持大规模的集群。所以,如果我们需要部署大规模缓存集群,Memcached 会是一个不错的选择。
  2. 不过,在使用 Memcached 时,有个地方需要注意,Memcached 支持的数据类型比Redis 少很多。Memcached 只支持 String 类型的键值对,而 Redis 可以支持包括 String在内的多种数据类型,当业务应用有丰富的数据类型要保存的话,使用 Memcached 作为替换方案的优势就没有了。
  3. 如果你既需要保存多种数据类型,又希望有一定的集群规模保存大量数据,那么,Redis仍然是一个不错的方案。

(2)Redis 和 RocksDB 的比较

  1. 和 Redis 不同,RocksDB 可以把数据直接保存到硬盘上。这样一来,单个 RocksDB 可以保存的数据量要比 Redis 多很多,而且数据都能持久化保存下来。除此之外,RocksDB 还能支持表结构(即列族结构),而 Redis 的基本数据模型就是键值对。所以,如果你需要一个大容量的持久化键值数据库,并且能按照一定表结构保存数据,RocksDB 是一个不错的替代方案。
  2. 不过,RocksDB 毕竟是要把数据写入底层硬盘进行保存的,而且在进行数据查询时,如果RocksDB 要读取的数据没有在内存中缓存,那么,RocksDB 就需要到硬盘上的文件中进行查找,这会拖慢 RocksDB 的读写延迟,降低带宽。
  3. 在性能方面,RocksDB 是比不上 Redis 的。而且,RocksDB 只是一个动态链接库,并没有像 Redis 那样提供了客户端 - 服务器端访问模式,以及主从集群和切片集群的功能。所以,我们在使用 RocksDB 替代 Redis 时,需要结合业务需求重点考虑替换的可行性。

7、Redis Cluster / Codis / Memcached 集群的选择

  • 集群的可扩展性是我们评估集群方案的一个重要维度,你一定要关注,集群中元数据是用Slot 映射表,还是一致性哈希维护的。如果是 Slot 映射表,那么,是用中心化的第三方存储系统来保存,还是由各个实例来扩散保存,这也是需要考虑清楚的。Redis Cluster、Codis 和 Memcached 采用的方式各不相同。

    • Redis Cluster:使用 Slot 映射表并由实例扩散保存。
    • Codis:使用 Slot 映射表并由第三方存储系统保存。
    • Memcached:使用一致性哈希。
  • 从可扩展性来看,Memcached 优于 Codis,Codis 优于 Redis Cluster。所以,如果实际业务需要大规模集群,建议你优先选择 Codis 或者是基于一致性哈希的 Redis 切片集群方案。

35-39 课后解答总结相关推荐

  1. matlab 邻近度 离群点_Matlab 六章知识点及课后解答

    " 第六.七章需要掌握的才是你以前一直迷惑的." 01 - 数据分析: 求最值.求和.积.中值.均值.标准差.相关系数.协方差: 排序.多项式运算(乘.除.导数.值.根): 曲线拟 ...

  2. [LeetCode]Array主题系列{35,39,40,48题}

    1. 内容介绍 开一篇文章记录在leetcode中array主题下面的题目和自己的思考以及优化过程,具体内容层次按照{题目,分析,初解,初解结果,优化解,优化解结果,反思}的格式来记录,供日后复习和反 ...

  3. 9-21 课后解答总结

    1.11 讲:用于存储图片 ID 及其图片存储对象 ID 这样的键值对数据除了使用 String 类型还有 Hash 类型以外,还可以使用什么数据类型进行存储? 使用 String 类型进行存储的时候 ...

  4. c语言程序设计胡成松,C语言程序设计教学课件 作者 胡成松 黄玉兰 李文红 课后习题解答 习题答案 4选择结构程序设计 .docx...

    C语言程序设计教学课件 作者 胡成松 黄玉兰 李文红 课后习题解答 习题答案 4选择结构程序设计 .docx (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方 ...

  5. matlab207a,MATLAB教程R2012a课后习题答案

    错误发生的根源,并改正之. [目的] ● 正确理解sum 的工作机理. ● reshape 的应用. [解答] (1)企图用以下程序完成题目要求. for k=10:-1:1 A=reshape(1: ...

  6. matlab教程r2012a习题答案,MATLAB__R2012a课后普习题答案全解.doc

    0 此式总成立,说明"无约束". n 情况二:-(x-1)0此为"约束",满足题意. n /8(1)通过符号计算求的导数.(2)然后根据此结果,求和. [目的] ...

  7. Android系统编译之Communication error with Jack server (35), try ‘jack-diagnose‘ or see Jack server log

    jack server failed 场景 个人分析 网上分析 分析1 分析2 原因1:权限问题 原因2:端口占用 原因3:删除 TLSv1, TLSv1.1 测试结论 解决方案 说明 相关链接 场景 ...

  8. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 卷 ba ...

  9. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

    卷 backup 的文件夹 PATH 列表 卷序列号为 00000025 D4A8:14B0 J:. │  1.txt │  c语言经典案例效果图示.doc │  ├─1传智播客_尹成_C语言从菜鸟到 ...

最新文章

  1. 几行代码实现神奇移动的过渡动画
  2. wds和dhcp分开做需要注意问题
  3. oracle 修索引改空间_记一次Oracle分区表全局索引重修的历程
  4. 17原理图查找连接的管脚接口_第三节 主板原理图之标识的作用
  5. ruby之添加当前文件路径到$LOAD_PATH
  6. uploadify动态改变参数
  7. 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
  8. Gradle 4.8.1基本配置
  9. Rust: codewars的Simple Substitution Cipher Helper算法题、N种不简单的解法集
  10. Mac用brew安装mysql
  11. IDispatch接口原理与应用
  12. PCA主成分分析/LDA线性判别分析/CCA典型相关分析 对比
  13. HackTheBox-Magic-Walkthrough
  14. 数据风云、十年变迁(DTCC会议总结)
  15. 科罗拉多州立大学计算机科学,2019上海软科世界一流学科排名计算机科学与工程专业排名科罗拉多州立大学排名第401-500...
  16. VR项目unity相关
  17. 可靠传输协议 rdt 1.0、rdt 2.0、rdt 2.1、rdt 2.2、rdt3.0
  18. 一款APP从设计稿到切图过程全方位揭秘
  19. PowerShell脚本免杀/bypass/绕过杀毒软件
  20. 算法创作 | 一元二次方程求解问题解决方法

热门文章

  1. MobaXterm深度学习环境搭建
  2. c语言用Sleep函数与keybd_event在模拟器实现王者荣耀远征物理脚本
  3. 笔记-统计学习方法-第一章01
  4. 微信授权登陆步骤(微信客户端内)
  5. 用Python+turtle绘制了一颗圣诞树后,朋友圈被霸屏了
  6. 看完把学霸按在地上摩擦,计算机网络知识点总结(3)——TCP部分
  7. 【React】1课 react框架小白入门使用教程
  8. React框架是什么
  9. 判断是为魅族系统(Flyme OS)
  10. 几个简单易懂的 OSPF 实验