持久化
RDB+AOF
RDB,通过fork+copy on write
fork只复制指针操过很快,保证数据时点性
copy on write 父进程在写操作时,会先复制对应的数据,再进行修改,保证数据的隔离性
单机
单点故障、容量有限、性能瓶颈
AKF
X:全量,镜像
Y:业务,功能
Z:优先级,逻辑再拆分
CAP
C:一致性
A:可用性
P:分区容错性
提供高可用性(high availability)
主从
主节点具有读写功能,从节点通过RDB+AOF+缓存消息队列同步主节点数据,从节点只有读的功能
缺点:主节点又变成了单点故障,需要人工手动重新指定主节点,以及让其他从节点追随新的主节点
哨兵哨兵(Sentinel)
每个Redis服务对应一个哨兵,哨兵之间通过发布订阅的方式获得其他的从节点和哨兵信息,然后会保存到自己的配置文件中,哨兵之间会两两通信,当主节点故障后,通过哨兵间的过半机制,确定是否从新选择新的主节点。(不用过半机制时,容易出现脑裂问题)
自动分区(Cluster)
Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。
每个Redis中存有其他主节点的hash槽,当获取数据时,当计算出的hash槽不是当前节点时,则会返回正确的节点信息,以便客户端重新请求。(客户端可以将这些映射储存起来)
数据聚合操作 hash tag {xx}key1、{xx}key2
在新增主节点时,可以从其他主节点中迁移一部分hash;下线主节点时同理。