redis - Redis 可用性和 CAP 定理
问题描述
在 CAP 定理中,Redis 被指定为缺乏可用性(具有分区容错性和一致性)的数据库。
但是有很多地方 Redis 被认为是高可用的键值对存储。
什么是对的?如果您能提供深入的答案,我将不胜感激。
解决方案
我首先要说没有“CA”类别。大多数系统在没有网络分区的情况下都是 CA。
CAP 定理适用于分布式数据存储,并在网络分区 (P) 发生时生效。它说当 (P) 发生时,分布式数据存储必须在一致性 (C) 或可用性 (A) 之间进行选择。
即当 P 发生时,它将是 PA 或 PC。
RDBMS 曾经是 PC,但随着时间的推移,它们也开始支持 PA。
具体到 Redis,高可用性不仅仅是分区容错。Redis 具有 Master Slave 架构,如果 Master 失败,Redis Sentinel 会将 Slave 提升为新的 Master,从而使整个解决方案具有高可用性。由于多种原因(例如内存不足),主服务器可能会失败(或变得不可用),这不一定是由于网络分区。
然后是网络分区(P)的情况,如果(P)发生,那么Redis在少数分区中变得不可用。这就是为什么从 CAP 的角度来看,Redis 是 CP,因为它在少数分区中变得不可用。请注意,它在多数分区中仍然可用。
您可以在此处阅读有关Redis 高可用性的更多信息。有关分区的详细信息,请参阅标题为“分区下的一致性”的段落。
Redis 也被称为最终一致,因为当 (P) 发生时,少数分区仍然可用几秒钟,并且在此期间对少数分区所做的任何写入最终都会被丢弃。
推荐阅读
- r - read_delim converting values to sci notation even when col_type set to character
- java - 使数百万个小型二进制文件始终可用于测试的最佳解决方案是什么?
- android - 在 Android Studio 中运行 Flutter App 时出现错误:任务 ':app:generateDebugBuildConfig' 执行失败
- javascript - 如何从 firefox 插件访问 firebase firestore?
- javascript - platform.js 还是 api.js?谷歌API
- c# - 存储动作规则
- python - 如何在熊猫中使用带移位功能的最小值/最大值?
- python - 在列表列表中查找共同元素
- javascript - 在向下滚动时显示组件中的某个元素并在向上滚动时隐藏 Reactjs
- django - 在 django 的“for”循环中使用“if”调用函数不起作用