持久化

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;下线主节点时同理。