Redis高级的相关问题总结

1.rdb和aof有什么区别?你们在工作中如何使用redis的持久化策略?

1.rdb定时对整个内存做快照,aof记录每一次执行的命令

2.rdb两次备份之间会丢失数据,aof取决于刷盘策略,相对比较完整

3.rdb宕机恢复速度快,aof恢复速度慢

4.rdb数据恢复优先级低,aof高,因为aof数据完整性更高

5.rdb占用大量cpu和内存的消耗,aof主要是磁盘io资源

rdb可以容忍数分钟的数据的丢失,只要追求速度快,aof对于数据的安全系数比较高

如果对数据安全性要求有较高,何以结合两者来使用

2.AOF的刷盘策略有哪些?

1.appendfsync always 每执行一次写命令,立即记录到AOF文件

2.appendfsync everysec 执行一次写命令先放到缓冲区,然后每隔一秒钟将缓冲区的数据写到aof中。

3.appendfsync no先放入AOF缓冲区,由操作系统决定什么时候写入磁盘

3.主从同步的全量同步和增强同步的过程是怎么样的?

全量增步:master将完整的内存数据生成rdb,发送rdb到slave。后续命令则记录在repl_baklog,逐个发送给slave。

增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave。

4.主观下线和客观下线是什么意思?哨兵如何选举master?

哨兵基于pingpang心跳的机制,每隔1秒向每个master发送ping命令,如果在规定的和时间内没有响应回来,则认为时主观下线,如果还有哨兵继续向这个master发送pingpang的心跳机制在规定的时间内也没有得到相应的回应,这时就会认为这个master客观下线。

首先会判断slave节点与master节点断开时间长短,如果超过指定值则会排除该节点,然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举,如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高,最后是判断slave节点的运行id大小,越小优先级越高。

实现:sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master,sentinel给所有其它slave发送slaveof IP port 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点。

5.redis cluster集群的分槽策略是怎么样的?

计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是槽值。

经验分享 程序员 微信小程序 职场和发展