- 文件事件处理器
- 数据类型及应用
- 持久化
- 过期键策略
- 数据淘汰
- 主从模式
- 哨兵模式
- 集群模式
- 面试题
- socket
- IO多路复用程序
- 队列+文件事件分派器
- 事件处理器:命令请求处理器、命令回复处理器、命令应答处理器、…
IO操作多线程,命令执行仍为单线程
2. 数据类型及应用- 基本类型:string、hash、list、set、zset
- hyperloglog
- geo
- bitmap
- bloom filter
string:点赞
hash:
list:关注列表、粉丝列表、最新消息
set:共同关注或喜好、交并差集
zset:排行榜
3. 持久化- RDB:快照、如何触发(save, bgsave, 自动)
- AOF:写追加、appendsync策略、AOF文件重写
接受数据完全丢弃,不开启;
单机数据一定丢弃,开启RDB或AOF
主从模式,主不开启,从开启RDB或AOF,(M/S)定时备份
4. 过期键删除策略-
定时删除
-
惰性删除
-
定期删除
采用:定期删除+惰性删除
5. 内存淘汰策略- no-eviction
- allkeys-lru
- allkeys-random
- volatile-lru
- volatile-random
- volatile-ttl
-
结构:一主一从、一主多从、主从从链式
-
作用:读写分离
-
原理:
-
建立连接
-
数据同步:
psync?-1或psync
-
命令传播
复制偏移量和复制积压缓冲区
-
-
架构:sentinel+master+slave
-
作用:主节点的自动故障转移
-
实现机制:
- 定时任务
- 主观下线
- 客观下线
- 选举领导者哨兵节点
- 自动故障转移
1、每个哨兵节点,维持3个定时任务,功能如下 1.1 通过向主节点发送info命令获取最新的主从结构 1.2 通过发布订阅功能,获取其他哨兵节点的信息 1.3 通过向其他节点发送ping命令进行心跳检测,判断是否下线 2、主观下线:心跳检测定时任务中,其他节点超时无回复,哨兵节点会将其主观下线 3、客观下线:哨兵进行主观下线后,通过sentinel is-master-down-by-addr命令询问其他哨兵节点该master节点的状态,如果判断master下线的哨兵数量达到一定数值,认为客观下线 补充:slave主观下线后,无后续操作 4、选举领导者哨兵节点:哨兵节点间,采用Raft,选举出领导者,负责后续故障转移 5、自动故障转移: 5.1 选择新master 5.2 更新主从状态 5.3 将已经下线的master设置新master的slave
- 哨兵节点数量为奇数
-
作用:数据分区;高可用
-
原理
-
数据分区方案:带虚拟节点、一致性、哈希分区
槽 slot 16384个
-
节点通信机制:两个端口、Gossip协议、消息/命令
-
故障转移:类似哨兵模式
-
keys和scan:keys阻塞,scan不阻塞,但有概率重复,需要客户端去重
生产部署:
- 哨兵:3+1+3
- 集群:3*(1+1)
主从节点脑裂:
-
问题:旧master,重新连接上新master,同步数据,造成数据丢失
-
解决:master最少slave数量配置;slave连接到master的最大延迟时间
min-replicas-to-write 3 min-replicas-max-lag 10



