《3.3.1 redis数据结构原理(1) – string,hash,list》
- 19:35 用Redis实现分布式排他锁。https://redis.io/commands/set页的下部有详细说明
list的数据结构可参考本博的达美乐面试
《3.3.2 redis数据结构原理(2) – set,zset,stream》
- 20:00 redis的zset的数据结构:跳表(skiplist)+hash。可参考blog.csdn.net/zjwendy/article/details/90173855
- 做范围查找时,平衡树(如AVL,红黑树)比skiplist操作复杂
- Stream的id必为递增的数字
《3.3.3 redis数据结构实践之分布式锁的实现》
-
23:20 单机版Redis锁:
申请锁:
释放锁:
扩展面试问题:如果设置的超时时间到了,但占有锁的任务还未完成,怎么办?
Answer1: 对锁进行续约。具体来说,当客户端加锁成功后,启动一个定时任务(watchdog),每隔一段时间检测业务是否处理完成,若否则重新设置key的超时时间。检测的依据就是分布式锁的key是否还存在,如果存在,就进行续约。redisson的锁就带了这样的watchdog机制。 -
38:55 Redlock分布式锁:
-
43分 Redlock获取锁的步骤:
《3.3.4 持久化》
- 44:10 配置哪种条件下进行AOF重写:
- 57分 RDB与AOF对比
《3.3.5 缓存中间件Redis主从模式原理》
- 12分 从高可用的角度考虑 持久化 vs 主从模式
- 28:30左右 主从的一些配置
- 88:30 主从模式的一些应用场景
《3.3.6 缓存中间件Redis Sentinel高可用组件》
- 26:15 Sentinel故障监测:
- 39分 手动failover的场景:主动升级master机器。优点:省去检测故障、选举哨兵的leader等时间,从而减少了不可用时间
- 54:30 使用哨兵,当master下线后重新加入,成了slave
《3.3.7 缓存中间件Redis Cluster集群模式》
- Redis Cluster Gossip 协议
- 67:45 使用Cluster,当master下线后,会从它的slave中选举新的master
《3.3.8 缓存中间件第三方Redis集群模式》
- 38:20 redis原生的数据迁移
我的总结:目前已知的选举:
- Redis哨兵机制中,哨兵集群判定Redis master客观下线后,在哨兵集群内部选举leader,由leader去选新的master。选举原理:拿到一半以上的选票。(Raft)
- Redis分布式锁(RedLock): 拿到一半以上的Redis节点的锁
- Redis官方集群 :理论上持有最新数据的slave将会首先发起选举,只有其他的master可以进行响应,slave判断收到的ack消息个数是否大于半数的master个数,若是,则变成新的master。
Redis集群为什么推荐节点数为奇数?
奇数个master节点可以在满足选举该条件的基础上节省一个节点,比如三个master节点和四个master节点的集群相比,大家如果都挂了一个master节点都能选举新master节点,如果都挂了两个master节点都没法选举新master节点了,所以奇数的master节点更多的是从节省机器资源角度出发的。 - elastisearch集群中,有master选举资格的节点选举master,也是要拿到一半以上选票